当前位置:首页 » 编程语言 » sql字符串过滤

sql字符串过滤

发布时间: 2022-11-17 10:23:21

‘壹’ sql字符串过滤 检测是否有危险字符

SQL字符串过滤函数:

public static bool ProcessSqlStr(string Str)
{
bool ReturnValue = true;
try
{
if (Str.Trim() != "")
{
string SqlStr = "exec|insert+|select+|delete|update|count|chr|mid|master+|truncate|char|declare|drop+|drop+table|creat+|create|*|iframe|script|";
SqlStr += "exec+|insert|delete+|update+|count(|count+|chr+|+mid(|+mid+|+master+|truncate+|char+|+char(|declare+|drop+table|creat+table";
string[] anySqlStr = SqlStr.Split('|');
foreach (string ss in anySqlStr)
{
if (Str.ToLower().IndexOf(ss) >= 0)
{
ReturnValue = false;
break;
}
}
}
}
catch
{
ReturnValue = false;
}
return ReturnValue;
}

以下是检测SQL语句中是否包含有非法危险的字符:

/// <summary>
/// 检测是否有Sql危险字符
/// </summary>
/// <param name="str">要判断字符串</param>
/// <returns>判断结果</returns>
public static bool IsSafeSqlString(string str)
{
return !Regex.IsMatch(str, @"[-|;|,|\/|\(|\)|\[|\]|\}|\{|%|@|\*|!|\']");
}
/// <summary>
/// 改正sql语句中的转义字符
/// </summary>
public static string mashSQL(string str)
{
string str2;
if (str == null)
{
str2 = "";
}
else
{
str = str.Replace("\'", "'");
str2 = str;
}
return str2;
}

‘贰’ SQL怎么筛选出字符串中指定规则的字符

可用substring函数来查询。

比如表中有如下数据:

现在要查询第二位字符为“s”的数据,可用如下语句:

select * from test where substring(STR,2,1)='s'
结果截图:

substring函数说明:

substring函数需要三个参数,其中第一个参数是要截取的字符串,第二个参数是要查询字符串的起始位,第三个参数为截取的字符长度。

‘叁’ SQL注入 当or、and等常用字符被过滤(less-25)

当常用字符被注释无法使用时,通常采取以下方法(可自行搜索sql注入绕开过滤等):

如:Or、OR、oR等

如:通过hex、urlencode、url等编码
举例:如果or被过滤时,我们可以采用url编码(其相当于把ascii编码的0x给替换成%,比如o的ascii为0x6f,url编码就是%6f),这个时候我们可以试试%6fr,即把o换成url编码,也可以全换,也可以大小写的换,如果没被过滤就成功了,(如果%被过滤了的话…)
【注:这个可以积极的去使用,比如测试时and被注释,使用&&替换也失败,这个时候不妨试试%26%26(&的url编码)】

如: /* */ (这个不止可以应对字母被注释)
举例:某个过滤器能够过滤的字符如下——“select ”、”from ”、”limit ”等,注意这些字符最后面都有一个空格,这个时候我们就能通过内联注释来绕过这个过滤器,如:

【注:这个注释甚至可以穿插在关键字当中,例如被过滤了or,我们可以把 order by 改成 o/**/rder by ,参考的资料上是这么说,但本人试了没成功,不知是否依旧实用】

比如or被过滤了,我们可以往里面加or,即注入:oorr,这个时候里面的or就被删去了,剩下的组成新字符,也就是or,是个很好用的绕过方法,像这种类似的还有很多,需要我们去思考

如:&&、||
举例:

如盲注时经常用到比较,这时候要是比较符号被注释了不能用平常的方法了,所以需要用某些函数如 greatest() 【 greatest(n1,n2,n3,...) 函数返回输入参数(n1,n2,n3,...)的最大值】、least()等,比如语句: select * from users where id=1 and ascii(substr(database(),0,1))>64 就可以替换成 select * from users where id=1 and greatest(ascii(substr(database(),0,1)),64)=64
【注:当or被注释时,像order by这种含有相关字符的语句也同样无法使用,这个时候如果改变大小写也无用时,可以使用上述的内联注释 /**/ ,或者用别的编码形式,如果不行的话,那就只能放弃使用order by,可以尝试使用group by语句等】

‘肆’ SQL 过滤字符字段值

select * from spk where isnumeric(spbh)=0

解释:
ISNUMERIC

确定表达式是否为一个有效的数字类型。

语法

ISNUMERIC ( expression )

参数

expression

要计算的表达式。

返回类型

int

注释

当输入表达式得数为一个有效的整数、浮点数、money 或 decimal 类型,那么 ISNUMERIC 返回 1;否则返回 0。返回值为 1 确保可以将 expression 转换为上述数字类型中的一种。

‘伍’ 求过滤SQL非法字符的函数

