我正在研究SQL注入,并在PHP代码中尝试了这个查询:
$condition = str_replace(["'","\\"],["\\'","\\\\"], @$_GET['q']);
$query = "SELECT * FROM dummy_table WHERE dummy_column = '$condition'";
DB和表字符集设置为UTF8。
我不能注射任何东西,有人能帮我吗?
编辑:正如GarethD所指出的,这将首先“和超过”,允许注入,那么这个str_replace呢?
$condition = str_replace(["\\","'"],["\\\\","\\'"], @$_GET['q']);
发布于 2015-09-09 10:54:25
这个孤立的例子是无法注入的。
但是您必须认识到,对sql 的保护不仅仅是一个替换的字符。情况可能与你目前认为是理所当然的情况不同。因此,由于这种方法的主要缺点,您的代码在长期运行时会变得易受攻击。
字符替换本身没有什么问题,但前提是它被用作完全格式化的一部分;应用到正确的查询部分;并由数据库驱动程序(而不是程序员)完成;就在执行之前。
您在注释中提出的函数是一个很好的步骤,但仍然不够,是上面列出的缺点的主题,使它们容易出现各种人为错误。
SQL注入不是这种方法的唯一问题,它也是一个可用性错误,因为如果将该函数用作晚期魔术引号的化身,则该函数会损坏您的数据,或者如果用于格式化应用程序代码中的每个变量,则会导致代码膨胀。
这些函数只能用于处理占位符,当然不是通过使用自制的替换函数,而是使用由数据库API提供的适当函数。
https://stackoverflow.com/questions/32477442
复制相似问题