2011-07-31 77 views
1

我已經搜索到處知道如何防止html injection.i也提出了兩個問題,在這個網站。但我沒有得到一個令人信服的答案。下面,我給我的腳本,我做了爲了防止mysql,在我的html表單中注入html。幫助需要防止html注入

 //sql injection prevention 
     $name =mysql_real_escape_string($_POST['name']); 
    $login = mysql_real_escape_string($_POST['login']); 
    $user = mysql_real_escape_string($_POST['user']); 

//striping tags 
    $user =strip_tags($user); 
    $login = strip_tags($login); 
    $name =strip_tags($name); 

在此之後我試圖用我的數據庫使用下面的腳本,並把它的名字,登錄,用戶的形式在我的HTML和保存它來檢查我的腳本是如何工作的

<script> 
document.location = "http://badurl"; 
</script> 

但是當我將上面的腳本保存在數據庫中,並試圖檢索它以顯示在頁面中時,它轉到了badurl site.i認爲strip_tags不工作,我想知道爲什麼。並且可以請你告訴我,我們怎樣才能把用htmlspecialchars在while循環(如下面的腳本)

while ($row = mysql_fetch_array($query)) { 
    echo('<big><big><big style="color: rgb(158, 0, 0);">' . $row['name'] . '&nbsp;&nbsp;</big></big></big><p>'); 
    echo('<big><div style="text-align: justify;">' . $row['login'] . '&nbsp;&nbsp;</big> </div>'); 

    echo('<div style="text-align: justify;">' . $row['user'] . '&nbsp;&nbsp;</div>'); 
+2

在將數據放入數據庫之前,不需要調用'strip_tags'或除'mysql_real_escape_string'之外的任何其他內容。不要破壞數據,因爲如果你做錯了,你永遠無法取回數據。 *當您將其顯示在HTML網頁*中時,您可以使用'htmlspecialchars',如下面Dog窩的答案中所述。 –

+0

謝謝grossman的回覆 – test

回答

5

打印它們之前,您應該使用的字段htmlspecialchars

while ($row = mysql_fetch_array($query)) { 
    echo('<big><big><big style="color: rgb(158, 0, 0);">' . htmlspecialchars($row['name']) . '&nbsp;&nbsp;</big></big></big><p>'); 
    echo('<big><div style="text-align: justify;">' . htmlspecialchars($row['login']) . '&nbsp;&nbsp;</big> </div>'); 

    echo('<div style="text-align: justify;">' . htmlspecialchars($row['user']) . '&nbsp;&nbsp;</div>'); 

參見:http://php.net/manual/en/function.htmlentities.php

+4

爲什麼不'htmlspecialchars'? – Gumbo

+2

是的..在UTF8天'htmlspecialchars'是要走的路。沒有必要使用實體變音器等 – ThiefMaster

+0

@Gumbo,謝謝,不知道它。更新。 – Dogbert

0

如果要將所有標籤全部刪除,請使用strip_tags。

如果您想對標籤進行編碼,請使用htmlspecialchars或htmlentities。

如果您想要選擇性地刪除可能導致注入但允許其他標籤的標籤,那麼您可能需要考慮使用domdocument實現解決方案。