java 防止反射_解决反射型XSS漏洞攻击
对于程序员来说安全防御,无非从两个方面考虑,要么前端要么后台。
一、首先从前端考虑过滤一些非法字符。
前端的主控js中,在 输入框标签中,
找到点击发送按钮后,追加到聊天panel前 进行过滤input输入内容
1 // 过滤xss反射型漏洞
2 filterinputtxt: function (html) {
3 html = html.replace(/(.*]+>.*)/g,""); // html标记
4 html = html.replace(/([\r\n])[\s]+/g, ""); // 换行、空格
5 html = html.replace(//g, ""); // html注释
6 html = html.replace(/['"‘’“”!@#$%^&*{}!¥()()×+=]/g, ""); // 非法字符
7 html = html.replace("alert","");
8 html = html.replace("eval","");
9 html = html.replace(/(.*javascript.*)/gi,"");
10 if (html === "") {
11 html = "你好";
12 }
13 return html;
14 }
二、在后台api服务解决反射型xss漏洞
thinking:一般来说前端可以过滤一下基本的非法恶意代码攻击,如果恶意脚本被请求到服务端啦,那么就需要请求参数未请求接口前进行过滤一些非法字符。
handle:1、自定义过滤器实现filter接口
2、在dofilter方法中对request、response进行设置处理
##处理request请求参数。
1 /*
2 * copyright (c), 2001-2019, xiaoi机器人
3 * author: han.sun
4 * date: 2019/2/28 11:39
5 * history:
6 *
7 * 作者姓名 修改时间 版本号 描述
8 */
9 package com.eastrobot.robotdev.filter;
10
11 import javax.servlet.http.httpservletrequest;
12 import javax.servlet.http.httpservletrequestwrapper;
13 import java.util.map;
14 import java.util.regex.matcher;
15 import java.util.regex.pattern;
16
17 /**
18 * 〈一句话功能简述〉
19 * todo(解决反射型xss漏洞攻击)
20 *
21 * @author han.sun
22 * @version 1.0.0
23 * @since 2019/2/28 11:39
24 */
25 public class xsshttpservletrequestwrapper extends httpservletrequestwrapper {
26
27 /**
28 * 定义script的正则表达式
29 */
30 private static final string reg_script = "";
31
32 /**
33 * 定义style的正则表达式
34 */
35 private static final string reg_style = "";
36
37 /**
38 * 定义html标签的正则表达式
39 */
40 private static final string reg_html = "]+>";
41
42 /**
43 * 定义所有w标签
44 */
45 private static final string reg_w = "]*?>[\\s\\s]*?]*?>";
46
47 private static final string reg_javascript = ".*javascript.*";
48
49
50 xsshttpservletrequestwrapper(httpservletrequest request) {
51 super(request);
52 }
53
54 @suppresswarnings("rawtypes")
55 @override
56 public map getparametermap() {
57 map requestmap = super.getparametermap();
58 for (object o : requestmap.entryset()) {
59 map.entry me = (map.entry) o;
60 string[] values = (string[]) me.getvalue();
61 for (int i = 0; i < values.length; i++) {
62 values[i] = xssclean(values[i]);
63 }
64 }
65 return requestmap;
66 }
67
68 @override
69 public string[] getparametervalues(string paramstring) {
70 string[] values = super.getparametervalues(paramstring);
71 if (values == null) {
72 return null;
73 }
74 int i = values.length;
75 string[] result = new string[i];
76 for (int j = 0; j < i; j++) {
77 result[j] = xssclean(values[j]);
78 }
79 return result;
80 }
81
82 @override
83 public string getparameter(string paramstring) {
84 string str = super.getparameter(paramstring);
85 if (str == null) {
86 return null;
87 }
88 return xssclean(str);
89 }
90
91
92 @override
93 public string getheader(string paramstring) {
94 string str = super.getheader(paramstring);
95 if (str == null) {
96 return null;
97 }
98 str = str.replaceall("[\r\n]", "");
99 return xssclean(str);
100 }
101
102 /**
103 * [xssclean 过滤特殊、敏感字符]
104 * @param value [请求参数]
105 * @return [value]
106 */
107 private string xssclean(string value) {
108 if (value == null || "".equals(value)) {
109 return value;
110 }
111 pattern pw = pattern.compile(reg_w, pattern.case_insensitive);
112 matcher mw = pw.matcher(value);
113 value = mw.replaceall("");
114
115 pattern script = pattern.compile(reg_script, pattern.case_insensitive);
116 value = script.matcher(value).replaceall("");
117
118 pattern style = pattern.compile(reg_style, pattern.case_insensitive);
119 value = style.matcher(value).replaceall("");
120
121 pattern htmltag = pattern.compile(reg_html, pattern.case_insensitive);
122 value = htmltag.matcher(value).replaceall("");
123
124 pattern javascript = pattern.compile(reg_javascript, pattern.case_insensitive);
125 value = javascript.matcher(value).replaceall("");
126 return value;
127 }
128
129 }
##自定义filter过滤器。
1 /*
2 * copyright (c), 2001-2019, xiaoi机器人
3 * author: han.sun
4 * date: 2019/2/28 11:38
5 * history:
6 *
7 * 作者姓名 修改时间 版本号 描述
8 */
9 package com.eastrobot.robotdev.filter;
10
11 import javax.servlet.*;
12 import javax.servlet.http.httpservletrequest;
13 import javax.servlet.http.httpservletresponse;
14 import java.io.ioexception;
15
16 /**
17 * 〈在服务器端对 cookie 设置了httponly 属性,
18 * 那么js脚本就不能读取到cookie,
19 * 但是浏览器还是能够正常使用cookie〉
20 * todo(禁用js脚步读取用户浏览器中的cookie)
21 *
22 * @author han.sun
23 * @version 1.0.0
24 * @since 2019/2/28 16:38
25 */
26 public class xssfilter implements filter {
27
28 @override
29 public void init(filterconfig filterconfig) throws servletexception {
30
31 }
32
33 @override
34 public void dofilter(servletrequest request, servletresponse response, filterchain chain) throws ioexception, servletexception {
35
36 httpservletrequest req = (httpservletrequest) request;
37 httpservletresponse resp = (httpservletresponse) response;
38
39 // 解决动态脚本获取网页cookie,将cookie设置成httponly
40 string sessionid = req.getsession().getid();
41 resp.setheader("set-cookie", "jsessionid=" + sessionid + "; httponly");
42 resp.setheader("x-frame-options", "sameorigin");
43
44 chain.dofilter(new xsshttpservletrequestwrapper((httpservletrequest) request), response);
45 }
46
47 @override
48 public void destroy() {
49 }
50 }
需要在web.xml文件中添加自定义过滤器映射,让其起作用
1
2 xssescape
3 com.eastrobot.robotdev.filter.xssfilter
4
5
6 xssescape
7 /*
8
如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!
java 防止反射_解决反射型XSS漏洞攻击相关推荐
- java前端提示反射型xss_解决反射型XSS漏洞攻击
1 /* 2 * Copyright (C), 2001-2019, xiaoi机器人3 * Author: han.sun4 * Date: 2019/2/28 11:395 * History:6 ...
- java反射行跨站脚本攻击_跨站脚本攻击之反射型XSS漏洞【转载】
如果一个WEB应用程序使用动态页面传递参数向用户显示错误信息,就有可能会造成一种常见的XSS漏洞.一般情况下,这种页面使用一个包含消息文本的参数,并在页面加载时将文本返回给用户.对于开发者来说,使用这 ...
- Java SSM框架+jsp处理存储型XSS和反射型XSS漏洞
关于存储型XSS和反射型XSS漏洞的修复 *这里是java中SSM框架,前端页面为JSP,仅在服务端做处理,思路是对脚本转义* 存储型XSS漏洞 1:表现形式 2:解决方式 第一步:创建过滤器XssR ...
- 【安全牛学习笔记】反射型XSS***漏洞的原理及解决办法
发射型XSS 漏洞的原理及修复方法 1.常见的触发场景 2.漏洞原理 3.漏洞危害 4.一些tips 5.如何避免&修复漏洞 直接将用户数据输出到浏览器,没有做安全处理 搜索: www-dat ...
- xxs漏洞危害_反射型XSS漏洞详解
反射型XSS漏洞 如果一个应用程序使用动态页面向用户显示错误消息,就会造成一种常见的XSS漏洞.通常,该页面会使用一个包含消息文本的参数,并在响应中将这个文 本返回给用户.对于开发者而言,使用这种机制 ...
- 跨站脚本攻击之反射型XSS漏洞【转载】
转载自FovWeb.com 如果一个WEB应用程序使用动态页面传递参数向用户显示错误信息,就有可能会造成一种常见的XSS漏洞.一般情况下,这种页面使用一个包含消息文本的参数,并在页面加载时将文本返回给 ...
- 反射型XSS漏洞详解
反射型XSS漏洞 如果一个应用程序使用动态页面向用户显示错误消息,就会造成一种常见的XSS漏洞.通常,该页面会使用一个包含消息文本的参数,并在响应中将这个文 本返回给用户.对于开发者而言,使用这种机制 ...
- Apache Sling App CMS <1.1.4 存在反射型XSS漏洞(CVE-2022-46769)
漏洞描述 Apache Sling 是一个基于可扩展内容树(extensible content tree)的 RESTful Web 应用框架. 1.1.4 之前版本的 Apache Sling 中 ...
- php反射型xss,利用反射型XSS漏洞,模拟获取登录账户的Cookie
目录结构 一.测试环境 二.测试目标 三.原理描述 四.操作步骤 1.在服务器上搭建并启用hacker测试网站 2.在服务器上测试站点根目录内创建一个存放攻击脚本的文件夹 3.在xss文件夹下创建攻击 ...
- 对未标记为可安全执行的脚本_三、??XSS跨站脚本攻击
跨站脚本攻击(Cross Site Scripting),缩写为XSS.恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意 ...
最新文章
- R语言画Cox回归森林图
- Linux下Java开发环境的搭建Tomcat6+jdk6+eclipse3.5.2+Myeclipse9.0+mysql5.1.47
- FD.io/VPP — 常用指令集合
- zabbix API 删除host
- 怎么用BarTender批量打印标签
- Linux 初始root密码设置
- 自定义AlertDialog 问自己的单选item
- docker应用,后端服务出现OOM情况排查
- javascript中数据类型及转换、String()和toString()的区别
- js layui跳转页面_【WEB前端开辟】layui的iframe跳转链接与页面按钮跳转相干引见...
- odd raio值 是什麼_NBA2K20球员能力值又一次更新!
- XSpreadsheet-在线表格插件
- html事件绑定的方法,如何获取html元素所绑定的事件
- Visio 2007 序列号
- 2.	Zigbee应用程序框架开发指南 - 应用程序框架结构
- 万年历包括对应节日c语言,C语言 程序设 节日查询和任务提醒系统-万年历.doc
- Python(arcpy) 批量shp转raster
- 干货 | 关于离岸银行开户(境外开户),看这一篇就够了
- 华为设备配置OSPF负载分担
- win10开机占用内存大,资源管理器也看不到运行进程
热门文章
- 递归神经网络/_递归神经网络
- mysql least 参数_MySQL中MIN()和LEAST()的区别
- linux内核提高系统实时性,Linux操作系统实时性分析及改进策略
- 泰森怎么会输给道格拉斯_揭秘:泰森惨败给道格拉斯之后,为何不去打二番战复仇...
- 【Clojure 基本知识】 关于函数参数的各种高级用法
- Linux 内核版本号查看
- RxJS修炼之 用弹珠测试学习RxJS
- 数据结构10——强连通
- spring中IOC的简单使用
- 和我一起学《HTTP权威指南》——Web服务器