经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 其他 » 网络安全 » 查看文章
.net解决Xss攻击
来源:cnblogs  作者:饮雪俊枫  时间:2018/9/25 20:02:35  对本文有异议

首先要明白什么是Xss攻击

XSS是一种经常出现在web应用中的计算机安全漏洞,它允许恶意web用户将代码植入到提供给其它用户使用的页面中。比如这些代码包括HTML代码和客户端脚本。攻击者利用XSS漏洞旁路掉访问控制——例如同源策略(same origin policy)。这种类型的漏洞由于被黑客用来编写危害性更大的网络钓鱼(Phishing)攻击而变得广为人知。对于跨站脚本攻击,黑客界共识是:跨站脚本攻击是新型的“缓冲区溢出攻击“,而JavaScript是新型的“ShellCode”。
数据来源:2007 OWASP Top 10的MITRE数据
注:OWASP是世界上最知名的Web安全与数据库安全研究组织
在2007年OWASP所统计的所有安全威胁中,跨站脚本攻击占到了22%,高居所有Web威胁之首。
XSS攻击的危害包括
1、盗取各类用户账号,如机器登录帐号、用户网银帐号、各类管理员帐号
2、控制企业数据,包括读取、篡改、添加、删除企业敏感数据的能力
3、盗窃企业重要的具有商业价值的资料
4、非法转账
5、强制发送电子邮件
6、网站挂马
7、控制受害者机器向其它网站发起攻击

1.MVC中

在html页面向 asp.net控制器发送请求的时候可能带有富文本信息 即html 结构的字符串,

会被认为是危险信息 导致请求失败

加上  [ValidateInput(false)]  就是跳过验证的意思;

如果需要在MVC中防范,就需要把这个标签给注释掉,就能起到防范Xss攻击的作用

2.如果是普通的结构,那么就需要编写一段过滤代码,或者在前端进行校验,验证不为Html语言即可

  1. /// <summary>
  2. /// 过滤xss攻击脚本
  3. /// </summary>
  4. /// <param name="input">传入字符串</param>
  5. /// <returns>过滤后的字符串</returns>
  6. public string FilterXSS(string html)
  7. {
  8. if (string.IsNullOrEmpty(html)) return string.Empty;
  9. // CR(0a) ,LF(0b) ,TAB(9) 除外,过滤掉所有的不打印出来字符.
  10. // 目的防止这样形式的入侵 <java\0script>
  11. // 注意:\n, \r, \t 可能需要单独处理,因为可能会要用到
  12. string ret = System.Text.RegularExpressions.Regex.Replace(
  13. html, "([\x00-\x08][\x0b-\x0c][\x0e-\x20])", string.Empty);
  14. //替换所有可能的16进制构建的恶意代码
  15. //<IMG SRC=&#X40&#X61&#X76&#X61&#X73&#X63&#X72&#X69&#X70&#X74&#X3A&#X61&_#X6C&#X65&#X72&#X74&#X28&#X27&#X58&#X53&#X53&#X27&#X29>
  16. string chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890!@#$%^&*()~`;:?+/={}[]-_|'\"\\";
  17. for (int i = 0; i < chars.Length; i++)
  18. {
  19. ret = System.Text.RegularExpressions.Regex.Replace(ret, string.Concat("(&#[x|X]0{0,}", Convert.ToString((int)chars[i], 16).ToLower(), ";?)"),
  20. chars[i].ToString(), System.Text.RegularExpressions.RegexOptions.IgnoreCase);
  21. }
  22. //过滤\t, \n, \r构建的恶意代码
  23. string[] keywords = {"javascript", "vbscript", "expression", "applet", "meta", "xml", "blink", "link", "style", "script", "embed", "object", "iframe", "frame", "frameset", "ilayer", "layer", "bgsound", "title", "base"
  24. ,"onabort", "onactivate", "onafterprint", "onafterupdate", "onbeforeactivate", "onbeforecopy", "onbeforecut", "onbeforedeactivate", "onbeforeeditfocus", "onbeforepaste", "onbeforeprint", "onbeforeunload", "onbeforeupdate", "onblur", "onbounce", "oncellchange", "onchange", "onclick", "oncontextmenu", "oncontrolselect", "oncopy", "oncut", "ondataavailable", "ondatasetchanged", "ondatasetcomplete", "ondblclick", "ondeactivate", "ondrag", "ondragend", "ondragenter", "ondragleave", "ondragover", "ondragstart", "ondrop", "onerror", "onerrorupdate", "onfilterchange", "onfinish", "onfocus", "onfocusin", "onfocusout", "onhelp", "onkeydown", "onkeypress", "onkeyup", "onlayoutcomplete", "onload", "onlosecapture", "onmousedown", "onmouseenter", "onmouseleave", "onmousemove", "onmouseout", "onmouseover", "onmouseup", "onmousewheel", "onmove", "onmoveend", "onmovestart", "onpaste", "onpropertychange", "onreadystatechange", "onreset", "onresize", "onresizeend", "onresizestart", "onrowenter", "onrowexit", "onrowsdelete", "onrowsinserted", "onscroll", "onselect", "onselectionchange", "onselectstart", "onstart", "onstop", "onsubmit", "onunload"};
  25. bool found = true;
  26. while (found)
  27. {
  28. var retBefore = ret;
  29. for (int i = 0; i < keywords.Length; i++)
  30. {
  31. string pattern = "/";
  32. for (int j = 0; j < keywords[i].Length; j++)
  33. {
  34. if (j > 0)
  35. pattern = string.Concat(pattern, '(', "(&#[x|X]0{0,8}([9][a][b]);?)?", "|(&#0{0,8}([9][10][13]);?)?",
  36. ")?");
  37. pattern = string.Concat(pattern, keywords[i][j]);
  38. }
  39. string replacement = string.Concat(keywords[i].Substring(0, 2), "<x>", keywords[i].Substring(2));
  40. ret = System.Text.RegularExpressions.Regex.Replace(ret, pattern, replacement, System.Text.RegularExpressions.RegexOptions.IgnoreCase);
  41. if (ret == retBefore)
  42. found = false;
  43. }
  44. }
  45. return ret;
  46. }

 

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号