mysqli_real_escape_string怎能不来防止SQL注入? [重复](How c

2019-09-01 14:16发布

这个问题已经在这里有一个答案:

  • SQL注入,围绕mysql_real_escape_string得到() 4个回答

首先,我得到人们想要让他们重复使用查询,并有逃跑的照顾到使用存储过程。 不过,我看过很多开发商说mysqli_real_escape_string不能100%防止SQL注入。 可有人请提供这方面的一个例子吗?

从我关于这个问题的知识有限,我要说的是, mysqli_real_escape_string永远是罚款字符串而是数值你可能会被抓出来,除非你核对一下电话号码是一个整数,浮点,双等。

编辑:我忘了补充一点至关重要:假设字符集是UTF8和mysqli_set_charset已经相应地调用。 我见过的唯一依靠注射字符集(其中没有一个是UTF8)的屈指可数。

Answer 1:

只要您使用mysqli_set_charset()设置客户端编码,并mysqli_real_escape_string()用于格式字符串只 ,这是完全安全的。

但是,如果使用此功能直接在应用程序代码,而不是幕后的基于占位查询的处理或PDO的形式至少你的问题暗示的quote()式的函数(不逃逸,并在一次报价)它是直的方式注入。

它不是功能本身是一个问题,但它的使用方式:

  • 因为它仅要求格式的一部分 ,人们可以很容易忘记另一部分和陷入困境
  • 甚至它可以很容易被滥用,格式化并不是一个字符串,但另一个字面这将不逃逸的所有好处。
  • 第二,当它的使用权在应用程序代码,它的使用变得不一致或偶然的,因为没有办法强迫开发者正确地格式化每个文字和没有失败。 这又可能导致不准确和注射。

这就是为什么你必须始终使用占位符在查询中表示数据(而mysqli_real_escape_string可用于处理此占位符没事)



文章来源: How can mysqli_real_escape_string fail to prevent a SQL injection? [duplicate]
标签: php mysql mysqli