1. public class XssFilter implements Filter {
  2. @Override
  3. public void destroy() {
  4.  
  5. }
  6.  
  7. /**
  8. * 过滤器用来过滤的方法
  9. */
  10. @Override
  11. public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
  12. throws IOException, ServletException {
  13. // 包装request
  14. XssHttpServletRequestWrapper xssRequest = new XssHttpServletRequestWrapper((HttpServletRequest) request);
  15. //实际设置
  16. HttpServletResponse xssResponse = (HttpServletResponse) response;
  17. xssResponse.setHeader("X-XSS-Protection", "1; mode=block");
  18. xssResponse.setHeader("X-Frame-Options", "SAMEORIGIN");
  19. xssResponse.setHeader("Strict-Transport-Security", "max-age=31536; includeSubDomains");
  20. // xssResponse.setHeader("Content-Security-Policy", "default-src 'self'");
  21. xssResponse.setHeader("X-Content-Type-Options", "nosniff");
  22. chain.doFilter(xssRequest, xssResponse);
  23. }
  24.  
  25. @Override
  26. public void init(FilterConfig filterConfig) throws ServletException {
  27.  
  28. }
  1. public class XssHttpServletRequestWrapper extends HttpServletRequestWrapper {
  2. HttpServletRequest orgRequest = null;
  3.  
  4. public XssHttpServletRequestWrapper(HttpServletRequest request) {
  5. super(request);
  6. }
  7.  
  8. /**
  9. * 覆盖getParameter方法,将参数名和参数值都做xss过滤。
  10. * 如果需要获得原始的值,则通过super.getParameterValues(name)来获取
  11. * getParameterNames,getParameterValues和getParameterMap也可能需要覆盖
  12. */
  13. @Override
  14. public String getParameter(String name) {
  15. String value = super.getParameter(xssEncode(name));
  16. if (value != null) {
  17. value = xssEncode(value);
  18. }
  19. return value;
  20. }
  21.  
  22. @Override
  23. public String[] getParameterValues(String name) {
  24. String[] value = super.getParameterValues(name);
  25. if (value != null) {
  26. for (int i = ; i < value.length; i++) {
  27. value[i] = xssEncode(value[i]);
  28. }
  29. }
  30. return value;
  31. }
  32.  
  33. @SuppressWarnings("rawtypes")
  34. @Override
  35. public Map getParameterMap() {
  36. return super.getParameterMap();
  37. }
  38.  
  39. /**
  40. * 将容易引起xss漏洞的半角字符直接替换成全角字符 在保证不删除数据的情况下保存
  41. *
  42. * @param s
  43. * @return 过滤后的值
  44. */
  45. private static String xssEncode(String value) {
  46. if (value == null || value.isEmpty()) {
  47. return value;
  48. }
  49. value = value.replaceAll("eval\\((.*)\\)", "");
  50. value = value.replaceAll("<","&lt;");
  51. value = value.replaceAll(">","&gt;");
  52. value = value.replaceAll("'","&apos;");
  53. value = value.replaceAll("[\\\"\\\'][\\s]*javascript:(.*)[\\\"\\\']", "\"\"");
  54. value = value.replaceAll("(?i)<script.*?>.*?<script.*?>", "");
  55. value = value.replaceAll("(?i)<script.*?>.*?</script.*?>", "");
  56. value = value.replaceAll("(?i)<.*?javascript:.*?>.*?</.*?>", "");
  57. value = value.replaceAll("(?i)<.*?\\s+on.*?>.*?</.*?>", "");
  58. // value = value.replaceAll("[<>{}\\[\\];\\&]","");
  59. return value;
  60. }
  61.  
  62. /**
  63. * 覆盖getHeader方法,将参数名和参数值都做xss过滤。 如果需要获得原始的值,则通过super.getHeaders(name)来获取
  64. * getHeaderNames 也可能需要覆盖 这一段代码在一开始没有注释掉导致出现406错误,原因是406错误是HTTP协议状态码的一种,
  65. * 表示无法使用请求的内容特性来响应请求的网页。一般是指客户端浏览器不接受所请求页面的 MIME 类型。
  66. **/
  67. @Override
  68. public String getHeader(String name) {
  69.  
  70. String value = super.getHeader(xssEncode(name));
  71. if (value != null) {
  72. value = xssEncode(value);
  73. }
  74. return value;
  75. }
  76.  
  77. }
  1. <!--解决xss漏洞-->
  2. <filter>
  3. <filter-name>XssFilter</filter-name>
  4. <filter-class>com.qls.XssFilter</filter-class>
  5. </filter>
  6. <filter-mapping>
  7. <filter-name>XssFilter</filter-name>
  8. <url-pattern>/*</url-pattern>
  9. </filter-mapping>

  

防止xss攻击的核心代码的更多相关文章

  1. PHP DDOS的UDP攻击,TCP攻击,和CC攻击的核心代码

    网络安全向,请勿用作非法用途 CC攻击模块: <?phpecho “状态 : 正常运行中…..<br>”;echo “================================ ...

  2. xss攻击和csrf攻击的定义及区别

    1.CSRF的基本概念.缩写.全称 CSRF(Cross-site request forgery):跨站请求伪造. PS:中文名一定要记住.英文全称,如果记不住也拉倒. 2.CSRF的攻击原理 用户 ...

  3. 【前端安全】JavaScript防XSS攻击

    什么是XSS XSS(Cross Site Scripting),跨站脚本攻击,是一种允许攻击者在另外一个用户的浏览器中执行恶意代码脚本的脚本注入式攻击.本来缩小应该是CSS,但为了和层叠样式(Cas ...

  4. Jsoup代码解读之六-防御XSS攻击

    Jsoup代码解读之八-防御XSS攻击 防御XSS攻击的一般原理 cleaner是Jsoup的重要功能之一,我们常用它来进行富文本输入中的XSS防御. 我们知道,XSS攻击的一般方式是,通过在页面输入 ...

  5. 防御XSS攻击的七条原则

    本文将会着重介绍防御XSS攻击的一些原则,需要读者对于XSS有所了解,至少知道XSS漏洞的基本原理,如果您对此不是特别清楚,请参考这两篇文章:<Stored and Reflected XSS ...

  6. 随便讲讲XSS攻击

    作为一个前端工程师,XSS漏洞不应该只是安全部门的工作.在项目上马的时候就应该对可能涉及的安全问题有所预防才是有一个好前端.- -   什么是XSS •跨站脚本攻击(Cross-site script ...

  7. 特殊字符的过滤,防止xss攻击

    概念 XSS攻击全称跨站脚本攻击,是为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS,XSS是一种在web应用中的计算机安全漏洞,它允 ...

  8. 跨站脚本功攻击,xss,一个简单的例子让你知道什么是xss攻击

    跨站脚本功攻击,xss,一个简单的例子让你知道什么是xss攻击 一.总结 一句话总结:比如用户留言功能,用户留言中写的是网页可执行代码,例如js代码,然后这段代码在可看到这段留言的不同一户的显示上就会 ...

  9. web安全之xss攻击

    xss攻击的全称是Cross-Site Scripting (XSS)攻击,是一种注入式攻击.基本的做法是把恶意代码注入到目标网站.由于浏览器在打开目标网站的时候并不知道哪些脚本是恶意的,所以浏览器会 ...

随机推荐

  1. python编辑用户登入界面

    1.需求分析 登入界面需要达到以下要求: 系统要有登入和注册两个选项可供选择 系统要能够实现登入出错提示,比如账户密码错误等,用户信息保存在user_info.txt文件夹中 系统要能够进行登入错误次 ...

  2. git blame 查看某行代码提交记录

    1. 在当前git项目目录下执行 git blame -L 38,38 <filename> 例子:  git blame -L 38,38 src/component/BarCode/i ...

  3. 启动tomcat时 一闪而过解决方法(2)

    下面我先跟大家确认一下问题出现的前提条件(本机版本java:1.6.20,tomcat:6.0.32) 1)在eclipse里面启动tomcat时都是正常的. 2)在系统中配置了各种环境变量如下: J ...

  4. hive 2以上版本启动异常 Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient

    hive2.0以上的版本启动时 抛出 “Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreCli ...

  5. POJ 3784 Running Median(动态维护中位数)

    Description For this problem, you will write a program that reads in a sequence of 32-bit signed int ...

  6. 【转】node.js框架比较

    我偶然间看到这篇文章,转这个文章并没有什么含义,仅仅是感觉总结的不错,对于新学node的友友们来说希望这篇文章为大家对 Node.js 后端框架选型带来一些帮助,学习不再迷茫,也是让我有个保存,以后参 ...

  7. 软工实践-Alpha 冲刺 (7/10)

    队名:起床一起肝活队 组长博客:博客链接 作业博客:班级博客本次作业的链接 组员情况 组员1(队长):白晨曦 过去两天完成了哪些任务 描述: 已经解决登录注册等基本功能的界面. 完成非功能的主界面制作 ...

  8. C语言问卷调查表

    你对自己的未来有什么规划?做了哪些准备?    对未来比较迷茫,现在的主要任务是学好专业课 你认为什么是学习?学习有什么用?现在学习动力如何?为什么?   活到老学到老,学习是一辈子的事.在学习的过程 ...

  9. 【week12】psp

    psp 项目 内容 开始时间 结束时间 被打断 净时间 12月2日 写博客 对各小组评价 11:20 12:05 0 45 写博客 final评价1 23:40 23:57 0 17 12月5日 看论 ...

  10. [转帖] 部分收费的Oracle JDK VS 完全免费的OpenJDK

    来源: http://www.flammulina.com/2018/10/28/%E9%83%A8%E5%88%86%E6%94%B6%E8%B4%B9%E7%9A%84oracle-jdk-vs- ...