作者red0whale (red whale)
看板PHP
標題[請益] 使用MySQL除了注意這些之外…
時間Fri Nov 3 14:14:48 2017
我們在使用MySQL時都會注意SQL Injection和防止網頁代碼注入
也就是會使用addslashes和htmlspecialchars函數
在使用MySQL時除了要注意這兩點之外
還有沒有其他需要注意的?
另外,
在寫上傳檔案的PHP程式時,
有時候為了防止使用者上傳PHP檔以攻擊伺服器內部而會阻止以「.php」為副檔名的檔案
除此之外,是否還有其他須注意的地方?
謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 220.136.121.238
※ 文章網址: https://webptt.com/m.aspx?n=bbs/PHP/M.1509689691.A.10C.html
※ 編輯: red0whale (220.136.121.238), 11/03/2017 14:16:30
1F:→ dododavid006: 上傳檔案的部份建議是用白名單比較安全 不然就是檔11/03 15:23
2F:→ dododavid006: 案不可以放在可以直接下載的到的地方 要有另一個11/03 15:24
3F:→ dododavid006: php 去拿檔案給你下載 另外這個 php 又要注意不能有11/03 15:24
4F:→ dododavid006: 能使用 ../ 之類的漏洞 比較好的做法是每個檔案給一11/03 15:25
5F:→ dododavid006: 個 id 用 id 去對應實際的檔案 而不要在網址內有檔11/03 15:26
6F:→ dododavid006: 案路徑11/03 15:26
7F:推 GALINE: 不要用 addslashes 做 sql 跳脫(這東西對熟手沒用)11/03 15:36
冒昧請教一下,
為什麼addslashes對SQL Injection無效?
如果我的PHP變數都嵌入在SQL語法的字串型態當中,
也就是像這樣:
$str="SELECT aaa,bbb FROM tableName WHERE aaa='".addslashes($a)."' AND bbb='".
addslashes($b)."'";
亦即 addslashes只用在SQL語法字串型態裡頭 (兩個單引號「'」之間)
那這樣是否可以使用addslashes?
另外,怎麼說addslashes對防止老手駭客無效呢?
謝謝
8F:→ GALINE: 跳脫請用 mysql(i)_real_escape_string11/03 15:36
9F:→ GALINE: 當然最好是用 prepared statement 去 bind 變數11/03 15:37
10F:→ GALINE: 盡量不要自組SQL,雖然對老系統這有時等於是全部重寫...11/03 15:37
11F:→ GALINE: 然後htmlspecialchars不該在存DB的時候做,是顯示時才做11/03 15:38
12F:推 crossdunk: 我都不用addslashes而是用PDO加上prepared11/03 16:22
※ 編輯: red0whale (110.28.136.18), 11/03/2017 18:45:41
13F:推 banqhsia: 永遠記得不要用直接使用者提供的任何東西,就算真的要 11/03 21:23
14F:→ banqhsia: 也一定要跳脫。上傳的檔案,直接用 hash 產生檔名改名 11/03 21:23
15F:→ banqhsia: ,限制上傳檔案的類型,然後強制改副檔名 11/03 21:23
16F:推 nacoyow: 使用PDO +1 11/03 21:25
17F:推 dou0228: PDO,寫一個類似ActiveRecord 的 class 做這事情 11/03 22:30
18F:推 tkdmaf: 正確的使用PDO,你就沒煩沒惱了。 11/04 12:48
20F:推 cd99cd99: 推薦使用PDO 11/06 08:43
21F:→ MOONRAKER: 3DO 11/06 14:54
22F:推 tkdmaf: ↑這傳說中的失敗作耶!但也間接造就了ps 11/06 22:46
23F:→ MOONRAKER: 被發現了…沒錯!傳說中的無敵大爛作 ;) 11/08 17:05