sql注入攻击怎么解决

作者&投稿:苗淑 (若有异议请与网页底部的电邮联系)
什么是SQL注入,如何防止SQL注入?~

所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。具体来说,它是利用现有应用程序,将(恶意)的SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句。比如先前的很多影视网站泄露VIP会员密码大多就是通过WEB表单递交查询字符暴出的,这类表单特别容易受到SQL注入式攻击.
防护
归纳一下,主要有以下几点:
1.永远不要信任用户的输入。对用户的输入进行校验,可以通过正则表达式,或限制长度;对单引号和
双"-"进行转换等。
2.永远不要使用动态拼装sql,可以使用参数化的sql或者直接使用存储过程进行数据查询存取。
3.永远不要使用管理员权限的数据库连接,为每个应用使用单独的权限有限的数据库连接。
4.不要把机密信息直接存放,加密或者hash掉密码和敏感的信息。
5.应用的异常信息应该给出尽可能少的提示,最好使用自定义的错误信息对原始错误信息进行包装
6.sql注入的检测方法一般采取辅助软件或网站平台来检测,软件一般采用sql注入检测工具jsky,网站平台就有亿思网站安全平台检测工具。MDCSOFT SCAN等。采用MDCSOFT-IPS可以有效的防御SQL注入,XSS攻击等。

<%
'----实现get请求的注入的拦截-----
dim sql_injdata,Sql_Inj,SQL_Get,Sql_DATA
SQL_injdata = "'|and|exec|insert|select|delete|update|count|*|%|chr|mid|master|truncate|char|declare"
SQL_inj = split(SQL_Injdata,"|")
If Request.QueryString"" Then
For Each SQL_Get In Request.QueryString
For SQL_Data=0 To Ubound(SQL_inj)
if instr(Request.QueryString(SQL_Get),Sql_Inj(Sql_DATA))>0 Then
Response.Write "alert('安全警告:请勿非法注入,你的IP已被记录,已发送管理员!');history.back(-1)"
Response.end
end if
next
Next
End If

'----我们还要过滤post请求,所以我们还得继续考虑request.form,这个也是以数组形式存在的,我们只需要再进一次循环判断即可-----

If Request.Form"" Then
For Each Sql_Post In Request.Form
For SQL_Data=0 To Ubound(SQL_inj)
if instr(Request.Form(Sql_Post),Sql_Inj(Sql_DATA))>0 Then
Response.Write "alert('安全警告:请勿非法注入,你的IP已被记录,已发送管理员!');history.back(-1)"
Response.end
end if
next
next
end if
%>

把这段代码,加在你的连接数据库文件时太OK啦,
还有你看看你网站的服务器安全吗?如果服务器别的网站有漏洞还是一样可以加,我也就知道这么多啦,希望能帮上你的忙!!

百度百科:

