2010-11-17 64 views
0

我有一個表單,並且現在,您可以鍵入任何JavaScript等等。任何XSS等。從Javascript保護HTML表單/攻擊

我該如何着手創建白名單,以便您只能發佈字符。

在某一點上,我想任何與http://開始轉換爲

<a href="http://..."></a>

感謝

是這有效嗎? http://htmlpurifier.org/

+4

你知道你不能使用客戶端代碼進行數據驗證 - 你的用戶可以關閉JS。所以,除非你運行服務器端JavaScript,否則你將不得不在服務器端使用另一種語言檢查腳本標記/壞字符的存在...... – tobyodavies 2010-11-17 08:17:02

+0

謝謝,我現在意識到了。你能推薦任何預先構建的解決方案嗎? – switz 2010-11-17 08:33:53

+0

你使用的服務器端腳本是什麼?它是PHP,.net。 perl,... – sathish 2010-11-17 08:36:24

回答

7

的jQuery或JavaScript是首選

哦,不,你不能這樣做,你看到了什麼?因爲即使你「消毒」使用JavaScript您的數據,沒有人的距離

  • 停止任何人關閉JavaScript的
  • 使用瀏覽器的開發者控制檯亂用數據
  • 直接做POST,沒有瀏覽器

換句話說,您必須在服務器端執行驗證/清理。 Javascript驗證可以提高用戶的體驗(例如,通過提供對無效輸入的即時反饋)。

+0

我明白了。那麼,你推薦使用什麼呢?謝謝 – switz 2010-11-17 08:25:03

+0

??? @Switz,shylent提出了一些建議:'(...)你必須在服務器端執行驗證/消毒。「# – acm 2010-11-17 09:49:19

1

但是,在許多高負載應用程序開發人員使用部分客戶端驗證(但所有輸入必須準備寫入數據庫)。因爲你將使用PHP,我建議你用htmlspecialchars(),mysql_real_escape_string()等解析你的$ _POST值。您必須使用正則表達式將任何以「http://」開頭的內容轉換爲鏈接(也可以使用explode('。',$ _POST ['yourInput']),這可以更容易爲你)。

+0

非常有用的謝謝:)更新你的文章:mysql_real_escape_string在PHP 5.5.0中被棄用,它在PHP 7.0.0中被刪除。資料來源:http://php.net/manual/en/function.mysql-real-escape-string.php – 2017-01-18 06:36:40