什么是XSS攻击?
XSS攻击使用Javascript脚本注入进行攻击

XSS攻击常出现在提交表单中,如博客的评论区等,用户可以通过提交评论:,那么只要访问该页面的用户都会弹窗,当然,这可能是为了娱乐娱乐,不要小看XSS攻击,有些人利用XSS攻击窃取用户名密码,调用黑客的工程,将用户名和密码发送过去,也可以伪装成钓鱼网站。

例如在表单中注入: 那么页面会跳转到xxx.com

还可以根据js获取本地浏览器的cookie信息,根据cookie信息完全可以模拟用户。

那么该如何防止XSS攻击呢?
实现思路:

使用转义解决。将<转义为&lt >转义为&gt

①使用过滤器,拦截所有请求,重写request

②重写获取值的方法,将特殊代码转换成html


import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import org.apache.commons.lang.StringUtils;import com.jeecms.core.web.util.URLHelper;public class XssFilter implements Filter {/*** 排除链接*/public List<String> excludes = new ArrayList<String>();private String filterChar;private String replaceChar;private String splitChar;private String excludeUrls;FilterConfig filterConfig = null;@Overridepublic void init(FilterConfig filterConfig) throws ServletException {this.filterChar=filterConfig.getInitParameter("FilterChar");this.replaceChar=filterConfig.getInitParameter("ReplaceChar");this.splitChar=filterConfig.getInitParameter("SplitChar");this.excludeUrls=filterConfig.getInitParameter("excludeUrls");this.filterConfig = filterConfig;}@Overridepublic void destroy() {this.filterConfig = null;}@Overridepublic void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException, ServletException {HttpServletRequest req = (HttpServletRequest) request;HttpServletResponse resp = (HttpServletResponse) response;if (handleExcludeURL(req, resp)){chain.doFilter(request, response);return;}XssHttpServletRequestWrapper xssRequest = new XssHttpServletRequestWrapper((HttpServletRequest) request,filterChar,replaceChar,splitChar);chain.doFilter(xssRequest, response);}private boolean handleExcludeURL(HttpServletRequest request, HttpServletResponse response){if (excludes == null || excludes.isEmpty()){return false;}String url = request.getServletPath();for (String pattern : excludes){Pattern p = Pattern.compile("^" + pattern);Matcher m = p.matcher(url);if (m.find()){return true;}}return false;}private boolean isExcludeUrl(ServletRequest request){boolean exclude=false;if(StringUtils.isNotBlank(excludeUrls)){String[]excludeUrl=excludeUrls.split(splitChar);if(excludeUrl!=null&&excludeUrl.length>0){for(String url:excludeUrl){if(URLHelper.getURI((HttpServletRequest)request).startsWith(url)){exclude=true;}}}}return exclude;}}
import static com.jeecms.common.web.Constants.UTF8;import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.util.regex.Pattern;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;/*** @author Tom*/
public class XssHttpServletRequestWrapper extends HttpServletRequestWrapper {private String[]filterChars;private String[]replaceChars;public XssHttpServletRequestWrapper(HttpServletRequest request,String filterChar,String replaceChar,String splitChar) {super(request);if(filterChar!=null&&filterChar.length()>0){filterChars=filterChar.split(splitChar);}if(replaceChar!=null&&replaceChar.length()>0){replaceChars=replaceChar.split(splitChar);}}@Overridepublic String getQueryString() {String value = super.getQueryString();if (value != null) {value = xssEncode(value);}return value;}/*** 覆盖getParameter方法,将参数名和参数值都做xss过滤。<br/>* 如果需要获得原始的值,则通过super.getParameterValues(name)来获取<br/>* getParameterNames,getParameterValues和getParameterMap也可能需要覆盖*/@Overridepublic String getParameter(String name) {String value = super.getParameter(xssEncode(name));if (value != null) {value = xssEncode(value);}return value;}@Overridepublic String[] getParameterValues(String name) {String[]parameters=super.getParameterValues(name);if (parameters==null||parameters.length == 0) {return null;}for (int i = 0; i < parameters.length; i++) {parameters[i] = xssEncode(parameters[i]);}return parameters;}/*** 覆盖getHeader方法,将参数名和参数值都做xss过滤。<br/>* 如果需要获得原始的值,则通过super.getHeaders(name)来获取<br/> getHeaderNames 也可能需要覆盖*/@Overridepublic String getHeader(String name) {String value = super.getHeader(xssEncode(name));if (value != null) {value = xssEncode(value);}return value;}/*** 将容易引起xss漏洞的半角字符直接替换成全角字符* 请求的参数过滤一些关键字* @return*/private  String xssEncode(String s) {if (s != null) {// 避免 null 字符s = s.replaceAll("", "");s = s.replaceAll("<", "& lt;").replaceAll(">", "& gt;");s = s.replaceAll("<", "& lt;").replaceAll(">", "& gt;");//  全角大于号  全角小于号s = s.replaceAll("\\(", "& #40;").replaceAll("\\)", "& #41;");// \\(  \\)s = s.replaceAll("'", "& #39;");s = s.replaceAll("[\\\"\\\'][\\s]*javascript:(.*)[\\\"\\\']", "\"\"");s = s.replaceAll("alert", "");s = s.replaceAll("script", "");s = s.replaceAll("#", "#");s = s.replaceAll("%", "%");}if (s == null || s.equals("")) {return s;}try {s = URLDecoder.decode(s, UTF8);} catch (UnsupportedEncodingException e) {// TODO Auto-generated catch blocke.printStackTrace();}for (int i = 0; i < filterChars.length; i++) {if(s.contains(filterChars[i])){s=s.replace(filterChars[i], replaceChars[i]);}}return s;}}

web.xml配置过滤器

<!-- 防止XSS攻击 --><filter><filter-name>FilterXSS</filter-name><filter-class>cn.itcats.FilterXSS</filter-class></filter><filter-mapping><filter-name>FilterXSS</filter-name><url-pattern>/*</url-pattern></filter-mapping>

XSS攻击及解决方案相关推荐

  1. 安全测试之xss攻击和mysql注入

    xss概念: xss(Cross Site Script)跨站脚本攻击,为不和层叠样式表(css)混淆,写为xss 存在位置:web应用系统最常见软件安全漏洞 后果:代码植入到系统页面,篡改数据.盗取 ...

  2. 使用 PHP 构建的 Web 应用如何避免 XSS 攻击

    本文首先简单介绍开发测试人员如何对 Web 应用进行 XSS 漏洞测试,如何借助工具绕过客户端 JavaScript 校验输入恶意数据:然后针对使用 PHP 语言构建的 Web 站点,从在输出端对动态 ...

  3. [绍棠] Vue解决V-HTML指令潜在的XSS攻击(‘v-html‘ directive can lead to XSS attack.)

    什么是 XSS 攻击? XSS是跨站脚本攻击(Cross-Site Scripting)的简称. XSS是一种注入脚本式攻击,攻击者利用如提交表单.发布评论等方式将事先准备好的恶意脚本注入到那些良性可 ...

  4. 互联网安全架构平台设计之预防XSS攻击

    互联网安全架构平台设计之预防XSS攻击 文章目录 互联网安全架构平台设计之预防XSS攻击 一.什么是XSS攻击? 二.XSS攻击详解 1.XSS攻击的原理 2.解决方案 三.注意事项 一.什么是XSS ...

  5. php的服务器变量$SERVER以及防止$_SERVER['PHP_SELF']造成的XSS漏洞攻击及其解决方案

    一.背景 突然想起来之前面试的一些面试题,让我写出几个服务器变量$SERVER代表的意思..实话实说,这些东西已经忘记很久了,都是用的时候直接上网查,今天再复习复习吧. 二.$SERVER $_SER ...

  6. XSS(跨站脚本攻击)漏洞解决方案

    XSS(跨站脚本攻击)漏洞解决方案 参考文章: (1)XSS(跨站脚本攻击)漏洞解决方案 (2)https://www.cnblogs.com/boboxing/p/9261996.html 备忘一下 ...

  7. AntiSamy:防 XSS 攻击的一种解决方案使用教程

    AntiSamy:防 XSS 攻击的一种解决方案使用教程 1. XSS 介绍 2. AntiSamy 介绍 3. AntiSamy 使用 3.1 导入依赖 3.2 选择策略文件 3.3 SpringB ...

  8. 防止XSS漏洞攻击常用解决方案

    漏洞通用描述 跨站脚本攻击(Cross Site Scripting),简称XSS漏洞. 该页面直接将用户在 HTML 页面中的输入(通常是参数值)加载到前端页面,没有预先加以清理. 如果脚本在响应页 ...

  9. xss攻击解决方案php项目,php 过滤存储型XSS攻击,_PHP_ 少侠科技

    详细内容 最近做的项目被测试测出了存在存储型XSS,至此记录一下,问题出在了 input 框 :payload:"a" οnclick=alert(1)> 也做了一些XSS过 ...

最新文章

  1. OpenCV代码提取:Windows上通过DShow获取Camera视频
  2. 自己动手写第一阶段的处理器(1)——计算机的简单模型、架构、指令系统
  3. MySQL Replication--复制异常1
  4. getplotlyoffline(‘http://cdn.plot.ly/plotly-latest.min.js‘)无法下载如何解决
  5. MapReduce异常
  6. matlab拉普拉斯算子边缘提取_使用平面光学器件进行图像边缘的差分检测
  7. 大数据Hadoop简介
  8. C语言齿轮参数计算程序,C语言程序实现齿轮基本参数几何尺寸计算.pdf
  9. kb4023057安装失败_微软重发KB4023057补丁致部分用户更新失败
  10. 程序员,你准备好回家过年了吗?
  11. Activiti6.0.0及以上版本集成Activiti Modeler
  12. 切片器可以设置日期格式?_如何分秒必争浅淡时间切片器
  13. 问题:阿里云RDS数据库Binlog日志一直增大,撑爆磁盘
  14. Hive自定义函数(字母大小写转换)
  15. easycode配置问题
  16. Android WebView支持文件下载之调起浏览器下载(Java与Kotlin版)
  17. 生成对抗网络——GAN(一)
  18. 点成分享| 低温冷冻保存的技术研究(一)
  19. 小区规划开发商想妻子的谎言改就能改(图)2015年05月02
  20. 监控平台服务器是什么系统,监控平台系统服务器的作用

热门文章

  1. 使用JUnit测试预期异常
  2. 2021年营销数智化趋势洞察报告:深链经营孕育品牌发展新商机.pdf(附下载链接)...
  3. 【报告分享】2021年中国企业直播成长路径研究报告.pdf(附下载链接)
  4. 16篇最新推荐系统论文送你(文末附打包下载链接)
  5. PyTorch 深度学习:32分钟快速入门——DenseNet
  6. 假如BERT系论文变成Commit History
  7. NLP简报(Issue#7)
  8. 深度学习训练出来的损失不收敛_学习率设置技巧,使用学习率来提升我们的模型...
  9. 怎样设置电脑壁纸_谷歌地球实时壁纸,电脑和手机实现方案都在这里了
  10. Leetcode每日一题:52.N-Queens II(N皇后Ⅱ)