asp.net 验证非法字符的时候会验证是否输入一些特殊字符。如下代码
/// <summary> /// 检测是否有Sql危险字符 /// </summary> /// <param name="str">要判断字符串</param> /// <returns>判断结果</returns> public static bool IsSafeSqlString(string str) { return !Regex.IsMatch(str, @"[-|;|,|\/|\(|\)|\[|\]|\}|\{|%|@|\*|!|\']"); }
这里会验证一些 SQL 方面的非法字符。比如 中划线 "-" 但是我们有时候确实需要输入带有中划线的字符。比如电话号码 0755-XXXXXXXX 这样的字符。如果使用了这个验证的话。将无法通过验证也就提交不了资料。如果不验证,那也就可以输入任何内容,会降低系统安全性。还望各位大侠指定。
存数据的时候使用sqlparams,就算输入特殊字符也是安全的
但是有时候 我们难免会使用一些参数的时候。不能使用这种 SqlParamters 的形式。如何处理。
@yzy: 只要不存在安全性的特殊字符就可以了,‘-’字符好像是不影响的,以前知道一些,现在也忘了。不能帮上忙哦!
@yzy: 貌似我说错了,是做查询的时候最好是用参数形式做查询。输入某些特殊字符时,能查询出某些不能暴露的信息。I am so sorry!我觉得你可以做一些特殊处理,当某些字段必须要某个字符的时候可以将那个正则表达式中的那个字符去掉。
一下代码是我用的在必须组装SQL语句时检测危险字符的方法,希望对你有帮组
namespace YQSH.EIMS
{
using System;
public class SqlPourInto
{
private System.Collections.Specialized.NameValueCollection Param;
public SqlPourInto(System.Collections.Specialized.NameValueCollection param)
{
this.Param = param;
}
public bool HandleParam()
{
if (Param.Count == 0)
return true;
for (int i = 0; i < Param.Count; i++)
if (!IsSafeString(Param[i].ToString()))
return false;
return true ;
}
public bool IsSafeString(string strText)
{
bool bResult = true;
strText = System.Text.RegularExpressions.Regex.Replace(strText, "(<[b|B][r|R]/*>)+|(<[p|P](.|\\n)*?>)", "\n"); //<br>
string[] UnSafeArray = new string[23];
UnSafeArray[0] = "'";
UnSafeArray[1] = "xp_cmdshell ";
UnSafeArray[2] = "declare ";
UnSafeArray[3] = "netlocalgroupadministrators ";
UnSafeArray[4] = "delete ";
UnSafeArray[5] = "truncate ";
UnSafeArray[6] = "netuser ";
UnSafeArray[7] = "add ";
UnSafeArray[8] = "drop ";
UnSafeArray[9] = "update ";
UnSafeArray[10] = "select ";
UnSafeArray[11] = "union ";
UnSafeArray[12] = "exec ";
UnSafeArray[13] = "create ";
UnSafeArray[14] = "insertinto ";
UnSafeArray[15] = "sp_ ";
UnSafeArray[16] = "exec ";
UnSafeArray[17] = "create ";
UnSafeArray[18] = "insert ";
UnSafeArray[19] = "masterdbo ";
UnSafeArray[20] = "sp_ ";
UnSafeArray[21] = ";-- ";
UnSafeArray[22] = "1= ";
foreach (string strValue in UnSafeArray)
{
if (strText.ToLower().IndexOf(strValue) > -1)
{
bResult = false;
break;
}
}
return bResult;
}
}
}