您当前位置:优侠库 > 资讯攻略 >
来源:未知
2019-11-23 10:25:16 浏览: 分类:资讯攻略

谈谈六个防止SQL注入式攻击的建议

SQL注入的攻击是非常有害的。在解释如何防止它之前,数据库管理员有必要了解它的攻击原理。这有利于管理员采取有针对性的防范措施。

SQL注入攻击的一个简单例子。

语句:= & quotSELECT * FROM Users WHERE Value = & quot;+a _ variable+& quot;

上面的语句是一个非常常见的SQL语句。它的主要功能是让用户输入一个员工编号,然后查询这个员工的信息。但如果这句话被非法攻击者修改,就有可能成为数据破坏的黑手。例如,当攻击者输入变量时,输入以下内容SA001 & rsquo。;删除表c _ order-1 .然后上面的SQL语句变成select * from users,其中value = & lsquo执行时。SA001 & rsquo;删除表c _ order-1 .

这种说法是什么意思?& lsquoSA001 & rsquo后面的分号表示一个查询的结束和另一个语句的开始。c_order后面的双连字符表示当前行的其余部分只是一个注释,应该忽略。如果修改后的代码语法正确,服务器将执行该代码。当系统处理这条语句时,它将首先执行查询语句来查找用户编号为SA001的用户信息。然后,数据会删除表C_ORDER(如果没有其他主键和其他相关约束,则删除成功)。只要注入的SQL代码具有正确的语法,它就不能以编程方式检测篡改。因此,您必须验证所有用户输入,并仔细检查在您使用的服务器中执行construct SQL命令的代码。

第二,SQL注入进攻的原则。

可见,SQL注入的攻击是非常有害的。在解释如何防止它之前,数据库管理员有必要了解它的攻击原理。这有利于管理员采取有针对性的防范措施。

SQL注入是目前针对数据库的一种常见攻击方法。在这种攻击模式下,攻击者会在字符串中插入一些恶意代码。然后将字符串通过各种方式传递给SQLServer数据库的实例进行分析和执行。只要这个恶意代码符合SQL语句的规则,在代码编译执行的时候就不会被系统发现。

SQL注入攻击主要有两种形式。一种是直接将代码插入到与SQL命令串联的用户输入变量中,并使其执行。上面作者举的例子就是采用了这种方法。因为它直接与SQL语句绑定,所以也被称为直接注入攻击。第二种是间接攻击方法,将恶意代码注入到要存储在表中的字符串中,或者作为原始文档。存储的字符串将连接到一个动态SQL命令来执行一些恶意的SQL代码。

注入过程的工作方式是预先终止文本字符串,然后追加一个新命令。以直喷攻击为例。当用户输入变量时,当前语句以分号结束。然后插入恶意的SQL语句。因为插入的命令可能会在执行前附加其他字符串,所以攻击者通常会标记“with comments & mdash"终止注入的管柱。执行时,系统会认为下面的语句是注释的,所以后面的文本会被忽略,不会被编译执行。

第三,防治SQL注入发作。

既然SQL注入袭击的危害如此之大,如何防范呢?以下建议可能有助于数据库管理员防止SQL注入攻击。

1.应该严格区分普通用户和系统管理员的权限。

如果普通用户在查询语句中嵌入另一个Drop Table语句,是否允许执行?因为Drop语句与数据库的基本对象相关,所以用户必须有相关的权限才能操作该语句。在权限设计中,不必给予最终用户,即应用软件的用户创建和删除数据库对象的权限。即使他们使用的SQL语句中嵌入了恶意代码,这些代码也会因为其用户权限的限制而无法执行。因此,在设计应用程序时,最好将系统管理员的用户与普通用户区分开来。这样可以将注入攻击对数据库的危害降到最低。

2.强制使用参数化语句。

如果用户输入的变量在编写SQL语句时没有直接嵌入到SQL语句中。如果这个变量通过一个参数传递,那么就可以有效地防止SQL注入攻击。也就是说,用户的输入永远不能直接嵌入到SQL语句中。相反,必须过滤用户输入的内容,或者必须使用参数化语句来传递用户输入的变量。参数化语句使用参数,而不是将用户输入变量嵌入SQL语句中。有了这个措施,大多数SQL注入攻击都可以避免。不幸的是,支持参数化语句的数据库引擎并不多。但是,数据库工程师在开发产品时应该尽量使用参数化语句。

3.加强对用户输入的验证。

