如何预防SQL注入
来源:互联网 发布:网络语晕针是什么意思 编辑:程序博客网 时间:2024/05/16 18:42
以前我出去面试时,人家问我什么叫SQL注入,我很迷芒的告诉人家:我不知道,因为我从来没有遇到过这类情况。
后来随着SQL注入渐入流行,我才发现,其实SQL注入是因为程序员写程序时的不良习惯导致的一类漏洞的总称。其主要原因是程序员没有处理好SQL语句中的单引号“'”。例如,在数字型参数中,没有用程序去判断用户输入或提交的内容是否是有效的数字。在文本型参数中,没有去判断用户输入的内容是否带单引号。至于注入的基本原理外面到处都可以查到,我这边就不占用篇幅了。
其实SQL注入的问题不仅仅存在于网页,同时也存在于CS结构的数据库软件界面中。
最简单的处理方法是,把所有用户的输入内容全部用替换语句把一个单引号替换成2个单引号;同时对数字、日期等类型作有效性检测。这样就可以杜绝SQL注入。
但如果一个大型网站中,已经存在有该漏洞了怎么办? 我们可以用一个较为简单的办法来处理,就是去判断所有网页REQUEST参数,然后筛选或替换掉有害内容即可。
可能很多人已经尝试了把提交过来的FORM和QUERYSTRING作了筛选,但结果还是被注入。其原因主要有2点:第一,其筛选的内容不够完整。之前我有看过一段人家写的过滤代码,只过滤了DELETE,UPDATE,INSERT等几个很常用的关键字连EXEC都没列进去就对外宣称自己过滤了哪些内容,并警告人家不要攻击。简直幼稚到让人无语!因为大多人注入一个网站都使用的是2进制编码注入,而这仅需要用CAST来转换,用EXEC来执行。所以我们在作有害内容筛选时,除了把UPDATE、DELETE、INSERT等内容滤掉外,还要把这2个关键字滤掉。当然如何处理大小写我就不赘述了。
第二,那是因为程序中使用了偷懒的办法来获取提交的数据,直接用REQUEST来获取所有REQUEST.FORM和REQUEST.QUERYSTRING的内容。这样就存在一个问题,你们是否知道REQUEST也可以获取来自REQUEST.COOKIES的内容?如果有无聊的人在访问你们网站时提交了假冒的COOKIE,那你们网站的REQUEST也就接受了该内容。所以过滤时别忘了把COOKIES也加进来。
另外,安全性防范在全面性方面肯定无法穷尽,所以请不要对外公开你们自己的安全性策略,以免引诱人家攻击你们的网站。
附上过滤代码以供参考:
Dim sql_injectdata,sql_inject, _Counting
sql_injectdata = "'|and|exec|insert|select|delete|update|count|*|cast|%|chr|mid|master|truncate|char|declare|;|--"
sql_inject = split(sql_injectdata,"|")
For Each GetString In Request.Form
for _Counting = 0 to ubound(sql_inject)
if InStr(lcase(request(GetString)), sql_inject(_Counting)) > 0 Then
Response.Write "<Script Language=JavaScript>window.close(); </Script>"
Response.End
End If
next
Next
For Each GetString In Request.QueryString
for _Counting = 0 to ubound(sql_inject)
If InStr(lcase(request(GetString)), sql_inject(_Counting)) > 0 Then
Response.Write " <Script Language=JavaScript>window.close(); </Script>"
Response.End
End If
Next
Next
For Each GetString In Request.Cookies
for _Counting = 0 to ubound(sql_inject)
If InStr(lcase(request(GetString)), sql_inject(_Counting)) > 0 Then
Response.Write " <Script Language=JavaScript>window.close(); </Script>"
Response.End
End If
Next
Next
- 如何预防SQL注入
- sql注入预防
- sql注入预防
- sql注入和预防
- 如何预防SQL注入,XSS漏洞(spring,java)
- 预防SQL注入漏洞函数
- 预防SQL注入式攻击
- Joomla中预防SQL注入
- PHP之预防sql注入
- 预防SQL注入 学习笔记
- [转]预防SQL注入漏洞函数
- 预防SQL注入式攻击(1)
- 预防SQL注入式攻击(2)
- 预防JSP的SQL注入问题
- 预防SQL注入攻击之我见
- 预防sql注入安全的函数
- PHP SQL注入攻击及其预防详解
- 预防sql注入安全的函数
- windows进程间通讯的方法
- 用request.files实现异文件上传(开放式上传)
- 写了一个自定义验证控件,不足之处希望大家指出
- Implement Interface Mechanism Using Templates
- 问题二,要想进外企,英语当然要硬,其他的要看你对数据结构的理解,先总结一下。类与结构的区别
- 如何预防SQL注入
- html js 常用
- Linux文件查找命令find,xargs详述
- 2009-04-13技术学习:Java 杨辉三角
- 出现 “严重: Error listenerStart”错误的解决
- 要想进外企,英语当然要硬,其他的要看你对数据结构的理解,先总结一下。问题三,关于数据结构
- C#连接数据库特殊方法两则
- Ajax 01
- 会话bean调用实体bean(同一工程目录下)