addslashes(stripslashes($field))保证SQL注入不受攻击吗?


does addslashes(stripslashes($field)) guarantee sql injection invulnerability?

减去整个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中还有内置的清理函数