2012-03-28 88 views
2

我有一個textarea的值將被插入到mysql數據庫中。爲了防止mysql注入,我是否通過nl2br,mysql_real_escape_string,htmlentities或2個或全部3個組合來處理輸入?我按什麼順序處理數據?Textarea防止mysql注入 - PHP

+0

抵禦SQL注入早已覆蓋所有的地方。您可能還想考慮準備好的陳述。 – GordonM 2012-03-28 14:55:04

回答

5

nl2br基本上將所有"\n""<br/>",所以我看不出它如何與SQL注入幫助(不是mysql注入btw)

mysql_real_escape_string通常用於這種類型的NG。

htmlentities用於防止用戶在您的網站上注入惡意<script>,如果您允許用戶輸入。請注意,按字母順序存儲字符串通常是可接受的做法,只要您輸出字符串時只撥htmlentities

您需要知道上述每一項操作,並僅在需要時才使用它們,而不是將它們組合在一起可能會破壞更糟糕的東西。

爲確保您的數據庫中的另一個更好的和更安全的替代方案是使用mysqlihttp://sg.php.net/mysqli,它提供了事先準備好的聲明,以幫助你過濾掉你的SQL

+0

這是誤導。 'mysqli'不會「自動」過濾出sql。您必須專門使用準備好的語句。在'mysqli'中構建一個帶有注入的查詢(或任何使用不當的DB包裝)會非常容易。 – 2012-03-28 15:39:16

+0

@tandu那個更好? – 2012-03-28 15:40:15

+0

是的,我認爲是。 – 2012-03-28 15:40:58

0

如果您使用PDO或mysqli準備好的語句,那麼您只需綁定參數。如果使用舊的mysql擴展,那麼你應該使用mysql_real_escape_string()

3

只有處理你需要在插入時爲mysql_real_escape_string,但最好是使用或許與PDOMDB2準備語句。

從不將編碼數據存儲在數據庫中。您應該始終存儲原始數據。也就是說,不要使用nl2brhtmlentities進行存儲。但是,如果要將數據插入到DOM中(nl2br純粹是可見的,htmlentities將有助於防止XSS),您應該將其用於顯示。另請注意,htmlspecialchars可能是首選,具體取決於您希望如何處理顯示 - 這應該足以實現基本的XSS保護。

記住這個口頭禪:

  • 逃避存儲
  • 編碼顯示