防止表单中的php注入(如果用户将php代码提交到表单中)

时间:2011-05-02 13:55:59

标签: php security code-injection

在联系表单中,如果有人在文本框中输入以下内容:

<?php echo 'hi'; ?>

我看到服务器因为错误而不会执行它。我想要它做的是,以某种方式将其转换为纯文本并正确显示它。我见过其他网站能够做到这一点。我原本以为这可以通过addslashes()函数来解决,但这似乎不起作用。

谢谢, 菲尔

2 个答案:

答案 0 :(得分:4)

没有。请改用htmlspecialchars。请勿使用addslashes

更具体地说,addslashes直接转义了'"\以及NUL的所有实例。它旨在防止SQL injection,但它没有真正用于适当的安全措施。

你想要的是阻止浏览器按原样解释标签(这与防止SQL注入完全不同)。例如,如果我想谈论<script>元素,那么SO不应该简单地发送字符串,导致启动实际脚本(可能导致Cross-site scripting),但是某些字符,尤其是{ {1}}和<需要编码作为HTML实体,因此它们显示为作为尖括号({{1}也是如此},否则将被解释为HTML实体的开头。)

在您的情况下,>之后的输出如下:

&

答案 1 :(得分:2)

在输出用户提供的任何内容之前使用htmlspecialchars。但在这种情况下,还要确保执行用户输入的任何内容。不要使用eval,include或require。如果将用户数据保存到文件,请使用readfilefile_get_contents + htmlspecialchars而不是include / require。如果您正在使用eval,请将其更改为echo等等。