时间:2021-07-01 10:21:17 帮助过:40人阅读
输出的结果,我不说大家也知道!
public static string StringFilters(string input)
{
if (string.IsNullOrEmpty(input))
return input;
/*跨站攻击过虑*/
input = input.Replace("", "&#");//过滤 攻击方式javascript:alert('XSS')
input = Regex.Replace(input, @"javascript:", "Javascript:", RegexOptions.IgnoreCase);//过滤JS 攻击方式:javascript:alert('XSS');
input = Regex.Replace(input, @"vbscript:", "Vbscript:", RegexOptions.IgnoreCase);//过滤JS 攻击方式:vbscript:msgbox('XSS');
input = Regex.Replace(input, @"j *a *v *a *s *c *r *i *p *t:", "Vbscript:", RegexOptions.IgnoreCase);//攻击方式:java script:alert('XSS');
input = Regex.Replace(input, @"\/\*[sS]*\*\/", "<!-- code -->", RegexOptions.IgnoreCase);
input = Regex.Replace(input, @"expression", "expression", RegexOptions.IgnoreCase);
input = Regex.Replace(input, @"<[\u0020]*style[^>]*>", "S:yle", RegexOptions.IgnoreCase);
input = Regex.Replace(input, @"<[^>]*object[^>]*>", "objec&$58", RegexOptions.IgnoreCase);//攻击方式 <OBJECT TYPE="text/x-scriptlet" DATA="http://www.cnblog.cn"></OBJECT> 注意,这样过滤后将无法使用FLASH
/*各种事件过滤*/
input = Regex.Replace(input, @"<[^>]*[\u0020]+on[A-Za-z]{3,20}[\u0020]*=[\u0020]*[^>]*>", "Js Event", RegexOptions.IgnoreCase);//
input = input.Replace("'", "'");//单引号防止SQL注入
input = Regex.Replace(input, @"script", "Script", RegexOptions.IgnoreCase);//防止脚本攻击
input = Regex.Replace(input, @"frame", "frame", RegexOptions.IgnoreCase);//防止iframe 挂马
input = Regex.Replace(input, @"form", "form", RegexOptions.IgnoreCase);//禁止表单提交
input = Regex.Replace(input, @"meta", "meta", RegexOptions.IgnoreCase);//防止用使meta跳转到非法网页
return input;
}
补充一下,过滤千万不要把字符串过虑成空,这样同样存在安全问题,必须过虑成另外一个字符串,比如过滤你好,那么用户可以构建这样一个字符“你你好好”,通过Replace("你好","")之后,