SQL注入攻击是你需要担心的事情,不管你用什么web编程技术,再说所有的web框架都需要担心这个的。你需要遵循几条非常基本的规则:
1)在构造动态SQL语句时,一定要使用类安全(type-safe)的参数加码机制。大多数的数据API,包括ADO和ADO. NET,有这样的支持,允许你指定所提供的参数的确切类型(譬如,字符串,整数,日期等),可以保证这些参数被恰当地escaped/encoded了,来避免黑客利用它们。一定要从始到终地使用这些特性。
例如,在ADO. NET里对动态SQL,你可以象下面这样重写上述的语句,使之安全:
Dim SSN as String = Request.QueryString("SSN")
Dim cmd As new SqlCommand("SELECT au_lname,au_fname FROM authors WHERE au_id = @au_id")
Dim param = new SqlParameter("au_id",SqlDbType.VarChar)
param.Value = SSN
cmd.Parameters.Add(param)
这将防止有人试图偷偷注入另外的SQL表达式(因为ADO. NET知道对au_id的字符串值进行加码),以及避免其他数据问题(譬如不正确地转换数值类型等)。注意,VS 2005内置的TableAdapter/DataSet设计器自动使用这个机制,ASP. NET 2.0数据源控件也是如此。
一个常见的错误知觉(misperception)是,假如你使用了存储过程或ORM,你就完全不受SQL注入攻击之害了。这是不正确的,你还是需要确定在给存储过程传递数据时你很谨慎,或在用ORM来定制一个查询时,你的做法是安全的。
2) 在部署你的应用前,始终要做安全审评(security review)。建立一个正式的安全过程(formal security process),在每次你做更新时,对所有的编码做审评。后面一点特别重要。很多次我听说开发队伍在正式上线(going live)前会做很详细的安全审评,然后在几周或几个月之后他们做一些很小的更新时,他们会跳过安全审评这关,推说,“就是一个小小的更新,我们以后再做编码审评好了”。请始终坚持做安全审评。
3) 千万别把敏感性数据在数据库里以明文存放。我个人的意见是,密码应该总是在单向(one-way)hashed过后再存放,我甚至不喜欢将它们在加密后存放。在默认设置下,ASP. NET 2.0 Membership API 自动为你这么做,还同时实现了安全的SALT 随机化行为(SALT randomization behavior)。如果你决定建立自己的成员数据库,我建议你查看一下我们在这里发表的我们自己的Membership provider的源码。同时也确定对你的数据库里的信用卡和其他的私有数据进行了加密。这样即使你的数据库被人入侵(compromised)了的话,起码你的客户的私有数据不会被人利用。
4)确认你编写了自动化的单元测试,来特别校验你的数据访问层和应用程序不受SQL注入攻击。这么做是非常重要的,有助于捕捉住(catch)“就是一个小小的更新,所有不会有安全问题”的情形带来的疏忽,来提供额外的安全层以避免偶然地引进坏的安全缺陷到你的应用里去。
5)锁定你的数据库的安全,只给访问数据库的web应用功能所需的最低的权限。如果web应用不需要访问某些表,那么确认它没有访问这些表的权限。如果web应用只需要只读的权限从你的account payables表来生成报表,那么确认你禁止它对此表的 insert/update/delete 的权限。
6)很多新手从网上下载SQL通用防注入系统的程序,在需要防范注入的页面头部用 来防止别人进行手动注入测试(。
可是如果通过SQL注入分析器就可轻松跳过防注入系统并自动分析其注入点。然后只需要几分钟,你的管理员账号及密码就会被分析出来。
7)对于注入分析器的防范,笔者通过实验,发现了一种简单有效的防范方法。首先我们要知道SQL注入分析器是如何工作的。在操作过程中,发现软件并不是冲着“admin”管理员账号去的,而是冲着权限(如flag=1)去的。这样一来,无论你的管理员账号怎么变都无法逃过检测。
第三步:既然无法逃过检测,那我们就做两个账号,一个是普通的管理员账号,一个是防止注入的账号,为什么这么说呢?笔者想,如果找一个权限最大的账号制造假象,吸引软件的检测,而这个账号里的内容是大于千字以上的中文字符,就会迫使软件对这个账号进行分析的时候进入全负荷状态甚至资源耗尽而死机。下面我们就来修改数据库吧。
⒈对表结构进行修改。将管理员的账号字段的数据类型进行修改,文本型改成最大字段255(其实也够了,如果还想做得再大点,可以选择备注型),密码的字段也进行相同设置。
⒉对表进行修改。设置管理员权限的账号放在ID1,并输入大量中文字符(最好大于100个字)。
⒊把真正的管理员密码放在ID2后的任何一个位置(如放在ID549上)。
由于SQL注入攻击针对的是应用开发过程中的编程不严密,因而对于绝大多数防火墙来说,这种攻击是“合法”的。问题的解决只有依赖于完善编程。专门针对SQL注入攻击的工具较少,Wpoison对于用asp,php进行的开发有一定帮助...。

  1. 不使用拼接sql语句的方式传参数,而使用SqlParameter来传递sql参数;


   2. 手动过滤特殊字符,例如:'%','or',<script>,<img>等等,建议加在执行sql命令之前。



最好的方法就是使用存储过程参数化…………


