【发布时间】:2016-04-06 08:36:46
【问题描述】:
我正在制作一个注册表单,其中一些输入进入数据库,而另一些则没有。我的页面使用 utf8。对于不进入数据库的数据,我使用这个函数(一种 htmlspecialchars):
$c = array("'", '"', "/", "<", ">", "$", "%");
$s = str_replace($c, "", $s);
对于数据库,我将使用 mysqli_real_escape_string。 从安全的角度来看2个问题,假设我想允许符号和unicode(utf8)。
1-对于不进入db的数据,上面的功能是否足够?
2- 对于数据库中的数据,是否足够 mysqli_real_escape_string 或者我也应该使用上面的函数?还是别的什么?
谢谢。
Update1在回答后更新。
$c = array("'", '"', "/", "\\", "<", ">", "$", "%", "&");
$s = str_replace($c, "", $s);
更新2 因此,要插入数据库,我应该使用 realescapestring 或准备。然后在每个输出处转义,这取决于平台/语言。
2 注释:
这样一来,我必须多次逃脱,而不是一次,但也有一些好处......
Php 对小黑客的攻击似乎相当强大,看起来它会自动转义一些字符......
【问题讨论】:
-
跳过这个并使用准备好的语句。