科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道[Sql server]应用程序中的高级SQL注入(12)

[Sql server]应用程序中的高级SQL注入(12)

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

SQL是一种用于关系数据库的结构化查询语言。它分为许多种,但大多数都松散地基于美国国家标准化组织最新的标准SQL-92。

作者:aspcool 来源:aspcool 2007年9月15日

关键字: 注入 SQL Server SQL Server 各版本 数据库

  • 评论
  • 分享微博
  • 分享邮件
防范]

这部分讨论针对记述的攻击的一些防范。我们将讨论输入确认和提供一些简单的代码,然后我们将从事SQL SERVER锁定。

[输入验证]

输入验证是一个复杂的题目。比较有代表性的是,自从过于严密地确认倾向于引起部分应用程序的暂停,输入确认问题很难被解决,在项目开发中投入很少的注意力在输入确认上。输入确认不是倾向于将它加入到应用程序的功能当中,因此它一般会被忽视。

下面是一个含有简单代码的讨论输入确认的大纲。这个简单的代码不能直接用于应用程序中,但是它十分清晰地阐明了不同的策略。

不同的数据确认方法可以按以下分类:

1) 努力修改数据使它成为正确的

2) 拒绝被认为是错误的输入

3) 只接收被认为是正确的输入

第一种情况有一些概念上的问题;首先,开发人员没必要知道那些是错误数据,因为新的错误数据的形式始终被发现。其次,修改数据会引起上面描述过的数据的长度问题。最后,二次使用的问题包括系统中已经存在数据的重新使用。

第二种情况也存在第一种情况中的问题;已知的错误输入随着攻击技术的发展变化。

第三种情况可能是三种中最好的,但是很难实现。

从安全角度看合并第二种方法和第三种方法可能是最好的方法——只允许正确的输入,然后搜索输入中已知的错误数据。

带有连接符号的姓名的问题对于体现合并两种方法的必要性是一个好的例子:

Quentin Bassington-Bassington

我们必须在正确输入中允许连接符号,但是我们也意识到字符序列''—''对SQL SERVER很重要。

当合并修改数据和字符序列确认时,会出现另一个问题。例如,如果我们应用一个错误过滤在除去单引号之后去探测''—'',''select''和''union'',攻击者可以输入:

uni''on sel''ect version-''-

既然单引号被除去,攻击者可以简单地散布单引号在自己的错误的字符串中躲避被发现。

这有一些确认代码的例子:

方法一——过滤单引号

function escape(input)

input=replace(input,"''","''''")

escape=input

end function

方法二——拒绝已知的错误输入

function validate_string(input)

known_bad=array("select","insert","update","delete","drop","—","''")

validate_string=true

for i=lbound(known_bad) to ubound(known_bad)

if(instr(1,input,known_bad(i),vbtextcompare)<>0) then

validate_string=false

exit function

end if

next

end function

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章