2013-04-09 74 views
0

我將此代碼添加到我的網站有文字消毒:文本消毒問題

var re = /(<([^>]+)>)/gi; 
     for (i=0; i < arguments.length; i++){ 
     arguments[i].value=arguments[i].value.replace(re, ""); 
     } 

但不知何故,人們能夠使用的標籤,仍然能夠通過文本區我的網站上張貼的照片。請讓我知道如果我的代碼錯誤。

PS:用戶也在逃避標籤。

+6

他們可能可以繞過JavaScript端..你還需要消毒在服務器端 – 2013-04-09 05:45:37

+1

還與'i'小心變量,它泄漏。 – elclanrs 2013-04-09 05:47:07

+0

你是什麼意思?老實說,當我看着用戶通過mysql數據庫輸入的輸入時,我只看到了html標籤。 – Karthik 2013-04-09 05:47:39

回答

0

永遠不要相信輸入數據。 用戶可以簡單地使用curl或其他東西,併發送HTTP POST請求與他想要的任何數據在他的身體,你的服務器。 因此有一條規則在將其保存到數據庫之前驗證服務器端上的所有數據。

儘管可以引入客戶端驗證以改善用戶體驗,但無論如何,您必須在收到請求時驗證服務器端的輸入。


更新:

我看到你php標籤標記你的問題,因此,如果你的服務器端應用程序是用PHP編寫的,你可以使用一個HTML Purifier淨化輸入數據,並避免XSS等 另外,如果你使用一些PHP框架,它可能有一個自己的HTML淨化器包裝。例如Yii框架有它。

0

也許沒有錯,用戶只需在提交前禁用javascript。

在服務器端 檢查像

$_POST['name'] = preg_replace('/<[^>]*>/', '', $_POST['name']); 

OR

$_POST['name'] = strip_tags($_POST['name']);