转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 数据库 >> Sql Server >> 正文
SQL注入防御方法-程序员篇         

SQL注入防御方法-程序员篇

作者:闵涛 文章来源:闵涛的学习笔记 点击数:891 更新时间:2007/11/14 13:06:30
作者:NB联盟-小竹
ps:老东西了,没别的意思。对曾经促进过网络安全事业的54nb的一点怀念吧!
  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安全设置的文章,在程序有漏洞的时候,该文章可以让入侵者或得尽可能少的权限及数据,该文章已经发表在www.54NB.com,有兴趣的可以去看看。


[办公软件]在sybase中插入图片、PDF、文本文件  [办公软件]安装Sybase ASE
[办公软件]linux指令大全(完整篇)  [办公软件]Linux新手入门常用命令大全
[办公软件]在RedHat Linux 9里安装gaim0.80  [办公软件]浅谈Linux 下Java 1.5 汉字方块问题解决方法
[办公软件]Linux程序员必读:中文化与GB18030标准  [办公软件]linux指令大全
[办公软件]制作Linux启动盘的四种方法  [办公软件]Linux文件系统的反删除方法
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · Sql Server  · MySql
    · Access  · ORACLE
    · SyBase  · 其他
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台