2014-01-06 27 views
5

我對此有點困惑。我一直在閱讀有關htmlspecialchars(),我打算將這個用於textareas POST以防止XSS攻擊。我知道通常使用htmlspecialchars()來生成發送給瀏覽器的HTML輸出。但我不確定的是:在插入MySQL之前使用htmlspecialchars()是否好?

1)在將用戶輸入數據插入到MySQL之前,使用htmlspecialchars()是否安全?我已經使用帶有參數化值的PDO準備語句來防止SQL注入。

2)或者,我真的不需要擔心使用htmlspecialchars()來插入值(只要它們是參數化的),並且只使用htmlspecialchars()當我從MySQL獲取結果並將其顯示給用戶時?

+5

#2是正確的答案 – jszobody

+5

HTML轉義(1)與您的數據庫並不真正相關。通常情況下(2)是首選,因爲過早逃脫可能會影響以後的網頁以外的輸出通道。對於新手來說,早期的HTML轉義仍然是可取的;比後來遺忘更早。 – mario

+1

假設你想產生一些文本日誌。那麼你將不得不撤消你的逃跑。相反,在最後一刻可以逃脫,以便你知道這是適當的。 –

回答

11

正如其他人指出的,#2是正確的答案。保持「原始」直到你需要它,然後適當地逃脫。

爲了詳細說明爲什麼(我會重複/總結其他帖子),讓我們將情景1放到其邏輯極端。

當有人輸入「' OR 1=1 <other SQL injection> --」時會發生什麼。現在,也許你決定,因爲你使用SQL,你應該編碼爲SQL(也許因爲你沒有使用參數化語句)。所以現在你必須混合(或決定)SQL編碼。

突然你的老闆決定他也想要一個XML輸出。現在爲了保持你的模式一致,你也需要編碼。噢,不,不!如果文本中有引號和逗號怎麼辦?更多逃脫!

嘿 - 一個不錯的交互式AJAX界面怎麼樣?現在你可能想開始發送JSON回瀏覽器,所以現在{,[等等都需要考慮。幫幫我!!

所以很清楚,存儲數據爲給定的(當然受到域約束),並在需要時編碼爲適合您的輸出您的輸出與您的數據不一樣。

我希望這個答案不是太光顧。信貸給其他受訪者。

+0

非常感謝您爲我總結並解釋爲什麼#2將是最佳做法。 :) – Neel

相關問題