(1)、网站留言板或者一些注册页面,未对用的输入做转义及过滤,攻击者可提交精心构造的恶意脚本,可破坏后台网页结构,xss恶意弹窗
解决方案:对链接,参数进行过滤
/// <summary>
/// 过滤特殊字符串,过滤html
/// </summary>
/// <param name="str"></param>
/// <returns></returns>
public string StringIllegalFormat(string str)
{
if (!string.IsNullOrEmpty(str))
{
str = str.Trim();
str = str.Replace("/", "?");
Regex reg1 = new Regex(@"<[\s]*?script[\s\S]+<[\s]*?/script[\s]*?>", RegexOptions.IgnoreCase);
str = reg1.Replace(str, "");
Regex reg2 = new Regex(@"javascript[\s]*?:[\S]*?\(\w*?\)[\;]*?", RegexOptions.IgnoreCase);
str = reg2.Replace(str, "");
Regex reg3 = new Regex(@"on[\S]*?[\s]*?=", RegexOptions.IgnoreCase);
str = reg3.Replace(str, "");
str = str.Replace("alert", "alert");
// 将输入字符串编码,这样所有的HTML标签都失效了。过滤Html标签
StringBuilder sb = new StringBuilder(
HttpUtility.HtmlEncode(str));
// 然后我们选择性的允许<b> 和 <i>
sb.Replace("<b>", "<b>");
sb.Replace("</b>", "");
sb.Replace("<i>", "<i>");
sb.Replace("</i>", "");
str = sb.ToString();
}
if (string.IsNullOrEmpty(str))
{
return "";
}
return str;
}
(2)、跨站点脚本编制
解决方案:对参数进行编码后,再进行解码
System.Web.HttpUtility.UrlEncode(参数) //编码
System.Web.HttpUtility.UrlDecode(Request["参数"]) //解码
(3)、SQL注入问题
尽量少用字符串拼接sql,使用参数