首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >只使用str_replace的Sql注入保护

只使用str_replace的Sql注入保护
EN

Stack Overflow用户
提问于 2015-09-09 10:46:24
回答 1查看 2.4K关注 0票数 2

我正在研究SQL注入,并在PHP代码中尝试了这个查询:

代码语言:javascript
运行
复制
$condition = str_replace(["'","\\"],["\\'","\\\\"], @$_GET['q']);
$query = "SELECT * FROM dummy_table WHERE dummy_column = '$condition'";

DB和表字符集设置为UTF8。

我不能注射任何东西,有人能帮我吗?

编辑:正如GarethD所指出的,这将首先“和超过”,允许注入,那么这个str_replace呢?

代码语言:javascript
运行
复制
$condition = str_replace(["\\","'"],["\\\\","\\'"], @$_GET['q']);
EN

回答 1

Stack Overflow用户

发布于 2015-09-09 10:54:25

这个孤立的例子是无法注入的。

但是您必须认识到,对sql 的保护不仅仅是一个替换的字符。情况可能与你目前认为是理所当然的情况不同。因此,由于这种方法的主要缺点,您的代码在长期运行时会变得易受攻击。

  • 字符替换仅是必需格式的部件
  • 这种特殊的替换只适用于字符串,而其他部分则完全不受保护。
  • 这样的替换是查询执行之外的,意味着它很容易出现任何类型的人为错误。
  • 这样的替换是一种本质上是可拆卸的措施,意味着它可能被移到离实际查询执行太远的地方,并最终被遗忘。
  • 这种转义很容易导致编码攻击,使得解决方案在使用上过于有限。

字符替换本身没有什么问题,但前提是它被用作完全格式化的一部分;应用到正确的查询部分;并由数据库驱动程序(而不是程序员)完成;就在执行之前。

您在注释中提出的函数是一个很好的步骤,但仍然不够,是上面列出的缺点的主题,使它们容易出现各种人为错误。

SQL注入不是这种方法的唯一问题,它也是一个可用性错误,因为如果将该函数用作晚期魔术引号的化身,则该函数会损坏您的数据,或者如果用于格式化应用程序代码中的每个变量,则会导致代码膨胀。

这些函数只能用于处理占位符,当然不是通过使用自制的替换函数,而是使用由数据库API提供的适当函数。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32477442

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档