所以我有一個表單接受來自用戶的一些輸入,可能以後在頁面上表示。清理公衆意見的最佳方式是什麼?
從安全的角度來看,我想這樣做的方式是接受輸入,將mysql_real_escape_string()函數應用於所有輸入,然後使用預準備語句插入。
檢索數據時,我會先在屏幕上顯示htmlspecialchars()。
這會好嗎?我是否忽略了重要的事情?
所以我有一個表單接受來自用戶的一些輸入,可能以後在頁面上表示。清理公衆意見的最佳方式是什麼?
從安全的角度來看,我想這樣做的方式是接受輸入,將mysql_real_escape_string()函數應用於所有輸入,然後使用預準備語句插入。
檢索數據時,我會先在屏幕上顯示htmlspecialchars()。
這會好嗎?我是否忽略了重要的事情?
兩件事情:
mysql_real_escape_string
是正確的工具,如果你不使用準備好的語句所以,你對我的輸出HTML似乎沒問題;但是您對輸出到數據庫的操作要做得多。作爲一個旁註:如果你想允許你的用戶使用HTML,你可以使用像HTMLPurifier這樣的工具 - 它允許你指定允許或不允許哪些標籤/屬性。
您指出的方法是正確的,因此必須使用。是的,你錯過了XSS Filtering。檢查這個網站的XSS攻擊的例子:
所以,你最好找一個防禦系統這種類型的黑客,像一個正則表達式的字符串。下面是一些教程:
http://www.chipmunkninja.com/[email protected] http://shiflett.org/blog/2007/mar/allowing-html-and-preventing-xss
只是爲了澄清:你應該要麼mysql_real_escape_string(),或使用準備好的語句。如果您同時執行這兩個操作,則字符串將被雙重轉義,並且在發送給客戶端之前必須進行預處理。 – longneck 2009-09-10 16:31:45
@longneck:我已經編輯過堅持你說的話;謝謝 :-) – 2009-09-10 16:35:35