本文目录一览:
如何防止网站不被SQL注入攻击
1
普通用户与系统管理员用户的权限要有严格的区分。
如果一个普通用户在使用查询语句中嵌入另一个Drop Table语句,那么是否允许执行呢?由于Drop语句关系到数据库的基本对象,故要操作这个语句用户必须有相关的权限。在权限设计中,对于终端用户,即应用软件的使用者,没有必要给他们数据库对象的建立、删除等权限。那么即使在他们使用SQL语句中带有嵌入式的恶意代码,由于其用户权限的限制,这些代码也将无法被执行。故应用程序在设计的时候,
2
强迫使用参数化语句。
如果在编写SQL语句的时候,用户输入的变量不是直接嵌入到SQL语句。而是通过参数来传递这个变量的话,那么就可以有效的防治SQL注入式攻击。也就是说,用户的输入绝对不能够直接被嵌入到SQL语句中。与此相反,用户的输入的内容必须进行过滤,或者使用参数化的语句来传递用户输入的变量。参数化的语句使用参数而不是将用户输入变量嵌入到SQL语句中。采用这种措施,可以杜绝大部分的SQL注入式攻击。不过可惜的是,现在支持参数化语句的数据库引擎并不多。不过数据库工程师在开发产品的时候要尽量采用参数化语句。
3
多多使用SQL Server数据库自带的安全参数。
为了减少注入式攻击对于SQL Server数据库的不良影响,在SQLServer数据库专门设计了相对安全的SQL参数。在数据库设计过程中,工程师要尽量采用这些参数来杜绝恶意的SQL注入式攻击。
如在SQL Server数据库中提供了Parameters集合。这个集合提供了类型检查和长度验证的功能。如果管理员采用了Parameters这个集合的话,则用户输入的内容将被视为字符值而不是可执行代码。即使用户输入的内容中含有可执行代码,则数据库也会过滤掉。因为此时数据库只把它当作普通的字符来处理。使用Parameters集合的另外一个优点是可以强制执行类型和长度检查,范围以外的值将触发异常。如果用户输入的值不符合指定的类型与长度约束,就会发生异常,并报告给管理员。如上面这个案例中,如果员工编号定义的数据类型为字符串型,长度为10个字符。而用户输入的内容虽然也是字符类型的数据,但是其长度达到了20个字符。则此时就会引发异常,因为用户输入的内容长度超过了数据库字段长度的限制。
4
加强对用户输入的验证。
总体来说,防治SQL注入式攻击可以采用两种方法,一是加强对用户输入内容的检查与验证;二是强迫使用参数化语句来传递用户输入的内容。在SQLServer数据库中,有比较多的用户输入内容验证工具,可以帮助管理员来对付SQL注入式攻击。测试字符串变量的内容,只接受所需的值。拒绝包含二进制数据、转义序列和注释字符的输入内容。这有助于防止脚本注入,防止某些缓冲区溢出攻击。测试用户输入内容的大小和数据类型,强制执行适当的限制与转换。这即有助于防止有意造成的缓冲区溢出,对于防治注入式攻击有比较明显的效果。
如可以使用存储过程来验证用户的输入。利用存储过程可以实现对用户输入变量的过滤,如拒绝一些特殊的符号。如以上那个恶意代码中,只要存储过程把那个分号过滤掉,那么这个恶意代码也就没有用武之地了。在执行SQL语句之前,可以通过数据库的存储过程,来拒绝接纳一些特殊的符号。在不影响数据库应用的前提下,应该让数据库拒绝包含以下字符的输入。如分号分隔符,它是SQL注入式攻击的主要帮凶。如注释分隔符。注释只有在数据设计的时候用的到。一般用户的查询语句中没有必要注释的内容,故可以直接把他拒绝掉,通常情况下这么做不会发生意外损失。把以上这些特殊符号拒绝掉,那么即使在SQL语句中嵌入了恶意代码,他们也将毫无作为。
故始终通过测试类型、长度、格式和范围来验证用户输入,过滤用户输入的内容。这是防止SQL注入式攻击的常见并且行之有效的措施。
5
多层环境如何防治SQL注入式攻击?
在多层应用环境中,用户输入的所有数据都应该在验证之后才能被允许进入到可信区域。未通过验证过程的数据应被数据库拒绝,并向上一层返回一个错误信息。实现多层验证。对无目的的恶意用户采取的预防措施,对坚定的攻击者可能无效。更好的做法是在用户界面和所有跨信任边界的后续点上验证输入。如在客户端应用程序中验证数据可以防止简单的脚本注入。但是,如果下一层认为其输入已通过验证,则任何可以绕过客户端的恶意用户就可以不受限制地访问系统。故对于多层应用环境,在防止注入式攻击的时候,需要各层一起努力,在客户端与数据库端都要采用相应的措施来防治SQL语句的注入式攻击。
如何防止黑客入侵网站sql注入
网站安全狗有防SQL注入的功能,可以了解下。
打开网站安全狗-网站防护-漏洞防护-http安全检测。
HTTP 安全检测:根据攻击特征库,对用户输入进行过滤,用于检测实时的 SQL 注入,主动防护引擎,并及时屏蔽恶意攻击,从而达到防护网站的目的。
怎么入侵防注入的网站?
比如说一个大学网站,他的主站设置了防注入,但是你可以从分站入手,利用旁注的方法.不一定要注入,你可以看他有没有暴库漏洞,或者看他有没有上传漏动.你也可以从他开放的一些端口进行入侵.当然如果他是静态的网站那这些都没有用.
如何防止网站注入攻击
过滤网址的非法字符串
试试这两种方法:
第一种:
squery=lcase(Request.ServerVariables("QUERY_STRING"))
sURL=lcase(Request.ServerVariables("HTTP_HOST"))
SQL_injdata =":|;|||--|sp_|xp_|\|dir|cmd|^|(|)|+|$|'|copy|format|and|exec|insert|select|delete|update|count|*|%|chr|mid|master|truncate|char|declare"
SQL_inj = split(SQL_Injdata,"|")
For SQL_Data=0 To Ubound(SQL_inj)
if instr(squerysURL,Sql_Inj(Sql_DATA))0 Then
Response.Write "SQL通用防注入系统"
Response.end
end if
next
第二种:
SQL_injdata =":|;|||--|sp_|xp_|\|dir|cmd|^|(|)|+|$|'|copy|format|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 "SQL通用防注入系统"
Response.end
end if
next
Next
End If
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 "SQL通用防注入系统"
Response.end
end if
next
next
end if
第三种
%
'--------定义部份------------------
Dim Str_Post,Str_Get,Str_In,Str_Inf,Str_Xh,Str_db,Str_dbstr
'自定义需要过滤的字串,用 "■"分离
Str_In = "'■;■and■exec■insert■select■delete■update■count ...
如何防止网页被注入
选择安全可靠的网络服务商,作为国内顶级互联网IDC服务商,新网和万网是上上之选,占全国市场份额的70%。目前市场上涌现出大批廉价的服务商,部分用户为了追求廉价,使用这些产 品,结果稳定性、安全性、维护质量等问题不断涌现。人们经常错误地认为,黑客都是以网站作为入口进行入侵的,其实这只是一方面,因服务器安全等级引起的网 站问题不胜枚举。一旦服务器遭到入侵,势必波及该服务器中的所有网站。
选择技术精湛的建站公司,目前,建站公司到处都是,甚至形成了恶性竞争,在某广告论坛里,A公司说500元可建设企业网站,B公司放言200元企业网站包干。真的有这样的好事吗? 答案是否定的,但是,为了达到超低价建站的目的,他们往往借用各种手段,以缩短建站周期。例如自助建站,花几分钟填写好简单资料就可以生成一个企业网站。 例如模板抄袭,借用网络上的共享模板或直接复制其它企业的网站,最后遭到第三方的版权投诉。正规的建站公司从来不会以追求廉价建站获取竞争力而放弃建站原 则,他们有规范的网站建设周期流程,合理安排设计师和程序员进行设计与开发,既要考虑网站整体美观,也要考虑网站功能使用的便捷,更要考虑网站后期的可维护性及网站的安全性。
数据库加密, 纵观互联网,90%以上的网站都使用了动态网站开发技术,如ASP,PHP,JSP等等,大大提高了网站的可维护性、可操作性,但是由于动态网站开发技术需要特定的程序处理,而网络程序员往在编写这些程序的时候留下了一些漏洞,而网站建设最后一步“整站测试”又没有检查出来,因此给黑客们提供了可乘之机。
以ASP+ACCESS为例,数据库尽量不要放在常用数据库目录中,例如admin/data目录,这样很容易被黑客猜到,建议使用方法:更改 数据库目录如admin/yiq_data。一些服务器并没有屏蔽mdb文件下载功能,倘若数据库地址被猜出,就可以直接下载数据库,导致信息泄漏。因 此,ACCESS数据库应当进行后缀伪装,例如改为#yiqnet-data#.asp就可以防止些下载。
管理密码加密及管理帐户保密, 一般,未经加密的密码都是直接的表现形式,例如admin,这样的形式显然容易被破解。【温馨提醒:设置密码应当是英文数字的混合组合,且长度大于8 位】,这样设置大大增强了网站防破解性能。但是,仍然不够理想,因为它只能提高破解难度,而不能完全杜绝。因此,采用MD5加密势在必行,这是一个非常复 杂的加密算法,而且不可逆,例如admin通过MD5加密后在数据库中存储表现形式为(16位)7a57a5a743894a0e。设置密码时,请不要使 用生日,英文名字,名字拼音等众所周知的字串,并且,妥善保管好设置的密码,注意保密。
5、 防止代码注入攻击
注入攻击是指利用网站程序设计的漏洞,通过特定的字串使SQL变相运行,从而暴露数据库的相关信息,获取管理帐号和密码,修改网站设定,上传后门程序,这 时入侵者可以在受害站点做任何想做的事情。加入防注入代码就可以解决这一问题,这是网站程序员应该做的事情。