防范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注入式攻击代码:

  

  <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>

  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;

  填加:

  使用Html.Encode避免JavaScript注入攻击