Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
防止表单中的php注入(如果用户将php代码提交到表单中)_Php_Security_Code Injection - Fatal编程技术网

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

防止表单中的php注入(如果用户将php代码提交到表单中),php,security,code-injection,Php,Security,Code Injection,在联系人表单中,如果有人在文本框中输入以下内容: <?php echo 'hi'; ?> 我看到服务器将不会执行它,因为有一个错误。我希望它做的是,以某种方式将其转义为纯文本并正确显示。我见过其他网站也能做到这一点。我原本以为这可以通过addslashes()函数解决,但这似乎不起作用 谢谢, 菲尔不,改用。不要使用 更具体地说,addslashes直接转义了'、“和\和NUL的所有实例。它旨在防止,但在适当的安全措施中没有实际用途 您想要的是阻止浏览器按原样解释标记(这与阻止

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

<?php echo 'hi'; ?>

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

谢谢, 菲尔

不,改用。不要使用

更具体地说,
addslashes
直接转义了
'
\
NUL
的所有实例。它旨在防止,但在适当的安全措施中没有实际用途

您想要的是阻止浏览器按原样解释标记(这与阻止SQL注入完全不同)。例如,如果我想谈论
元素,那么不应该简单地按字面发送该字符串,导致启动实际脚本(这可能导致),但有些字符,特别是
,需要编码为HTML实体,因此它们显示为尖括号(对于
&
,情况也是如此,否则将被解释为HTML实体的开头)

在您的情况下,
htmlspecialchars
之后的输出如下所示:

&lt;?php echo 'hi'; ?&gt;
不,改用,不要用

更具体地说,
addslashes
直接转义
'
\
NUL
的所有实例。它的本意是预防,但在适当的安全措施中没有实际用途

您想要的是阻止浏览器按原样解释标记(这与阻止SQL注入完全不同)。例如,如果我想谈论
元素,那么不应该简单地发送字符串,导致启动实际脚本(这可能导致),但是一些字符,特别是
,需要编码为HTML实体,以便它们显示为尖括号(对于
也是如此,否则将被解释为HTML实体的开始)

在您的情况下,
htmlspecialchars
之后的输出如下所示:

&lt;?php echo 'hi'; ?&gt;

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

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

“我看到服务器由于错误而不会执行它。”哪个错误?您没有尝试
eval
用户输入,是吗?“我看到服务器由于错误而不会执行它。”哪一个错误?你没有尝试
评估用户输入,是吗?我现在正在使用htmlentities?这也不好吗?如果是,这似乎不好work@user:不,它已弃用,在正常情况下不需要,只会增加额外的带宽。您可以使用
htmlspecialchars
@Macel
htmlspecialchars()
不推荐使用?我不知道是这样的;事实上,
htmlspecialchars()
编码的字符数比
htmlspecialchars()
编码的字符数要多(请参见本章底部的注释)@Phoenix:是的,我知道,但这不是必需的。只要使用正确的编码,你就会没事。需要编码的字符只有
&
。我现在使用的是htmlentities?这也不好吗?如果是的话,这似乎不好work@user:否,它已弃用,在正常情况下不需要,只会增加额外的带宽。您可以使用
htmlspecialchars
@Macel
htmlspecialchars()
安全地
echo
包含标签和代码的变量到HTML页面不推荐使用?我不知道是这样的情况;事实上,
htmlspecialchars()
编码的字符数大于
htmlspecialchars()
(请看下面的注释)。@Phoenix:是的,我知道,但这不是必需的。只要使用正确的编码,您就可以了。需要编码的字符只有
&