解决ASP防SQL注入攻击程序问题
现在比较流行的SQL注入工具的工作方式是通过GET和POST来完成具体的注入。我们可以将注入时所用到的一切符号过滤掉。那么我们可以通过简单的判断语句来达到目的。我们先来过滤GET吧。
代码如下:
dim sql_injdata SQL_inj SQL_Get
SQL_injdata = "’|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 "<Script Language=JavaScript>alert(’请不要在参数中包含非法字符尝试注入!’);history.back(-1)</Script>"
Response.end
end if
next
Next
End If
这样我们通过简单的语句我们就把一些注入所必须的语句和符号过滤掉了。非常小巧灵便,只要插到像conn.asp这样类似被调用比较广泛的页面中。同样POST我们也可以通过如下代码过滤,我们可以将两段代码整和到一起。
我们来看看代码吧:
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 "<Script Language=JavaScript>alert(’请不要在参数中包含非法字符尝试注入! ’);history.back(-1)</Script>"
Response.end
end if
next
next
end if
网上又流行一个加强版的ASP防注代码。
代码如下:
<%
'ASP防注入之解决方案
'特殊页面处理
'因为有些页通过流式传递(比如含有文件上传的表单)
'如果单一使用穷举Form对象的操作就会出错
'所以要把这些页面过滤出来,同时在页面中使用sql("检测的字串")才行
'将本页用include方法放在头部以让所有页都可以调用,比如include在conn.asp里
'如果有流式上传的页面请把该页加到表page中,以防form冲突
Dim N_no,N_noarray,req_Qs,req_F,N_i,N_dbstr,Conn,N_rs,N_userIP,N_thispage
N_userip = Request.ServerVariables("REMOTE_ADDR")
N_thispage = LCase(Request.ServerVariables("URL"))
N_no = "'|;|and|exec|insert|select|delete|update|count|*|%|chr|mid|master|truncate|char|declare" '可以自己
相关文档:
这里介绍sql server2005里面的一个使用实例:
CREATE TABLE tb(province nvarchar(10),city nvarchar(10),score int)
INSERT tb SELECT '陕西','西安',3
UNION ALL SELECT '陕西','安康',4
UNION ALL SELECT '陕西','汉中',2
UNION ALL SELECT '广东','广州',5
UNION ALL SELECT '广东','珠海',2
UNION ......
我们在做很多项目时都要涉及到数据库,特别是一些比较大型的web项目,更是有较大的并发处理,所以对数据库的操作有可能会产生死锁,对于数据库的死锁,一般数据库系统都会有一套机制去解锁,一般不会造成数据库的瘫痪,但解锁的过程会造成数据库性能的急速下降,反映到程序上就会造成程序的反应性能的下降,并 ......
此部分内容创建一个轻量级T-SQL测试套件,总共有3个脚本:
用于创建测试平台数据和待测存储过程的脚本
--======================
--makeDbTestAndResults.sql
use master
go
if exists (select * from sysdatabases where name = 'DbTestAndResults')
drop database makeDbTes ......
温故而知新,果然如此呀,第二次再翻开同样的内容果然有不同的收获,有些是第一次看的时候没有仔细理解的,还有些可能是在第一次看匆匆就跳过的,当然,可能还有部分是自己当时记住了完了又给忘记了。今天第二次看到子程序这一章节,发现了些新的内容,呵呵。在这里我就写下一些基本内容和容易忘记的,免得下次又给忘了。内 ......