系统城装机大师 - 固镇县祥瑞电脑科技销售部宣传站!

当前位置:首页 > 网络知识 > 网络安全 > 详细页面

JS和C#分别防注入代码

时间:2020-02-02来源:系统城作者:电脑系统城

如果你的查询语句是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> 
登陆和密码输入判断 
//防止非法字符串注入 
function checkuseravoid(str){ 
var inj_str="‘|and|exec|insert|select|delete|update|count|*|%|chr|mid|master|truncate|char|declare|;|or|-|+|,"; 
var sarray=new Array(); 
sarray=inj_str.split('|'); 
for (var i=0 ;i <inj_stra.length ;i++ ) { 
if (str.indexOf(inj_stra)>=0) 
return true; 

return false; 

[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+"|"; 
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; 
分享到:

相关信息

系统教程栏目

栏目热门教程

人气教程排行

站长推荐

热门系统下载