SQL注入防御方法-程序员篇
作者:NB联盟-小竹
SQL注入越来越多的被使用来入侵网站,部分WEB程序员也开端关注这方面的知识,但由于对入侵的要领一知半解,导致在过滤的时间遗漏某些字符,造成宁静漏洞;或者是杯弓蛇影,把一些正当的用户请求都拒之门外,试想一下,当用户想输出个I'm a boy的时间,却给你臭骂一顿,他还会愿意再上你的网站吗?
下面,我从程序方面先容一下SQL注入的防御要领,首先看这三句最简单SQL语句
1.SQL="Select * from Users where UserID=" & Request("ID")
2.SQL="Select * from Users where UserID='" & Request("ID") & "'"
3.SQL="Select * from Users where UserName like '%" & Request("Name") & "%'"
第一句,参数是数字型,这个很明显。第二句,要是字段UserID是int型,就有些人分不明白了。实在,区分第数字弄和字符型参数,只要看SQL语句参数两边有没有单引号即可,很明显,第一句没单引号,是数字型;第二第三句有单引号,是字符型。
对于数字型变量,传入的参数都会直接附加到SQL语句上执行,而因为参数是数字型,所以用isNumeric判断是很宁静的,我曾经试过用\0之类试图断开参数,但结果都是失败。
对于字符型变量,传入的参数都是做为常量,好比你传1 and 1=1进去,SQL语句便是UserID='1 and 1=1',在单引号界定范畴内里的值永久都只是一个常量,要冲破这个范畴,独一的字符便是界定的字符:单引号。所以,字符型变量只要过滤了'号就完全宁静了,至于怎样过滤,最好是把一个单引号更换成两个单引号,因为SQL语句内里划定,'常量'如许表示的常量内里,常量内里要是要有单引号,可以用两个单引号取代。如许,既可以连结用户输出的原貌,又可以包管程序的宁静。
下面是两个函数,大家可以Copy已往直接挪用就行了。
'---------------------------------------------------------------
' NB联盟防注入函数 ReqNum / ReqStr
'---------------------------------------------------------------
Function ReqNum ( StrName )
ReqNum = Request ( StrName )
if Not isNumeric ( ReqNum ) then
Response.Write "参数必须为数字型!"
Response.End
End if
End Function
Function ReqStr ( StrName )
ReqStr = Replace ( Request(StrName), "'", "''" )
End Function
以下面三句SQL语句,说明一下挪用要领:
1.SQL="Select * from Users where UserID=" & ReqNum("ID")
2.SQL="Select * from Users where UserID='" & ReqStr("ID") & "'"
3.SQL="Select * from Users where UserName like '%" & ReqStr("Name") & "%'"
重申一点:下面的要领无论对SQLServer库照旧Access或是其它数据库,都是相对实用、相对宁静,但细致一点,SQLServer的存储过程是个例外,该情况下要把单引号更换成四个单引号,以保宁静。
另外,NB联盟-裤衩曾经写过一篇SQLServer宁静设置的文章,在程序有漏洞的时间,该文章可以让入侵者或得尽大概少的权限及数据,有兴味的可以去看看。
. . . . . . . . . . . . . . . . . .
美国国派别字图书馆账号美国国派别字图书馆
http://ezproxy.chs.okstate.edu/menu
账号/暗码:smith/6313
内有包括SD、VOID、Proquest等在内的数据库
- 文章作者: 福州军威计算机技术有限公司
军威网络是福州最专业的电脑维修公司,专业承接福州电脑维修、上门维修、IT外包、企业电脑包年维护、局域网网络布线、网吧承包等相关维修服务。
版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章原始出处 、作者信息和声明。否则将追究法律责任。
TAG:
评论加载中...
|