当前位置:首页>>开发编程>>ASP>>新闻内容  
防范SQL注入攻击的ASP代码
作者: 发布时间:2005-4-3 14:00:53 | 【字体:
 SQL注入式攻击是利用是指利用设计上的漏洞,在目标服务器上运行Sql命令以及进行其他方式的攻击,动态生成Sql命令时没有对用户输入的数据进行验证是Sql注入攻击得逞的主要原因。比如:

   如果你的查询语句是select * from admin where username='"&user&"' and password='"&pwd&"'"

   那么,如果我的用户名是:1' or '1'='1

   那么,你的查询语句将会变成:

select * from admin where username='1 or '1'='1' and password='"&pwd&"'"

   这样你的查询语句就通过了,从而就可以进入你的管理界面。

   所以防范的时候需要对用户的输入进行检查。特别式一些特殊字符,比如单引号,双引号,分号,逗号,冒号,连接号等进行转换或者过滤。

   需要过滤的特殊字符及字符串有:

net user
xp_cmdshell
/add
exec master.dbo.xp_cmdshell
net localgroup administrators
select
count
Asc
char
mid
'
:
"
insert
delete from
drop table
update
truncate
from
%
   下面是我写的两种关于解决注入式攻击的防范代码,供大家学习参考!

   js版的防范SQL注入式攻击代码~:

[CODE START]  
<script language="javascript">
<!--
var url = location.search;
var re=/^\?(.*)(select%20|insert%20|delete%20from%20|count\(|drop%20table
   |update%20truncate%20|asc\(|mid\(|char\(|xp_cmdshell|exec%20master
   |net%20localgroup%20administrators|\"|:|net%20user|\'|%20or%20)(.*)$/gi;
var e = re.test(url);
if(e) {
alert("地址中含有非法字符~");
location.href="error.asp";
}
//-->
<script>
[CODE END]
   asp版的防范SQL注入式攻击代码~:

[CODE START]
<%
On Error Resume Next
Dim strTemp

If LCase(Request.ServerVariables("HTTPS")) = "off" Then
strTemp = "http://"
Else
strTemp = "https://"
End If

strTemp = strTemp & Request.ServerVariables("SERVER_NAME")
If Request.ServerVariables("SERVER_PORT") <> 80 Then strTemp = strTemp & ":" & Request.ServerVariables("SERVER_PORT")

strTemp = strTemp & Request.ServerVariables("URL")

If Trim(Request.QueryString) <> "" Then strTemp = strTemp & "?" & Trim(Request.QueryString)

strTemp = LCase(strTemp)

If Instr(strTemp,"select%20") or Instr(strTemp,"insert%20") or Instr(strTemp,"delete%20from") or Instr(strTemp,"count(") or Instr(strTemp,"drop%20table") or Instr(strTemp,"update%20") or Instr(strTemp,"truncate%20") or Instr(strTemp,"asc(") or Instr(strTemp,"mid(") or Instr(strTemp,"char(") or Instr(strTemp,"xp_cmdshell") or Instr(strTemp,"exec%20master") or Instr(strTemp,"net%20localgroup%20administrators") or Instr(strTemp,":") or Instr(strTemp,"net%20user") or Instr(strTemp,"'") or Instr(strTemp,"%20or%20") then
Response.Write "<script language='javascript'>"
Response.Write "alert('非法地址!!');"
Response.Write "location.href='error.asp';"
Response.Write "<script>"
End If
%>
[CODE END]
   C# 检查字符串,防SQL注入攻击

   这个例子里暂定为=号和'号

bool CheckParams(params object[] args)
{
  string[] Lawlesses={"=","'"};
  if(Lawlesses==null||Lawlesses.Length<=0)return true;
  //构造正则表达式,例:Lawlesses是=号和'号,则正则表达式为 .*[=}'].* (正则表达式相关内容请见MSDN)
  //另外,由于我是想做通用而且容易修改的函数,所以多了一步由字符数组到正则表达式,实际使用中,直接写正则表达式亦可;

  String str_Regex=".*[";
  for(int i=0;i< Lawlesses.Length-1;i++)
   str_Regex+=Lawlesses[i]+"|";
   str_Regex+=Lawlesses[Lawlesses.Length-1]+"].*";
   //
   foreach(object arg in args)
   {
    if(arg is string)//如果是字符串,直接检查
    {
     if(Regex.Matches(arg.ToString(),str_Regex).Count>0)
     return false;
    }
    else if(arg is ICollection)
     //如果是一个集合,则检查集合内元素是否字符串,是字符串,就进行检查
    {
     foreach(object obj in (ICollection)arg)
     {
      if(obj is string)
      {
       if(Regex.Matches(obj.ToString(),str_Regex).Count>0)
        return false;
      }
     }
    }
   }
   return true;
文章来源:
·用ASP屏蔽迅雷和旋风下载工具的P2P下载
·解决ASP中传送中文参数乱码的问题
·ASP+AJAX做类似Google的搜索提示
·ASP的一个非常棒的Debug类(VBScript)
·ASP中常用的服务器检测源代码
·优化ASP中执行SQL效率的五个方法
·ASP种msxml3.dll 800c0005错误的另一解决方法
·挂QQ的ASP版本网页源代码
·ASP的escape和unescape函数
·使用AspUpload组件上传事例代码
 放生
 愚爱
 够爱
 触电
 白狐
 葬爱
 光荣
 画心
 火花
 稻香
 小酒窝
 下雨天
 右手边
 安静了
 魔杰座
 你不像她
 边做边爱
 擦肩而过
 我的答铃
 怀念过去
 等一分钟
 放手去爱
 冰河时代
 你的承诺
 自由飞翔
 原谅我一次
 吻的太逼真
 左眼皮跳跳
 做你的爱人
 一定要爱你
 飞向别人的床
 爱上别人的人
 感动天感动地
 心在跳情在烧
 玫瑰花的葬礼
 有没有人告诉你
 即使知道要见面
 爱上你是一个错
 最后一次的温柔
 爱上你是我的错
 怎么会狠心伤害我
 不是因为寂寞才想
 亲爱的那不是爱情
 难道爱一个人有错
 寂寞的时候说爱我