2009-09-10 75 views
3

所以我有一個表單接受來自用戶的一些輸入,可能以後在頁面上表示。清理公衆意見的最佳方式是什麼?

從安全的角度來看,我想這樣做的方式是接受輸入,將mysql_real_escape_string()函數應用於所有輸入,然後使用預準備語句插入。

檢索數據時,我會先在屏幕上顯示htmlspecialchars()。

這會好嗎?我是否忽略了重要的事情?

回答

4

兩件事情:

  • 您必須將其發送到數據庫之前,逃避所有的輸入;爲:
    • mysql_real_escape_string是正確的工具,如果你不使用準備好的語句
    • 如果你正在使用預處理語句,你並不需要自己逃脫,它會自動完成。
    • 但是你不能這樣做:正如@longneck在他的評論中澄清的那樣,如果你正在逃避自己,並且使用準備好的語句,它們也會轉義,你的字符串會被轉義兩次 - 而你不想這樣做。
  • 然後,你必須逃避所有輸出;如果你的輸出格式是HTML,htmlspecialchars或htmlentities都可以。

所以,你對我的輸出HTML似乎沒問題;但是您對輸出到數據庫的操作要做得多。作爲一個旁註:如果你想允許你的用戶使用HTML,你可以使用像HTMLPurifier這樣的工具 - 它允許你指定允許或不允許哪些標籤/屬性。

+0

只是爲了澄清:你應該要麼mysql_real_escape_string(),或使用準備好的語句。如果您同時執行這兩個操作,則字符串將被雙重轉義,並且在發送給客戶端之前必須進行預處理。 – longneck 2009-09-10 16:31:45

+0

@longneck:我已經編輯過堅持你說的話;謝謝 :-) – 2009-09-10 16:35:35

相關問題