存储过程如何使用
执行存储过程exec proc_get_student;3、 修改存储过程--修改存储过程alter proc proc_get_studentasselect * from student;4、 带参存储过程--带参存储过程if (object

如何进入网站数据库?
2.实际方法:采用SQL注入等黑客技术。SQL注入是最简单的黑客技术了,不过由于简单威力也不会很大,要求网站设计对于安全的考虑不周,存在漏洞才行。由于网站设计不周,就会在出错或者某些情况下暴露出数据库表结构的一些内幕,这样就可以写出你想要的SQL命令,把它插入到Web表单递交,或者页面请求的查询字符...

哪个组件处理用户界面?sql
此外,前端组件还可以通过Ajax技术实现异步数据交互,实现无刷新局部更新的效果,提升用户体验。需要注意的是,前端组件处理用户界面SQL只是整个Web应用程序中的一个环节,它与后端服务器以及数据库系统等其他组件密切相关。因此,在进行Web应用程序开发时,需要整体考虑,合理设计各个组件之间的交互和协作,以实...

第2课 GraphQL服务搭建
实际上针对type中的每个Field都需要有getField,使得Graphql能够获取到数据注入到返回的结果中,如果针对此Field已经实现了Resolver,那么会优先使用Resolver来注入数据,此时可以省略掉getField(直接去掉School Bean中的master字段)不过还是建议将Java Bean和type中的Field一一对应,便于维护。以上是针对Query的D...

什么是存储过程?有什么优点?
1、重复使用:存储过程可以重复使用,从而可以减少数据库开发人员的工作量。2、减少网络流量:存储过程位于服务器上,调用的时候只需要传递存储过程的名称以及参数就可以了,因此降低了网络传输的数据量。3、安全性:参数化的存储过程可以防止SQL注入式攻击,而且可以将Grant、Deny以及Revoke权限应用于存储过程...

上海冠宙QL-380高压清洗机,电机转半圈就转不动了怎么回事?
上海冠宙QL-380高压清洗机,电机转半圈就转不动了怎么回事?【提问】1、清洗机压力不稳定主要是因为高压水泵或进水管路内吸入了空气所导致的,这时需要检查水源的压力是否足够,进水过滤器是否堵塞,如果发现进水滤网堵塞,将滤网取下用水清洗就可以了。2、运行过程中出现异常尖叫声导致这一现象发生的主要...

谁有ejb3与hibernate结合的详细介绍
EntityBean是值得狠狠攻击的,但是你用错了枪。我上面提到,支持CMP EntityBean的EJB Implements都有一个Persistence Engine,也就是O\/R Mapping Engine。CMP O\/R Mapping Engine用来做什么的?它通过分析CMP Abastract Schema、分析EJBQL、分析Bean状态等行为,生成SQL,然后和DB 进行交互。而在我眼里,Hibernate不是”O\/...

神之墓地2.6a任务攻略
任务过程:携带【深渊魔甲MAX】和【妖皇的骨灰】进入魔帝墓地,魔帝的灵魂将给【深渊魔甲MAX】注入魔气,获得物品【深渊魔甲-魔化】(魔帝墓地在基地右边的蓝龙巢穴买传送,魔帝门徒有几率将你秒杀)任务10:追随者 接受地点:无 任务过程:任意难度击败魔帝之子绝天,获得他的效忠,神墓增加守卫者。

Java培训班的课程一般都学习什么内容呢?
Linux环境下项目发布部署等。3、掌握使用流行框架SSM\\SSH技术实现企业级项目开发:重点学习MyBatis、Spring、Spring MVC框架的应用,Git、Java设计模式等,重点学习Struts2 、Spring、Hibernate框架的应用,Maven、Oracle数据库应用技术,了解大数据生态体系,Hadoop基础入门。4、JavaWeb框架:Spring体系结构、...

塔城市18926709717: sql注入攻击怎么解决 -
倚战地喹: 百度百科:SQL注入攻击是你需要担心的事情,不管你用什么web编程技术,再说所有的web框架都需要担心这个的.你需要遵循几条非常基本的规则:1)在构造动态SQL语句时,一定要使用类安全(type-safe)的参数加码机制.大多数的数据...

塔城市18926709717: 如何解决SQL注入漏洞 -
倚战地喹: 要防止SQL注入其实不难,你知道原理就可以了.所有的SQL注入都是从用户的输入开始的.如果你对所有用户输入进行了判定和过滤,就可以防止SQL注入了.用户输入有好几种,我就说说常见的吧.文本框、地址栏里***.asp?中?号后e68a...

塔城市18926709717: 网站被SQL注入攻击了怎么办 -
倚战地喹: 暂停网站服务,把SQL注入的信息清理掉;修改数据处理层,防止在被攻击

塔城市18926709717: 被SQL注入攻击怎么办? -
倚战地喹: 程序有问题,修改其中的注入漏洞,另外,可以加一些工具,过滤关键字.你用access,不用sql,更加危险,access也有可能被注入,更可能数据库被直接下载了去.

塔城市18926709717: 要阻止SQL注入攻击,需要那样方法?
倚战地喹: SQL注入攻击的总体思路: 发现SQL注入位置; 判断服务器类型和后台数据库类型; 确定可执行情况 对于有些攻击者而言,一般会采取sql注入法.下面我也谈一下自己关于sql注入法的感悟. 注入法: 从理论上说,认证网页中会有型如: ...

塔城市18926709717: 网站被挂马了该怎么办?遭受SQL注入该怎么办? -
倚战地喹: 加上网站防注入代码

塔城市18926709717: 如何防止sql注入攻击 -
倚战地喹: 防止SQL注入的五种方法一、SQL注入简介 SQL注入是比较常见的网络攻击方式之一,它不是利用操作系统的BUG来实现攻击,而是针对程序员编程时的疏忽,通过SQL语句,实现无帐号登录,甚至篡改数据库.二、SQL注入攻击的总体思路1....

塔城市18926709717: 什么叫sql注入式攻击,如何防止sql注入式攻击
倚战地喹: 所谓注入式攻击,就是客户通过输入使sql语句变成 where id= "kllsld " and password= "lll " or 1=1 这种句子. 要防止注入式攻击,可以使用存储过程,也可以采用参数的方法 如select id,name,password from czy where id=@IdName and password=@PassWord 然后把IdName,Password加入参数表,并赋值

塔城市18926709717: 怎么防SQL注入攻击 -
倚战地喹: 在conn.asp或其他网页前面加上如下防注入代码即可. dim var var = "and|exec|insert|select|delete|update|count|*|%|chr|mid|master|truncate|char|declare|or|javascript" sql_inj = split(var,"|")If Request.QueryString<>"" Then For ...

塔城市18926709717: 我的网站老是被sql注入攻击怎么办? -
倚战地喹: <%'----实现get请求的注入的拦截-----dim sql_injdata,Sql_Inj,SQL_Get,Sql_DATASQL_injdata = "'|and|exec|insert|select|delete|update|count|*|%|chr|mid|master|truncate|char|declare" SQL_inj = split(SQL_Injdata,"|") If Request.QueryString<>"...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网