Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php mysql\u real\u escape\u字符串是否可以单独防止各种sql注入?_Php_Mysql_Sql_Sql Injection - Fatal编程技术网

Php mysql\u real\u escape\u字符串是否可以单独防止各种sql注入?

Php mysql\u real\u escape\u字符串是否可以单独防止各种sql注入?,php,mysql,sql,sql-injection,Php,Mysql,Sql,Sql Injection,可能重复: 我没有看到任何有价值的或过时的信息。 所以,这里有一个问题:它是非常过时的(从'09年开始),所以在'12年的PHP5.3和mysql 5.5中,它是否完全保护了它 是的。通过使用本机mysql转义函数正确转义字符串,不可能“中断”并执行查询 然而,更好的办法是使用事先准备好的声明。这将做很多事情。通过使用准备好的语句,您可以利用来自数据库的更多优化,它将正确地转义传入的任何数据。看看:我已经很久没有读过关于这个的博客了,所以它可能不再适用,但是 这些帖子指出,如果字符串中有uni

可能重复:

我没有看到任何有价值的或过时的信息。
所以,这里有一个问题:它是非常过时的(从'09年开始),所以在'12年的PHP5.3和mysql 5.5中,它是否完全保护了它

是的。通过使用本机mysql转义函数正确转义字符串,不可能“中断”并执行查询


然而,更好的办法是使用事先准备好的声明。这将做很多事情。通过使用准备好的语句,您可以利用来自数据库的更多优化,它将正确地转义传入的任何数据。看看:

我已经很久没有读过关于这个的博客了,所以它可能不再适用,但是

这些帖子指出,如果字符串中有unicode编码的字符,那么真正的转义字符串将丢失这些字符,但mysql引擎将对其进行评估,这暗示了这样一种想法,即您确实仍然可以接受位置良好的注入


我记不起那篇博文了,但还是在同一个球场上。

mysql\u real\u escape\u只有字符串可以防止什么都没有。

此外,此功能与注射完全无关。

无论何时需要转义,都需要转义,尽管存在“安全性”,但仅仅因为SQL语法需要转义。而在不需要转义的地方,转义对您毫无帮助

此函数的用法很简单:当必须在查询中使用带引号的字符串时,必须转义它的内容。不是因为一些想象中的“恶意用户”,而是为了逃避这些用于分隔字符串的引号。这是一条非常简单的规则,但PHP人员却大错特错

这只是与语法相关的函数,与安全性无关

根据安全事项中的此功能,相信它将“保护您的数据库免受恶意用户的攻击”将导致您进行注入

你可以自己得出的结论:
不,此功能不够


事先准备好的陈述也不是灵丹妙药。它只在一半可能的情况下保护你的背部。有关详细信息,请参见

请通过PDO或mysqli扩展将自己升级到已准备好的语句
mysql*
是一种永远不应该使用的恐龙。如果这么多“教程”网站不顽固地继续使用它,PHP开发团队早就不赞成它了。每天都有新的反向实践爱好者出现,因为他们不知道有什么更好的,毕竟,“教程说我可以这样做。”准备好的语句是防止SQL注入的正确方法。来源:谢谢@rdlowrey,我的脑袋在想“每个人都在使用mysql,这会有多糟糕!?”显然,你说得对。我对mysqli做了一些研究,似乎我根本不需要使用“mysql\u real\u escape\u string”。而且,sql注入是不可能的,我插入的所有内容都是真实的文本,而不必担心任何事情。我只是想确认一下,这是真的吗?@w8ph
mysqli
有一个等价的方法:。问题是,我评论的重点是,你应该使用预先准备好的语句,这否定了不需要手动转义就可以进行注射的可能性。更多信息,请查看文档。