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

转载 2007年10月15日 01:02:00
SQL注入防御方法-程序员篇
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,有兴趣的可以去看看。 

【Web安全与防御】简析Sql注入与防御措施

引言 最近由于在CSDN上看到许多有关SQL注入问题的文章,以前因为是小白,重在学编程技术上,并没有在程序安全防护上大费周章。但是由于学习的路途越走越远,包括前段时间理工大教务处主页被黑(我同学也在网...
  • u013517797
  • u013517797
  • 2015年10月03日 13:41
  • 3035

《SQL注入攻击与防御》读书笔记

《SQL注入攻击与防御》读书笔记
  • ggf123456789
  • ggf123456789
  • 2015年10月08日 23:41
  • 1631

防止SQL注入的五种方法

防止SQL注入的五种方法 MiniBu 发表于2年前 分享到: 一键分享QQ空间微信腾讯微博新浪微博QQ好友有道云笔记 转 ...
  • zhangyongqiang123
  • zhangyongqiang123
  • 2016年10月09日 17:21
  • 46065

SQL注入攻击防御方法研究.kdh

  • 2013年02月25日 16:31
  • 1.92MB
  • 下载

[web安全]SQL注入防御方法总结

SQL注入概念:程序对于用户的输入未作处理就直接放到SQL语句中执行,导致用户输入的特殊字符可以改变语句的原有逻辑,结果可执行任意的SQL语句。 1.escape处理 一般会用到两个函数mysql...
  • hitwangpeng
  • hitwangpeng
  • 2015年05月06日 13:34
  • 912

mysql进阶(二十四)防御SQL注入的方法总结

防御SQL注入的方法总结      这篇文章主要讲解了防御SQL注入的方法,介绍了什么是注入,注入的原因是什么,以及如何防御,需要的朋友可以参考下。      SQL注入是一类危害极大的攻击形式。虽然...
  • sunhuaqiang1
  • sunhuaqiang1
  • 2016年06月30日 20:56
  • 47651

防御SQL注入的方法总结

SQL 注入是一类危害极大的攻击形式。虽然危害很大,但是防御却远远没有XSS那么困难。 SQL 注入可以参见:https://en.wikipedia.org/wiki/SQL_injectio...
  • qq_17257809
  • qq_17257809
  • 2016年07月12日 13:29
  • 172

SQL注入的攻击与防御(简单篇)

原理:SQL注入攻击值得是通过构建特殊的输入作为参数传入web应用程序,而这些输入大都是SQL语法里的一下组合, 通过执行SQL语句进执行攻击者所要的操作,其主要原因是程序没有细致的过滤用户输入的数...
  • zjm750617105
  • zjm750617105
  • 2015年06月29日 00:04
  • 852

新型 SQL 截断攻击和防御方法

新型 SQL 截断攻击和防御方法 Bala Neerumalla http://msdn.microsoft.com/zh-cn/magazine/cc163523.aspx ...
  • kendyhj9999
  • kendyhj9999
  • 2014年02月11日 10:29
  • 508

Spring MVC防御CSRF、XSS和SQL注入攻击

本文说一下SpringMVC如何防御CSRF(Cross-site request forgery跨站请求伪造)和XSS(Cross site script跨站脚本攻击)。 说说CSRF 对CS...
  • a764340703
  • a764340703
  • 2017年04月14日 11:13
  • 886
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:SQL注入防御方法-程序员篇
举报原因:
原因补充:

(最多只允许输入30个字)