一般来说,有两种方法可以防止SQL注入袭击。一是加强对用户输入的检查和验证;第二种是强制使用参数化语句来传达用户输入的内容。在SQLServer数据库中,有许多用户输入验证工具,可以帮助管理员应对SQL注入攻击。测试字符串变量的内容,只接受所需的值。拒绝包含二进制数据、转义序列和注释字符的输入内容。这有助于防止脚本注入和一些缓冲区溢出攻击。测试用户输入的大小和数据类型,并实施适当的限制和转换。即有助于防止故意缓冲区溢出,对防止注入攻击效果明显。

例如,存储过程可用于验证用户的输入。存储过程可以用来过滤用户输入的变量,比如拒绝一些特殊符号。就像上面的恶意代码一样,只要存储过程过滤掉分号,那么这个恶意代码就没用了。在执行SQL语句之前,可以通过数据库的存储过程拒绝接受一些特殊符号。在不影响数据库应用的前提下,数据库应该拒绝带有以下字符的输入。如分号分隔符,它是SQL注入攻击的主要帮凶。例如注释分隔符。注释只能在数据设计中使用。一般用户的查询语句中没有必要的注释,你可以直接拒绝他。通常不会有意外损失。拒绝这些特殊符号,即使SQL语句中嵌入了恶意代码,也无济于事。

因此,测试的类型、长度、格式和范围总是用于验证用户输入和过滤用户输入的内容。这是防止SQL注入袭击的常用而有效的措施。

4.更多地利用sql server数据库附带的安全参数。

为了减少注入攻击对SQLServer数据库的不利影响,在SQL Server数据库中专门设计了相对安全的SQL参数。在数据库设计过程中,工程师应该尝试使用这些参数来防止恶意的SQL注入攻击。

例如,SQL Server数据库中提供了参数集合。这个集合提供了类型检查和长度验证的功能。如果管理员采用参数集,用户的输入将被视为字符值,而不是可执行代码。即使用户输入的内容包含可执行代码,数据库也会过滤掉。此时,数据库只将其视为普通字符。使用Parameters集合的另一个优点是可以强制进行类型和长度检查,超出范围的值将触发异常。如果用户输入的值不符合指定的类型和长度限制,将会发生异常并报告给管理员。如上例,如果雇员编号定义的数据类型是字符串类型,则长度为10个字符。虽然用户输入的内容也是字符型数据,但其长度达到20个字符。那么将抛出一个异常,因为用户输入的内容长度超过了数据库字段长度的限制。

5.如何在多层环境下防止SQL注入攻击?

在多层应用程序环境中,用户输入的所有数据在被允许进入可信区域之前都应该经过验证。没有通过验证过程的数据应该被数据库拒绝,并且错误消息将被返回到更高的级别。实现多层验证。针对恶意用户无目的采取的预防措施可能对坚决的攻击者无效。最好验证用户界面中的输入以及所有跨越信任边界的后续点。例如,在客户端应用程序中验证数据可以防止简单的脚本注入。但是,如果下一层认为其输入已经被验证,任何可以绕过客户端的恶意用户都可以不受限制地访问系统。因此,对于多层应用环境,在防范注入攻击时,需要各层协同工作,在客户端和数据库上都要采取相应的措施来防范SQL语句的注入攻击。

6.如有必要,使用专业的漏洞扫描工具找到可能被攻击的点。

使用专业的漏洞扫描工具可以帮助管理员找到可能被SQL注入攻击的点。然而,漏洞扫描工具只能发现攻击点,而不能主动防御SQL注入攻击。当然,这个工具经常被攻击者使用。例如,攻击者可以使用该工具自动搜索攻击目标并实施攻击。因此,如果有必要,企业应该投资一些专业的漏洞扫描工具。完美的漏洞扫描器不同于网络扫描器,它专门在数据库中寻找SQL注入的漏洞。最新的漏洞扫描程序可以发现新发现的漏洞。因此,专业的工具可以帮助管理员发现SQL注入漏洞,并提醒管理员采取积极措施防止SQL注入攻击。如果攻击者能够找到的所有SQL注入漏洞都被数据库管理员发现,并采取积极措施堵住漏洞,那么攻击者将无从下手。

关键词:SQL注入

优侠库网站每天提供最新最热门的安卓手机软件、游戏下载、分享热门手游资讯攻略教程、手机软件教程步骤,专注安卓手机游戏软件下载。

本文链接:http://www.123down.cn/gonglue/227209.html

攻略资讯
安卓软件
安卓游戏