在联系表单中,如果有人在文本框中输入以下内容:
<?php echo 'hi'; ?>
我看到服务器因为错误而不会执行它。我想要它做的是,以某种方式将其转换为纯文本并正确显示它。我见过其他网站能够做到这一点。我原本以为这可以通过addslashes()函数来解决,但这似乎不起作用。
谢谢, 菲尔
答案 0 :(得分:4)
没有。请改用htmlspecialchars
。请勿使用addslashes
。
更具体地说,addslashes
直接转义了'
,"
和\
以及NUL
的所有实例。它旨在防止SQL injection,但它没有真正用于适当的安全措施。
你想要的是阻止浏览器按原样解释标签(这与防止SQL注入完全不同)。例如,如果我想谈论<script>
元素,那么SO不应该简单地发送字符串,导致启动实际脚本(可能导致Cross-site scripting),但是某些字符,尤其是{ {1}}和<
需要编码作为HTML实体,因此它们显示为作为尖括号({{1}也是如此},否则将被解释为HTML实体的开头。)
在您的情况下,>
之后的输出如下:
&
答案 1 :(得分:2)
在输出用户提供的任何内容之前使用htmlspecialchars。但在这种情况下,还要确保不执行用户输入的任何内容。不要使用eval,include或require。如果将用户数据保存到文件,请使用readfile或file_get_contents + htmlspecialchars而不是include / require。如果您正在使用eval,请将其更改为echo等等。