网站如何防SQL注入

网站如何防SQL注入,第1张

分类: 电脑/网络 >>程序设计 >>其他编程语言

问题描述:

小弟是新手,请大家提供些方法。

解析:

试试这两种方法:

第一种:

squery=lcase(Request.ServerVariables("QUERY_STRING"))

sURL=lcase(Request.ServerVariables("HTTP_HOST"))

SQL_injdata =":||>|<|--|sp_|xp_|\|dir|cmd|^|(|)|+|$|'|copy|format|and|exec|insert|select|delete|update|count|*|%|chr|mid|master|truncate|char|declare"

SQL_inj = split(SQL_Injdata,"|")

For SQL_Data=0 To Ubound(SQL_inj)

if instr(squery&sURL,Sql_Inj(Sql_DATA))>0 Then

Response.Write "SQL通用防注入系统"

Response.end

end if

next

第二种:

SQL_injdata =":||>|<|--|sp_|xp_|\|dir|cmd|^|(|)|+|$|'|copy|format|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 "SQL通用防注入系统"

Response.end

end if

next

Next

End If

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 "SQL通用防注入系统"

Response.end

end if

next

next

end if

第三种

<%

'--------定义部份------------------

Dim Str_Post,Str_Get,Str_In,Str_Inf,Str_Xh,Str_db,Str_dbstr

'自定义需要过滤的字串,用 "■"分离

Str_In = "'■■and■exec■insert■select■delete■update■count■*■%■chr■mid■master■truncate■char■declare"

'----------------------------------

%>

<%

Str_Inf = split(Str_In,"■")

'--------POST部份------------------

If Request.Form<>"" Then

For Each Str_Post In Request.Form

For Str_Xh=0 To Ubound(Str_Inf)

If Instr(LCase(Request.Form(Str_Post)),Str_Inf(Str_Xh))<>0 Then

'--------写入数据库----------头-----

Str_dbstr="DBQ="+server.mappath("SqlIn.mdb")+"DefaultDir=DRIVER={Microsoft Access Driver (*.mdb)}"

Set Str_db=Server.CreateObject("ADODB.CONNECTION")

Str_db.open Str_dbstr

Str_db.Execute("insert into SqlIn(Sqlin_IP,SqlIn_Web,SqlIn_FS,SqlIn_CS,SqlIn_SJ) values('"&Request.ServerVariables("REMOTE_ADDR")&"','"&Request.ServerVariables("URL")&"','POST','"&Str_Post&"','"&replace(Request.Form(Str_Post),"'","''")&"')")

Str_db.close

Set Str_db = Nothing

'--------写入数据库----------尾-----

Response.Write "<Script Language=JavaScript>alert('请不要在参数中包含非法字符尝试注入!')</Script>"

Response.Write "非法 *** 作!系统做了如下记录:<br>"

Response.Write " *** 作IP:"&Request.ServerVariables("REMOTE_ADDR")&"<br>"

Response.Write " *** 作时间:"&Now&"<br>"

Response.Write " *** 作页面:"&Request.ServerVariables("URL")&"<br>"

Response.Write "提交方式:POST<br>"

Response.Write "提交参数:"&Str_Post&"<br>"

Response.Write "提交数据:"&Request.Form(Str_Post)

Response.End

End If

Next

Next

End If

'----------------------------------

'--------GET部份-------------------

If Request.QueryString<>"" Then

For Each Str_Get In Request.QueryString

For Str_Xh=0 To Ubound(Str_Inf)

If Instr(LCase(Request.QueryString(Str_Get)),Str_Inf(Str_Xh))<>0 Then

'--------写入数据库----------头-----

Str_dbstr="DBQ="+server.mappath("SqlIn.mdb")+"DefaultDir=DRIVER={Microsoft Access Driver (*.mdb)}"

Set Str_db=Server.CreateObject("ADODB.CONNECTION")

Str_db.open Str_dbstr

Str_db.Execute("insert into SqlIn(Sqlin_IP,SqlIn_Web,SqlIn_FS,SqlIn_CS,SqlIn_SJ) values('"&Request.ServerVariables("REMOTE_ADDR")&"','"&Request.ServerVariables("URL")&"','GET','"&Str_Get&"','"&replace(Request.QueryString(Str_Get),"'","''")&"')")

Str_db.close

Set Str_db = Nothing

'--------写入数据库----------尾-----

Response.Write "<Script Language=JavaScript>alert('请不要在参数中包含非法字符尝试注入!)</Script>"

Response.Write "非法 *** 作!系统做了如下记录:<br>"

Response.Write " *** 作IP:"&Request.ServerVariables("REMOTE_ADDR")&"<br>"

Response.Write " *** 作时间:"&Now&"<br>"

Response.Write " *** 作页面:"&Request.ServerVariables("URL")&"<br>"

Response.Write "提交方式:GET<br>"

Response.Write "提交参数:"&Str_Get&"<br>"

Response.Write "提交数据:"&Request.QueryString(Str_Get)

Response.End

End If

Next

Next

End If

%>

第3中方法需要你自己建个数据库表

sql注入其实就是在这些不安全控件内输入sql或其他数据库的一些语句,从而达到欺骗服务器执行恶意到吗影响到数据库的数据。防止sql注入,可以在接受不安全空间的内容时过滤掉接受字符串内的“'”,那么他不再是一条sql语句,而是一个类似sql语句的zifuc,执行后也不会对数据库有破坏。

如:

username = request("username") //获取用户名 这里是通过URL传值获取的。

password = request("password") //获取密码 也是通过URL传值获取的。

sql="select * from userlist where username = '" &username &"' and password = '" &password &"'"--------如果某个人知道某个用户名是admin,常常有人网站的管理员用户名就是admin,这是密码可以选用'or 1 or ',

那么sql="select * from userlist where username = 'admin' and password = '' or 1 or ''",显然1是恒真的,那么验证密码就通过了。

防止的方式比较多,比如可以限制username,password中出现"'"这些字符,一般网站都是只允许数字,字符,下划线的组合,这可以通过javascript验证。也可以采取用存储过程代替sql拼接,等等。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11515094.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-16
下一篇 2023-05-16

发表评论

登录后才能评论

评论列表(0条)

保存