首页 文章 精选 留言 我的

精选列表

搜索[插件],共10010篇文章
优秀的个人博客,低调大师

Spring Boot XSS 攻击过滤插件使用

XSS 是什么 XSS(Cross Site Scripting)攻击全称跨站脚本攻击,为了不与 CSS(Cascading Style Sheets)名词混淆,故将跨站脚本攻击简称为 XSS,XSS 是一种常见 web 安全漏洞,它允许恶意代码植入到提供给其它用户使用的页面中。 xss 攻击流程 简单 xss 攻击示例 若网站某个表单没做相关的处理,用户提交相关恶意代码,浏览器会执行相关的代码。 解决方案 XSS 过滤说明 对表单绑定的字符串类型进行 xss 处理。 对 json 字符串数据进行 xss 处理。 提供路由和控制器方法级别的放行规则。 使用 mica-xss 引入一下 依赖即可 <!--XSS 安全过滤--> <dependency> <groupId>net.dreamlu</groupId> <artifactId>mica-core</artifactId> <version>2.0.9-GA</version> </dependency> <dependency> <groupId>net.dreamlu</groupId> <artifactId>mica-xss</artifactId> <version>2.0.9-GA</version> </dependency> 测试 XSS 过滤 测试 GET 参数过滤 创建目标接口,模拟 get 提交 @GetMapping("/xss") public String xss(String params){ return params; } 返回为空 ⋊> ~ curl --location --request GET 'http://localhost:8080/xss?params=%3Cscript%3Ealert(%27xxx%27)%3C/script%3E' 测试 POST form 参数过滤 创建目标接口,模拟 post form 提交 @PostMapping("/xss") public String xss(String params){ return params; } 返回为空 curl --location --request POST 'http://localhost:8080/xss' \ --header 'Content-Type: application/x-www-form-urlencoded' \ --data-urlencode 'params=<script>alert('\''xxx'\'')</script>' 测试 POST body 参数过滤 创建目标接口,模拟 post body 提交 @PostMapping("/xss") public String xss(@RequestBody Map<String,String> body){ return body.get("params"); } 返回为空 curl --location --request POST 'http://localhost:8080/xss' \ --header 'Content-Type: application/json' \ --data-raw '{ "params":"<script>alert('\''XXX'\'')</script>" }' 跳过某些接口过滤 可以使用 @XssCleanIgnore 注解对方法和类级别进行忽略。 @XssCleanIgnore @PostMapping("/xss") public String xss(@RequestBody Map<String,String> body){ return body.get("params"); } 原理分析 常见实现剖析 目前网上大多数的方案如下图,新增 XssFilter 拦截用户提交的参数,进行相关的转义和黑名单排除,完成相关的业务逻辑。在整个过程中最核心的是通过包装用户的原始请求,创建新的 requestwrapper 保证请求流在后边的流程可以重复读。 <img src="https://i.loli.net/2020/12/01/DN4XUGi1rxSRath.png" style="zoom:67%;" /> mica-xss 实现 1. 自定义 WebDataBinder 编辑器支持 form 过滤 Spring WebDataBinder 的作用是从 web request 中把 web 请求里的parameters绑定到对应的JavaBean上,在 Controller 方法中的参数类型可以是基本类型,也可以是封装后的普通 Java 类型。若这个普通的 Java 类型没有声明任何注解,则意味着它的每一个属性都需要到 Request 中去查找对应的请求参数,而 WebDataBinder 则可以帮助我们实现从 Request 中取出请求参数并绑定到 JavaBean 中。 SpringMVC 在绑定的过程中提供了用户自定义编辑绑定的接口,注入即可在参数绑定 JavaBean 过程中执行过滤。 2. 自定义 JsonDeserializer 反序列化支持 Json 过滤 在 Spring Boot 中默认是使用 Jackson 进行序列化和反序列化 JSON 数据的,那么除了可以用默认的之外,我们也可以编写自己的 JsonSerializer 和 JsonDeserializer 类,来进行自定义操作。用户提交 JSON 报文会通过 Jackson 的 JsonDeserializer 绑定到 JavaBean 中。我们只需要自定义 JsonDeserializer 即可完成在绑定 JavaBean 中执行过滤。 核心过滤逻辑 在 mica-xss 中并未采取上文所述通过自己手写黑名单或者转义方式的实现方案,而是直接实现 Jsoup 这个工具类。 jsoup 实现 WHATWG HTML5 规范,并将 HTML 解析为与现代浏览器相同的 DOM。 从 URL,文件或字符串中刮取和解析 HTML 使用 DOM 遍历或 CSS 选择器查找和提取数据 操纵 HTML 元素,属性和文本 清除用户提交的内容以防止安全白名单,以防止 XSS 攻击 输出整洁的 HTML 项目推荐: Spring Cloud 、Spring Security OAuth2的RBAC权限管理系统 欢迎关注

