VPS参考、测评、推荐
分享你关注的VPS主机优惠信息

sql注入的方法以及如何防止sql注入?

sql注入的方法以及如何防止sql注入?

sql注入的方法有哪些? SQL 注入 (SQLi) 是最危险的 漏洞之一。好在这种情况越来越少,但一旦受到这样的攻击,后果将不堪设想。下面我给大家介绍一下sql注入的方法以如何防止sql注入。

sql注入的方法以及如何防止sql注入?

sql注入的方法有哪些?

SQL注入:通过在表单中插入SQL命令提交或输入域名或页面请求的查询字符串来欺骗服务器执行恶意SQL命令。

具体来说,就是利用现有应用程序将(恶意)SQL命令注入到后台数据库引擎执行中的能力,可以通过在Web表单中输入(恶意)SQL语句来获取漏洞网站上的数据库,而不是按照设计者的意图执行 SQL 语句。例如,以往的很多网站泄露会员密码的方式大多是通过WEB表单提交查询字符​​。这种形式特别容易受到 SQL 注入攻击。 (来自百度)

也就是说,网站页面包含与数据库交互的部分(如新闻网站的搜索功能),当在网站上输入数据信息时,将数据信息编程并传递给执行的数据库。对传入数据库的相应数据进行处理(如过滤特殊字符、编码等),使黑客可以通过网站并在数据库中执行它们。这些以黑客为目的的SQL语句会导致数据库信息的泄露和破坏。

1、数字注入点

很多网页都有类似的结构 http://www.XXX.com/12.php?=1 基于这种形式的注入,一般称为数字注入点,因为它的注入点 类型是一个数字。在大部分网页中,比如查看用户个人信息、查看文章等,大多采用这种结构形式来传递id等信息,交给后端,在数据库中查询相应的信息,然后返回到前台。这类SQL语句的原型大概是select * from table name where id=1 如果有注入,我们可以构造类似下面的SQL注入语句进行爆破: select * from table name where id=1 and 1= 1

2、字符注入点

网页结构类似 http://www.XXX.com/users.php?user=admin 在这种形式中,注入点的用户类型是字符类型,所以称为字符注入观点。这类 SQL 语句的原型大概是 select * from table name where user=’admin’。值得注意的是,这里的引号比数值注入类型的SQL语句原型要多,可以是单引号,也可以是双引号。如果有注入,我们可以构造类似如下的sql注入语句进行爆破: select * from table name where user=’admin’ and 1=1 ‘ 我们需要处理这些烦人的引号。

3、搜索注入点

这是一种特殊类型的注入。这类注入主要是指在数据搜索时不过滤搜索参数。一般链接地址中有“keyword=keyword”,有的链接地址不显示,而是直接通过搜索框表单提交。此类注入点提交的SQL语句的原始形式大致为:select * from table name where field like ‘%keyword%’ 如果有注入,我们可以构造类似如下的SQL注入语句进行爆破:select * 来自表名称,其中字段如 ‘%test%’ 和 ‘%1%’=’%1%’

只要所有输入都与数据库交互,就可能触发 SQL 注入。 SQL注入可分为:按数据提交方式:

(1)GET注入:提交数据的方法是GET,注入点的位置在GET参数部分。比如有这样一个链接http://xxx.com/ news.php?id=1 ,id为注入点。

(2)POST注入:使用POST方式提交数据,注入点位于POST数据部分,经常出现在表单中。

(3)Cookie注入:客户端的cookie会包含在HTTP请求中,注入点存在于cookie中的某个字段中。

(4)HTTP头注入:注入点在HTTP请求头中的一个字段中。例如存在于User-Agent字段中。严格来说cookies也应该被认为是一种header注入.form.因为在HTTP请求中,Cookie是header中的一个字段。

按照提交方式分类后,你会发现SQL注入最长出现在链接地址、数据参数、cookie信息和HTTP请求头中。

了解SQL注入的可能位置,然后我们需要判断这些位置是否可以触发SQL注入。最简单的方法是在对应的位置输入and 1=1(和and 1=1的变换形式)来判断。对于不同的注入点类型,比如字符类型,需要适当加单引号,而对于数字类型的注入点,则不需要。

SQL注入高级分类(按执行效果分类)

1、基于布尔的盲注:即可以根据返回的页面判断条件真假的注入。

2、基于时间的盲注:即不能根据页面返回的内容判断任何信息,使用条件语句检查是否执行了延时语句(即页面返回时间是否增加)。

3、基于错误注入:即页面会返回错误信息,或者注入语句的结果直接返回给页面。

4、联合查询注入:联合可用时注入。

5、堆查询注入:可以同时执行多条语句的注入。

6、宽字节注入:使用gbk是多字节编码,两个字节代表一个汉字

如何防止sql注入

1、普通用户和系统管理员的必须严格区分。

如果普通用户在查询语句中嵌入另一个Drop Table语句,是否允许执行?由于 Drop 语句与数据库的基本对象有关,因此用户必须具有相关才能操作该语句。在设计中,最终用户,即应用软件的用户,不需要授予他们创建和删除数据库对象的权限。那么即使他们使用嵌入了恶意代码的SQL语句,由于用户权限的限制,这些代码也将无法执行。因此,在设计应用程序时,

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

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

3、使用 SQL Server 数据库附带的安全参数。

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

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

4、增强的用户输入

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

例如,存储过程可用于验证用户输入。使用存储过程可以过滤用户输入的变量,比如拒绝一些特殊的符号。比如上面的恶意代码,只要存储过程过滤掉分号,恶意代码就没用了。在执行 SQL 语句之前,可以通过数据库的存储过程拒绝接受一些特殊符号。在不影响数据库应用的前提下,应使数据库拒绝包含以下字符的输入。和分号分隔符一样,是SQL注入攻击的主要帮凶。例如注释分隔符。注释仅在数据设计期间使用。一般用户的查询语句中没有必要的注释内容,直接拒绝即可。通常,这样做不会有意外损失。如果这些特殊符号被拒绝,即使 SQL 语句中嵌入了恶意代码,它们也不会做任何事情。

因此,请始终通过测试类型、长度、格式和范围来验证用户输入,并过滤用户输入。这是防止 SQL 注入攻击的常用且行之有效的措施。

5、如何防范多层环境下的SQL注入攻击?

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

这里有一些 SQL 注入的方法以如何防止 SQL 注入。 SQL 注入是一种流行的攻击攻击方法,但通过采取适当的预防措施,例如确保数据加密、保护和测试 Web 应用程序,并且您是最新的补丁,您可以采取有意义的措施来保护您的数据安全。

:sql注入的方法以及如何防止sql注入?,https://vps.caogenba.com.com/69074.html

如今做站的人不多了,多个朋友多条路子,加入站长论坛和大佬们同道交流,Tips:可以免费打广告哦~ 点击立即加入>>

赞(0) 打赏
未经允许不得转载:草根吧VPS_最新VPS信息参考 » sql注入的方法以及如何防止sql注入?
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址