我一直在为某个脚本而苦恼,它是PHP中使用的3个函数的函数组合,用于从特殊字符、空格和斜杠/反斜杠中"清除"或"清除"表单中的输入。
问题是,它似乎不起作用,这真的很奇怪,因为我查看了关于它、W3schools和堆栈溢出的PHP官方页面,但没有找到它可能不起作用的答案,因为我THINK我有合适的函数格式。
但我可能错了,我毕竟是一个知识不多的年轻学生。
这是我谈到的功能:
<?php
$data = clean_data('d/ in' g<script>e %&*$^s #% ');
function clean_data($data) {
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
echo $data;
?>
第二行的'
符号中的随机内容是输入(当我将其与表单一起使用时,结果相同(,它是为了测试,当然,在现实中,会有$_POST
函数,从表单中获取数据,并将其放入另一个变量中(与$data
不同(。
如果有人能给我指明正确的方向,我将不胜感激:(
编辑:说到一些非常有用的评论,我了解了我的脚本中的某些函数的真正作用,在gettig指出该脚本在某种程度上适用于除我之外的所有人之后,我感到困惑,所以如果其他人有建议,如果有更好的方法来"预防",或者通过在我的PHP脚本中实现安全性(例如,清除实体(来至少减少XSS攻击,将通知
如果你要付出这么多努力。。。你做错了。
以下是一些必须小心处理用户输入的上下文,以及正确的处理方法:
-
HTML。发送到浏览器的用户输入的任何内容都被所述浏览器解释为HTML。因此,必须小心防止用户注入自己选择的代码。幸运的是,它很简单。
htmlspecialchars
将转义所有必要的字符,以确保用户键入的内容就是他们返回的内容1 -
JavaScript。有时,您可能需要将一个变量从PHP拖放到JavaScript中。无论它是否包含用户输入,您都必须小心生成有效的JavaScript。幸运的是,
json_encode
实际上就是为此而设计的。给它一个变量,它就会以JavaScript完全理解的方式输出它。字符串将添加引号,其中的字符将进行适当的转义。 -
MySQL。也许是争论最多的,但也是最容易纠正的!如果(并且onlyIf(您一直在维护古老的代码,您可以使用
mysql_real_escape_string
来净化您的输入并防止SQL注入,但实际上您应该使用PDO的准备语句功能。就像上面的json_encode
一样,准备好的语句只需要一个变量,就可以为您完成所有的艰苦工作! -
PHP。只是不要将
eval
与用户输入一起使用。曾经可以 -
重击/外壳。很少将
shell_exec
和相关函数与用户输入一起使用,但为了以防万一,请确保始终将参数包装在escapeshellarg
中。这再次处理字符串的自动引用和危险字符的转义。
总的来说,有一些内置的、简单的方法可以根据你所处的环境来做事。没有包罗万象的解决方案,因为环境因其不同的规则而不同。限制用户可以输入的内容是不好的,尤其是当以安全的方式允许任意输入非常容易的时候。
1:空格仍然会被折叠,就像在源代码中键入几个空格一样。这可以根据需要保留,也可以使用CSS white-space: pre-wrap;
进行修复。还可以考虑word-wrap: break-word;
,以确保人们不会输入愚蠢的长词来破坏你的布局