2015-03-31 41 views
1

如果在PHP代码的开头恰当地使用了“Html-Entity Encoded”,那么在表单字段中单独使用这种字符组合是否可用于XSS或SQL攻击?Html-Entity编码为空的HTML标记

<>

这是一个非常简单的程序,显示早在文本字段的值,当我们提交表单:

<?php 

    foreach ($_POST as &$_HTTP_FIELD) { 
    $_HTTP_FIELD = htmlentities($_HTTP_FIELD,ENT_QUOTES,'ISO-8859-1'); 
    } 
    foreach ($_GET as &$_HTTP_FIELD) { 
    $_HTTP_FIELD = htmlentities($_HTTP_FIELD,ENT_QUOTES,'ISO-8859-1'); 
    } 

?> 

<html><body> 
    <form action="/index2.php" name="abcd" method="post"> 
    <input type="text" name="texte" value="<? echo $_POST['texte'];?>"> 
    <input type="submit" name="Soumission" value="Submit"> 
    </form> 
</body></html> 

我敢肯定,这不遵循最佳编码实践,但其本身,如果echo-ed变量位于“值”字段中,则此代码似乎不具有风险。

但是,当我们在文本字段中尝试“<>”时,虚拟主机防火墙将通过发送403错误来阻止请求。

为了清晰起见,我没有在这里指定文档编码,但实际上文档是在ISO-8859-1中生成的。所以它匹配htmlentities函数。

+0

没有太多的信息,但现在让我们说,我的虚拟主机不会让我的PHP代码尝试自行清理POST数据。即使我在所有POST变量中循环并删除它们,也会引发错误403。 – 2015-03-31 22:19:37

+0

我们可以看到你的php代码吗? – bigben3333 2015-03-31 22:39:02

+0

查看编辑的问题。 – 2015-03-31 23:00:37

回答

0

<>可能无法正常工作,但

" onmouseover="alert(1) 

可能会因为这成功被渲染为

<input type="text" name="texte" value="" onmouseover="alert(1)"> 
+0

正如我最初的问题所述,我的意图是将输入转换为html实体,因此您建议中的双引号将呈现为“"”,因此完全无害。但无论如何,如果我“忘记”转换为html实体,那么“<>”不会像你所说的那样做任何有害的事情。所以我认为你的回答令人满意。这证明我的网站托管人高估了“<>”的风险。 – 2015-04-05 05:16:04