优秀的个人博客,低调大师

Spring Boot 接口幂等插件使用

幂等概述 幂等性原本是数学上的概念,即使公式:f(x)=f(f(x)) 能够成立的数学性质。用在编程领域,则意为对同一个系统,使用同样的条件,一次请求和重复的多次请求对系统资源的影响是一致的。 幂等性是分布式系统设计中十分重要的概念,具有这一性质的接口在设计时总是秉持这样的一种理念:调用接口发生异常并且重复尝试时,总是会造成系统所无法承受的损失,所以必须阻止这种现象的发生。 实现幂等的方式很多,目前基于请求令牌机制适用范围较广。其核心思想是为每一次操作生成一个唯一性的凭证,也就是 token。一个 token 在操作的每一个阶段只有一次执行权,一旦执行成功则保存执行结果。对重复的请求,返回同一个结果(报错)等。参考《幂等性浅谈》 幂等处理实现 加入依赖 <dependency> <groupId>com.pig4cloud.plugin</groupId> <artifactId>idempotent-spring-boot-starter</artifactId> <version>0.0.1</version> </dependency> 配置 Redis 链接 默认情况下,可以不配置。理论是支持 redisson-spring-boot-starter 全部配置 spring: redis: host: 127.0.0.1 port: 6379 接口 @Idempotent(key = "#key", expireTime = 10, info = "请勿重复查询") @GetMapping("/test") public String test(String key) { return "success"; } 测试 10 个独立线程请求 执行查看结果,10 个请求只会有一个成功 查看后台异常报错,9 个异常报错满足预期 idempotent 注解说明 key: 幂等操作的唯一标识,使用 spring el 表达式 用#来引用方法参数 。 可为空则取当前 url + args 做请求的唯一标识 expireTime: 有效期 默认:1 有效期要大于程序执行时间,否则请求还是可能会进来 timeUnit: 时间单位 默认:s (秒) info: 幂等失败提示信息,可自定义 delKey: 是否在业务完成后删除 key true:删除 false:不删除 幂等处理设计原理 流程设计参考 1.请求开始前,根据 key 查询 查到结果:报错 未查到结果:存入 key-value-expireTime key=ip+url+args 2.请求结束后,直接删除 key 不管 key 是否存在,直接删除 是否删除,可配置 3.expireTime 过期时间,防止一个请求卡死,会一直阻塞,超过过期时间,自动删除 过期时间要大于业务执行时间,需要大概评估下; 4.此方案直接切的是接口请求层面。 5.过期时间需要大于业务执行时间,否则业务请求 1 进来还在执行中,前端未做遮罩,或者用户跳转页面后再回来做重复请求 2,在业务层面上看,结果依旧是不符合预期的。 6.建议 delKey = false。即使业务执行完,也不删除 key,强制锁 expireTime 的时间。预防 5 的情况发生。 7.实现思路:同一个请求 ip 和接口,相同参数的请求,在 expireTime 内多次请求,只允许成功一次。 8.页面做遮罩,数据库层面的唯一索引,先查询再添加,等处理方式应该都处理下。 9.此注解只用于幂等,不用于锁,100 个并发这种压测,会出现问题,在这种场景下也没有意义,实际中用户也不会出现 1s 或者 3s 内手动发送了 50 个或者 100 个重复请求,或者弱网下有 100 个重复请求; 总结 pig-mesh/pig pig-mesh/idempotent-spring-boot-starter 项目推荐: Spring Cloud 、Spring Security OAuth2的RBAC权限管理系统 欢迎关注

优秀的个人博客,低调大师

【开发】IDEA这款插件太实用了…

