源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

MySQL解决SQL注入的另类方法详解

  • 时间:2020-06-20 18:44 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:MySQL解决SQL注入的另类方法详解
本文实例讲述了MySQL解决SQL注入的另类方法。分享给大家供大家参考,具体如下: [b]问题解读[/b] 我觉得,这个问题每年带来的成本可以高达数十亿美元了。本文就来谈谈,假定我们有如下 SQL 模板语句:
select * from T where f1 = '{value1}' and f2 = {value2}

现在我们需要根据用户输入值填充该语句:
value1=hello
value2=5

我们得到了下面的 SQL 语句,我们再提交给数据库:
select * from T where f1='hello' and f2=5

问题在于,攻击者可以构造如下的用户输入值:
value1=anything' or 1=1 or f1='whatever
value2=5

拼接好的最终语句就变成了:
select * from T where f1='anything' or 1=1 or f1='whatever' and f2=5

攻击者成功地改变了模板语句的语义。这种问题不单单发生在 SQL 上,还出现在通常使用模板的任何语言上,比如 HTML 和 shell 脚本。 [b]常规解决方案的说明[/b] SQL 是具备任意性和一致性的公理,token 和派生规则构成其公理化基础。要注意的一个词语是「任意性」。与 SQL 等价的公理化数不胜数。对于这种任意等价的表示,每一条合法的语句都能被准确地映射到 SQL 里的合法语句,其它语言亦然。在这种任意等价表示中,如果某语句是不合法的,那么它在 SQL 里也是不合法的。攻击者不可能构造出可以满足任何可能的、任意与 SQL 等价的规则。 策略1:根据不同的派生规则,用另一种语法扩展模板语句 例子1:前缀语言 SQL 使用中缀表示法注1。中缀表示法等价于 lisp 风格的前缀表示法注2。中缀与前缀:
a OP1 b OP2 c <=> (OP1 a (OP2 b c))

a、b、c 是标识符或值,OP1、OP2 是操作符或功能。 前缀表示法的示例语句:
(select * T (and (= f1 '{value1}') (= f2 {value2})))

该语句是等价的。它们在语义上属于外延。自动把 SQL 的中缀表示法转换成前缀表示法或其它表示法,都不算问题了。然而,攻击者的注入在前缀语法方面就是不合法的:
[url=http://www.1sucai.cn/Special/594.htm]MySQL日志操作技巧大全[/url]》、《[url=http://www.1sucai.cn/Special/441.htm]MySQL事务操作技巧汇总[/url]》、《[url=http://www.1sucai.cn/Special/563.htm]MySQL存储过程技巧大全[/url]》、《[url=http://www.1sucai.cn/Special/568.htm]MySQL数据库锁相关技巧汇总[/url]》及《[url=http://www.1sucai.cn/Special/606.htm]MySQL常用函数大汇总[/url]》 希望本文所述对大家MySQL数据库计有所帮助。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部