App_Code/checksql.cs
(完整代码) 2KBusing System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Collections.Specialized;
/// <summary>
///checksql 的摘要说明
/// </summary>
public class CheckSql
{
public static bool check(NameValueCollection FormNV, NameValueCollection QueryNV)
{
string Fy_getIn, Fy_postIn;
int i;
bool SqlIn=false;
Fy_getIn = "exec|insert|select|delete|update|master|truncate|declare|chr|char|mid|*|#|%";//get方法要过滤的 xtype=char(85)
//%53为大写的S %73为小写的s,都是十六进制的
Fy_postIn = "exec|insert|select|delete|update|master|truncate|declare";//post方法要过滤的
string[] Fy_postInf = Fy_postIn.Split('|');//分离攻击post字符
string[] Fy_getInf = Fy_getIn.Split('|');//分离攻击get字符
//=============================post=================
if (FormNV.Count != 0)
{
foreach (string Fy_Post in FormNV.Keys)
{
for (i = 0; i < Fy_postInf.GetUpperBound(0); i++)//判断是否为sql注入 单词GetUpperBound可以获取数组的最高下标。GetLowerBound可以获取数组的最低下标。0表示二维数组的第一维,1表示数组的第二维
if (FormNV[Fy_Post].IndexOf(Fy_postInf[i].ToLower()) != -1)
{
SqlIn=true;break;//POST方法存在SQL关键字
}
}
}
//================get====
if (QueryNV.Count != 0&&!SqlIn)
{
foreach (string Fy_Get in QueryNV.Keys)
{
for (i = 0; i < Fy_getInf.GetUpperBound(0); i++)//判断是否为sql注入单词,如果是则保存攻击信息
if (QueryNV[Fy_Get].ToLower().IndexOf(Fy_getInf[i].ToLower()) != -1)//QueryNV[Fy_Get]会把%53变成S,所以也需要使用ToLower函数。
{
SqlIn=true;break;//GET方法存在SQL关键字
}
}
}
return SqlIn;
}
}
24 小时内免费解锁 3 个项目,之后 1 积分/个。 规则说明
AI 解读
登录后可用,每次 10 积分,解读结果公开显示在下面。
还没有人解读过这个文件。
