看板 PHP 關於我們 聯絡資訊
我們在使用MySQL時都會注意SQL Injection和防止網頁代碼注入 也就是會使用addslashes和htmlspecialchars函數 在使用MySQL時除了要注意這兩點之外 還有沒有其他需要注意的? 另外, 在寫上傳檔案的PHP程式時, 有時候為了防止使用者上傳PHP檔以攻擊伺服器內部而會阻止以「.php」為副檔名的檔案 除此之外,是否還有其他須注意的地方? 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 220.136.121.238 ※ 文章網址: https://www.ptt.cc/bbs/PHP/M.1509689691.A.10C.html ※ 編輯: red0whale (220.136.121.238), 11/03/2017 14:16:30
dododavid006: 上傳檔案的部份建議是用白名單比較安全 不然就是檔11/03 15:23
dododavid006: 案不可以放在可以直接下載的到的地方 要有另一個11/03 15:24
dododavid006: php 去拿檔案給你下載 另外這個 php 又要注意不能有11/03 15:24
dododavid006: 能使用 ../ 之類的漏洞 比較好的做法是每個檔案給一11/03 15:25
dododavid006: 個 id 用 id 去對應實際的檔案 而不要在網址內有檔11/03 15:26
dododavid006: 案路徑11/03 15:26
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對防止老手駭客無效呢? 謝謝
GALINE: 跳脫請用 mysql(i)_real_escape_string11/03 15:36
GALINE: 當然最好是用 prepared statement 去 bind 變數11/03 15:37
GALINE: 盡量不要自組SQL,雖然對老系統這有時等於是全部重寫...11/03 15:37
GALINE: 然後htmlspecialchars不該在存DB的時候做,是顯示時才做11/03 15:38
crossdunk: 我都不用addslashes而是用PDO加上prepared11/03 16:22
※ 編輯: red0whale (110.28.136.18), 11/03/2017 18:45:41
banqhsia: 永遠記得不要用直接使用者提供的任何東西,就算真的要 11/03 21:23
banqhsia: 也一定要跳脫。上傳的檔案,直接用 hash 產生檔名改名 11/03 21:23
banqhsia: ,限制上傳檔案的類型,然後強制改副檔名 11/03 21:23
nacoyow: 使用PDO +1 11/03 21:25
dou0228: PDO,寫一個類似ActiveRecord 的 class 做這事情 11/03 22:30
tkdmaf: 正確的使用PDO,你就沒煩沒惱了。 11/04 12:48
cd99cd99: 推薦使用PDO 11/06 08:43
MOONRAKER: 3DO 11/06 14:54
tkdmaf: ↑這傳說中的失敗作耶!但也間接造就了ps 11/06 22:46
MOONRAKER: 被發現了…沒錯!傳說中的無敵大爛作 ;) 11/08 17:05