2011-07-31 47 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实现解决方案。