Function CheckSql() '防止SQL注入
Dim sql_injdata
SQL_injdata = "'|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 "<Script Language='javascript'>{alert('请不要在参数中包含非法字符!');history.back(-1)}</Script>"
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 "<Script Language='javascript'>{alert('请不要在参数中包含非法字符!');history.back(-1)} </Script>"
Response.end
end if
next
next
end if
End Function

‘陆’ sql 查询语句中如何过滤指定的字符

1、语句:SELECT * FROM dbo.Procts WHERE prod_name='king doll' AND prod_price>8。

--检索dbo.Procts表中所有列,过滤条件为由供应商king doll制造价格大于8的所有商品。

注意:--后面的字符是这条语句的注释,这条语句有两个条件,分别用AND关键字联接在一起,并且过滤结果必须满足这两个条件,如果只满足其中一个该数据不会被检索出来。

2、OR操作符(或)

语句:SELECT * FROM dbo.Procts WHERE prod_name='king doll' OR prod_price>8。

--检索dbo.Procts表中所有列,过滤条件为由供应商king doll制造价格大于8的所有商品值。

注意:--这里要说明的是OR操作符与AND操作符的不同之处是只要满足其中一个条件,数值就会被检索出来,例如:由供应商king doll制造价格小于8商品或者由供应商king add制造价格大于8的商品只要其中一个条件符合,数据就被检索出来。

3、IN操作符(指定条件范围)

语句:SELECT * FROM dbo.Procts WHERE prod_name IN ('king doll' ,'Queen dool')。

--检索dbo.Procts表中所有列,过滤条件为由供应商king doll和Queen dool制造的商品。

注意:它的功能其实和OR一样,但是它的执行速度会更快并且简洁,最大的优点是可以包含其他SELECT语句,能够更动态地建立WHERE字句。

‘柒’ sql中筛选出一列中同时不含有某两个字符串的语句

1、首先新建一个test数据库,在数据库里新建一张type表,里面插入三条测试数据。

‘捌’ 如何筛选SQL字符串字段中部分值

一、先说筛选字符串字段中部分值的记录。
例如我有一个KKBH(卡口编号)字段,这是一个字典字段(对应另一个实体表(卡口表)的编号字段)。这个字段的值保存所属卡口值域{01,02,03}
本来想到的是通过or来实现,这样需要动态生成SQL语句。
后来想到一个办法用charindex搜索字符串的办法。将所有的要查的卡口编号组成类似'01@02'这样待查字符串。sql查询时通过charindex筛选出在待查字符串里有的KKBH的记录。
经测试使用or与使用charindex,两者在MSSQL中执行效率差不多。
具体实现:
用户界面查询需求:可能搜索N个卡口的记录(N的值域{1,所有卡口个数})。设计这个UI的形式一共三种:
一、一个多选listbox。用户界面运行时将卡口字典表载入listbox信息。
二、两个listbox,左边为待选,右边为已选,中间加两个按钮添加与删除。用户界面运行时将卡都字典表载入左边的listbox。
三、多个Checkbox。可以在界面设计阶段直接做死字典表,即有几个卡口就话几个checkbox。或者在程序运行根据字典表绘制动态绘制checkbox。
UI的优缺点这里不讨论,我这里选择第三种方式的动态绘制。
在查询阶段根据所选卡口生成待选字符串入:"01@02”
并将此条件传回后台查询服务程序
后台查询服务里只要待查字符串作为参数传入查询的SQL语句中(sql片段): charindex(卡口编号,@待查字符串)。当然也可以手动生成SQL方式传入"charindex(卡口编号,'"+待查字符串+"')".

二、模糊查询。
使用like的模糊查询发生效率是很低。
提高的解决办法与:
一、用full text index 结合contains函数。全文本索引,带了空间占用率很高。
二、通过charindex+substring实现简易模糊查询。使用substring分段,charindex实现类似like '%关键字%'。

‘玖’ 防sql注入到底应过滤哪些字符

一般来说,这样处理即可:
所有参数都当作字符串处理,用单引号括起来。另外就是要把字符串中的单引号替换掉。

‘拾’ sql 查询语句中 如何过滤 指定的字符

sqlserver:
select REPLACE(字段名1,'湖南省','')
上面 湖南省为要替换的字符串,''为要替换的内容

热点内容
oicq服务器地址 发布:2025-01-13 17:34:19 浏览:928
默认管理密码是什么 发布:2025-01-13 17:33:33 浏览:443
系列影视广告文案脚本 发布:2025-01-13 17:31:57 浏览:792
防盗器编程 发布:2025-01-13 17:24:39 浏览:899
联通电信服务器怎么不卡顿 发布:2025-01-13 17:21:30 浏览:820
科沃兹低配可以升级哪些配置 发布:2025-01-13 17:09:26 浏览:329
android判断数据库是否存在 发布:2025-01-13 17:08:17 浏览:333
ie脚本运行错误 发布:2025-01-13 17:08:05 浏览:623
python中或者怎么表示 发布:2025-01-13 16:32:33 浏览:291
易达加密锁 发布:2025-01-13 16:27:23 浏览:516