2010-04-13 52 views
2

我想知道如果將POST輸入從HTML表單轉換爲html實體(通過PHP函數htmlentities()或與filter_input()PHP函數結合使用FILTER_SANITIZE_SPECIAL_CHARS常量),將有助於抵禦任何攻擊,其中用戶嘗試在表單字段中插入任​​何JavaScript代碼,或者如果有任何其他基於PHP的函數或策略,我應該使用它來創建安全的HTML表單體驗?使用從HTML表單轉換爲htmlentities的輸入是否可以保護啓用JavaScript插入的攻擊?

對不起加載的跑分句問題,但這是最好的,我可以匆忙地說。

任何答覆,將不勝感激,並感謝所有提前。

racl101

回答

2

它會變成如下:

<script>alert("Muhahaha");</script> 

&lt;script&gt;alert("Muhahaha");&lt;/script&gt; 

所以,如果你這個數據以後打印成HTML,您將得到保護。它不會保護你:

"; alert("Muhahaha"); 

以防萬一你是呼應到像這樣的腳本:

var t = "Hello there <?php echo $str;?>"; 

爲此,你應該使用addslashes()和數據庫的字符串轉義方法類似mysql_real_escape_string()

+0

謝謝你的例子。他們非常有幫助。 – racl101 2010-04-21 20:41:24

0

是的,這是消毒的方法之一。它的好處是您可以始終顯示數據庫內容而不用擔心xss攻擊。然而,「更純粹」的方法是將原始數據存儲在數據庫中,並在視圖中進行清理 - 所以每次要顯示文本時,都使用htmlentities()。

但是,您的方法沒有考慮到sql注入攻擊。你可能想看看http://php.net/manual/en/function.mysql-real-escape-string.php來防範。

0

是的,當你想要顯示數據到網頁時這樣做,但我建議你不要將HTML存儲在數據庫中作爲編碼,這對大文本字段可能看起來不錯,但是當你的標題較短時,例如一個32個字符,一個包含&的普通30個字符的字符串將變爲&,這會導致SQL錯誤或數據被切斷。

所以,經驗法則是,存儲所有行(顯然防止SQL注入)並將所有事件視爲受感染,無論它來自何處:數據庫,用戶表單,rss提要,平面文件,XML等。是如何建立良好的安全性,而不必擔心數據溢出,或者您可能需要將數據提取到非HTML用戶的HTML編碼問題。

相關問題