云栖号资讯:【点击查看更多行业资讯】在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! 接口调试是每个软件开发从业者必不可少的一项技能,一个项目的的完成,可能接口测试调试的时间比真正开发写代码的时间还要多,几乎是每个开发的日常工作项。 所谓工欲善其事必先利其器,在没有尝到IDEA REST真香之前,postman确实是一个非常不错的选择,具有完备的REST Client功能和请求历史记录功能。 但是当使用了IDEA REST之后,postman就可以丢了,因为,IDEA REST Client具有postman的所有功能,而且还有postman没有的功能,继续往下看。 真香定律的原因有如下几个: 1、首先postman的所有功能IDEA REST Client都具备了,如REST Client控制台和历史请求记录。 2、其次如果能够在一个生产工具里完成开发和调试的事情,干嘛要切换到另一个工具呢?在公众号互联网架构师后台回复:2T,可以获取架构师视频整套系统教程。 3、然后IDEA REST Client还支持环境配置区分的功能,以及接口响应断言和脚本化处理的能力。 4、IDEA REST Client的请求配置可以用文件配置描述,所以可以跟随项目和项目成员共享。 IDEA REST Client控制台 从顶层工具栏依次Tools -> HTTP Client -> Test RESTFUL Web Service 打开后,IDEA REST Client控制台的界面如下样式: 可以看到,这个控制台展示的功能区和postman已经没什么差别了,包括请求方式,请求参数和请求头的填充都已经包含了。在公众号互联网架构师后台回复:2T,可以获取架构师视频整套系统教程。 特别说明下的是,如果请求的方式是Authorization :Basic这种方式认证的话,可以点击下图所示的按钮,会弹出填充用户名和密码的窗口出来,填完后会自动补充到Authorization 的header里面去 历史请求记录 IntelliJIDEA自动将最近执行的50个请求保存到http-requests-log.http 文件中,该文件存储在项目的.idea / httpRequests / 目录下。 使用请求历史记录,您可以快速导航到特定响应并再次发出请求。文件内容大如下图所示,再次发出请求只要点击那个运行按钮即可。 如果从请求历史记录再次发出请求,则其执行信息和响应输出的链接将添加到请求历史记录文件的顶部。在公众号互联网架构师后台回复:2T,可以获取架构师视频整套系统教程。 构建HTTP请求脚本 上面的历史记录就是一个完整的IDEA REST Client请求脚本,如果你是从控制台触发的,那么可以直接复制历史请求记录的文件放到项目里作为HTTP请求的脚本,给其他成员共享,如果不是,也可以直接新建一个.http或者.rest结尾的文件,IDEA会自动识别为HTTP请求脚本。 语法部分 首先通过###三个井号键来分开每个请求体,然后请求url和header参数是紧紧挨着的,请求参数不管是POST的body传参还是GET的parameter传参,都是要换行的。 另外,大家可以关注微信公众号“互联网架构师”,在后台回复:2T,可以获取架构师全套视频。 环境区分 细心的你可能发现了上面示例的代码,没有真实的请求地址,取而代之的,是一个{{baseUrl}}的占位符,这个就是IDEA REST Client真香的地方,支持从指定的配置文件中获取到环境相关的配置参数,不仅baseUrl可以通过占位符替换,一些请求的参数如果和接口环境相关的都可以通过配置文件来区分。 首先在.http的脚本同目录下创建一个名为http-client.private.env.json的文件,然后内容如下,一级的key值时用来区分环境的,比如,dev、uat、pro等,环境下的对象就是一次HTTP请求中能够获取到的环境变量了,在公众号互联网架构师后台回复:2T,可以获取架构师视频整套系统教程。你可以直接在请求的HTTP的脚本中通过{{xx}}占位符的方式获取到这里配置的参数: 那么在选择执行请求的时候,IDEA就会让你选执行那个环境的配置,如: 结果断言 IDEA REST Client可以针对接口的响应值进行脚本化的断言处理,立马从一个接口调试工具上升到测试工具了,比如:在公众号互联网架构师后台回复:2T,可以获取架构师视频整套系统教程。 结果值暂存到环境变量 试想下这样的场景,当一个系统需要通过认证才能访问的时候,如果用postman的时候,是不是先访问登录接口,然后获得token后,手动粘贴复制到新的调试接口的header参数里面去,这太麻烦了,IDEA REST Client还有一个真香的功能,可以完美解决这个问题,请看下面的脚本:在公众号互联网架构师后台回复:2T,可以获取架构师视频整套系统教程。 在第一个认证的请求结束后,可以在response里拿到返回的token信息,然后我们通过脚本设置到了全局变量里,那么在接下来的接口请求中,就可以直接使用双大括号占位符的方式获取到这个token了 结语 postman有口皆碑,确实是一个非常不错的必备工具,之前给比人推荐这种工具时总是安利他postman。 但是,IDEA REST Client也真的很不错,值得尝试一下,后面安利这种工具就切换到IDEA REST Client了,postman反正被我丢掉了。 和第三方做接口对接时,项目里必备一个rest-http.http接口请求文件,满足自己的同时也成方便了他人。 【云栖号在线课堂】每天都有产品技术专家分享!课程地址:https://yqh.aliyun.com/zhibo 立即加入社群,与专家面对面,及时了解课程最新动态!【云栖号在线课堂 社群】https://c.tb.cn/F3.Z8gvnK 原文发布时间:2020-03-20本文作者:互联网架构师本文来自:“互联网架构师 公众号”,了解相关信息可以关注“[互联网架构师](https://mp.weixin.qq.com/s/CVbglYeqO7DAnMcWyNuPiA) ”

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册