减去整个addslashes() vs mysqli_real_escape_string()参数将剥离然后添加斜杠保证sql注入不可侵犯性?这是否会以任何方式改变数据,例如在从数据库中获取字符串后显示双斜杠?
所以你要做的是
$input='bla" SELECT * FROM blabla"';
$escaped=stripslashes(addslashes($input));
在这种情况下
$input==$escaped is true
所以不,这可能什么也做不了这就是为什么你应该选择mysql_real_escape_string
转义字符(addslashes()
) 可以保护您免受SQL注入。我不是如何清理输入的专家,原因如下:
我跳过了整个"消毒"的过程,直接进入了预处理语句。消毒/转义意味着您必须在输出端执行相反的操作,这意味着每次都要付出双倍的努力,并且在的某个地方出错的机会增加了一倍-允许错误的输入。如果您只是在每次数据库查询和数据库本身之间放置PDO,那么您的担忧就结束了。
当然,这并不是说PDO可以保护您免受CSRF或XSS等攻击,但实际存储的值是sql注入安全的,并且您可以在存储之前剥离html或任何您需要做的事情,以防止此类攻击。
NO用途:mysql_real_escape_string。
为什么:你没有考虑大量的问题,主要是字符串的编码,等等…
不,使用适量的斜杠有助于解决某些漏洞,但您仍然需要检查用户输入。不能保证sql注入不受攻击。
addslashes()将在大多数情况下保护您。至于获取输出,这取决于您如何提交它,如果您这样做
$input = addslashes("Bob's shoes")
你会得到鲍勃的鞋子。
当你把这个放到数据库中时
insert into tbl (txt) values (Bob''s shoes)
输出select txt from tbl
如您所愿将是Bob的鞋子,斜杠在insert时被sql删除。
如果你的肛门你可以说添加其他预防措施,但如果你想要一个快速和简单的事情,而不是一个荒谬的安全网站,它应该是好的。PHP中还有内置的清理函数