一起来找bug茬-01

news/2024/10/6 4:31:20/文章来源:https://www.cnblogs.com/bigorang/p/18285313

/*** @description 对HttpServletRequest 请求的数据进行转义,防止xss攻击* URL: home.html?mothod=space&pid=335511*/
public class XssHttpServletRequestWrapper extends HttpServletRequestWrapper {private byte[] body;public XssHttpServletRequestWrapper(HttpServletRequest request) throws IOException {super(request);String method = request.getMethod();String pathInfo = request.getPathInfo();String contentType = request.getContentType();// 由于request并没有提供现成的获取json字符串的方法,所以我们需要将body中的流转为字符串BufferedReader reader = request.getReader();StringBuilder stringBuilder = new StringBuilder();String line = null;while ((line = reader.readLine()) != null) {stringBuilder.append(line);}String json = stringBuilder.toString();if ((HttpMethod.POST.equalsIgnoreCase(method) ||HttpMethod.PUT.equalsIgnoreCase(method)) && StrUtil.isNotEmpty(contentType) && contentType.contains(MediaType.APPLICATION_JSON_VALUE)) {json = HtmlUtil.cleanHtmlTag(json);json = json.replaceAll("iframe.*iframe","").replaceAll("javascript.*\\)","").replaceAll("alert","");body = json.getBytes();}}/*** 重写getParameter方法,用HtmlUtil转义后再返回*/@Overridepublic String getParameter(String name) {String value= super.getParameter(name);if(!StrUtil.hasEmpty(value)){
//      value= HtmlUtil.filter(value);value = value.replaceAll("<iframe.*iframe>","").replaceAll("iframe.*iframe","").replaceAll("javascript.*\\)","").replaceAll("alert","");}return value;}public static void main(String[] args) {String address = "<p>fegreef&lt;iframe+src=javascript:&amp;#37;&amp;#53;&amp8#67;&amp;#117;&amp;#48;&amp;#48;&amp8#54;&amp;#49;&amp;#37;&amp;#53;&amp;#67;&amp;#117;&amp;#48;&amp;#48;&amp;#54;&amp;#67;&amp;#378&amp;#53;&amp;#67;&amp;#117;&amp;#48;&amp;#48;&amp;#54;&amp;#53;&amp;#37;&amp;#53;&amp;#67;&amp;#11F;&amp8#48;&amp;#48;&amp;#55;&amp;#50;&amp;#37;&amp;#53;&amp;#67;&amp;#117;&amp;#48;&amp;#48;&amp;#55;&amp;#52;(88888)&gt;&1t;/iframe&gt;e</p>alert909090></p>";String b = "<iframe src=//a.com></iframe>";System.out.println(b.replaceAll("iframe.*iframe","").replaceAll("javascript.*\\)","").replaceAll("alert.*",""));}/*** 重写getParameterValues方法,* 遍历每一个值,用HtmlUtil转义后再返回*/@Overridepublic String[] getParameterValues(String name) {String[] values= super.getParameterValues(name);if(values!=null){for (int i=0;i<values.length;i++){String value=values[i];if(!StrUtil.hasEmpty(value)){
//          value= HtmlUtil.filter(value);value = value.replaceAll("<iframe.*iframe>","").replaceAll("iframe.*iframe","").replaceAll("javascript.*\\)","").replaceAll("alert","");}values[i]=value;}}return values;}/*** 重写getParameterMap方法,* 拿到所有的k-v键值对,用LinkedHashMap接收,* key不变,value用HtmlUtil转义后再返回*/@Overridepublic Map<String, String[]> getParameterMap() {Map<String, String[]> parameters = super.getParameterMap();LinkedHashMap<String, String[]> map=new LinkedHashMap();if(parameters!=null){for (String key:parameters.keySet()){String[] values=parameters.get(key);for (int i = 0; i < values.length; i++) {String value = values[i];if (!StrUtil.hasEmpty(value)) {
//            value = HtmlUtil.filter(value);value = value.replaceAll("<iframe.*iframe>","").replaceAll("iframe.*iframe","").replaceAll("javascript.*\\)","").replaceAll("alert","");}values[i] = value;}map.put(key,values);}}return map;}/*** 重写getHeader方法,用HtmlUtil转义后再返回*/@Overridepublic String getHeader(String name) {String value= super.getHeader(name);if (!StrUtil.hasEmpty(value)) {value = HtmlUtil.filter(value);}return value;}@Overridepublic ServletInputStream getInputStream(){if (body != null && body.length > 0) {final ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(body);//匿名内部类,只需要重写read方法,把转义后的值,创建成ServletInputStream对象return new ServletInputStream() {@Overridepublic boolean isFinished() {return byteArrayInputStream.available() == 0;}@Overridepublic boolean isReady() {return true;}@Overridepublic void setReadListener(ReadListener readListener) {}@Overridepublic int read() throws IOException {return byteArrayInputStream.read();}};} else {try {return super.getInputStream();} catch (IOException e) {throw new RuntimeException(e);}}}@Overridepublic BufferedReader getReader(){return new BufferedReader(new InputStreamReader(this.getInputStream()));}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/738655.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

推荐系统概念篇

概念篇1.1 什么是推荐系统? 1.1.1 能做什么? 推荐系统可以把那些最终会在用户(User) 和物品(Item)之间产生的连接提前找出来。 强调 “连接”,人与任何其他的连接, 其他可指人、咨询、消费品、服务等。 1.1.2 需要什么? 需要已经存在的连接,从已有的连接去预测未来的…

能看病的AI你见过吗:ChatMoney

本文由 ChatMoney团队出品在当今这个科技飞速发展的时代,人工智能技术正在以惊人的速度改变着我们的生活,人工智能已经深入到各个领域,医疗行业也不例外。 而今天我要和大家聊一聊利用ChatMoney全能知识库AI系统在求医问诊领域所发挥的巨大作用,众所周知在传统的求医问诊过…

.NET Core 和 .NET 标准类库项目类型有什么区别?

在 Visual Studio 中,至少可以创建三种不同类型的类库:类库(.NET Framework) 类库(.NET 标准) 类库 (.NET Core)虽然第一种是我们多年来一直在使用的,但一直感到困惑的一个主要问题是何时使用 .NET Standard 和 .NET Core 类库类型。 那么,类库(.NET Standard)和类库…

Python数据分析代码示例

数据清洗 在进行数据分析之前,通常需要对原始数据进行清洗,即处理缺失值、异常值、重复值等问题。 下面是一个数据清洗的示例代码: import pandas as pd# 读取原始数据 data = pd.read_csv(data.csv)# 处理缺失值 data = data.dropna()# 处理异常值 data = data[data[value]…

【OpenVINO™】YOLOv10在CPU上也能实现50+FPS推理—使用OpenVINO C++部署YOLOv10

英特尔发行版 OpenVINO™ 工具套件基于 oneAPI 而开发,可以加快高性能计算机视觉和深度学习视觉应用开发速度工具套件,适用于从边缘到云的各种英特尔平台上,帮助用户更快地将更准确的真实世界结果部署到生产系统中。YOLOv10是清华大学研究人员近期提出的一种实时目标检测方法…

插头 DP

插头 DP 定义 基于连通性状态压缩的 DP. 一个方向的插头存在表示这个格子在这个方向可以与外面相连。 状态 一个 \(n \times m(n, m \le 12)\) 的棋盘,有的格子是障碍,问共有多少满足要求的回路? 本题中,所有非障碍格子一定是从一个插头进、一个插头出,刚好用两个插头,方…

笛卡尔树(Cartesian Tree)

笛卡尔树(Cartesian Tree)1. 定义 根据序列构造的满足以下性质的树:二叉搜索树性质(BST):\(key_{ls} \le key_x \le key_{rs}\),\(key\) 默认为下标。 堆性质:\(val_{x} \le val_{ls} \le val_{rs}\).2. 构造如果有 \(key\) 作为第一关键字,则按 \(key\) 升序排序,否…

GreatSQL 中 Insert 慢是什么情况?

GreatSQL中 Insert 慢是什么情况? 背景概述 客户反映,业务上某张表的 Insert 操作速度很慢,单条 Insert 语句的最大执行时间超过了 5 秒。在收到客户问题后,我们仔细检查了数据库状态以及主机的负载情况,发现目前一切正常,并没有发现数据库故障或主机负载过高导致 insert…

技术思考:小米宣布在手机跑通 13 亿参数大模型,这意味着什么?

雷军在 2023 年度演讲中对小米 AI 布局的主要内容总结: 1、AI 赋能软硬件:小米计划通过 AI 技术增强其软件和硬件的能力 ,雷军认为 AI 在小米的技术研发中起着关键作用。 2.、持续布局:自 2016 年 7 月建立 AI 视觉团队以来, 小米一直在 AI 领域有计划地扩展, 今年 4 月还…

Unity使用后Addressables分包查看Build的资源大小

在Unity的Console窗口中,我们可以点击右上角的三个点,然后点击Open Editor Log,查看编辑的日志。 其中会有记录报错的信息,也会有我们build打包之后资源占比信息,上线小游戏的时候我们可以根据这些信息,看看需要压缩哪些资源

【问题解决】GL-MT3000无线中继模式连接想要中继的5GhzWifi失败

找了很久原因,还送厂换了一次货,但是回来之后仍然遇到相同的问题,最终确定应该是信号干扰所致。 尝试降低MT3000的5GHz的Wifi发射功率到中,然后成功连上想要中继的5GhzWifi,并且稳定运行到现在,问题解决。

寻找适合编写静态分析规则的语言

目前静态分析工具的主要痛点:无法开发自定义规则、对误报和漏报的规则无法快速修改,以及开发自定义规则有一定的难度。为了解决这些问题,我们需要寻找适合编写静态分析规则的语言。本文分享自华为云社区《寻找适合编写静态分析规则的语言》,作者:Uncle_Tom。 1. 程序静态分…