当前位置: 首页 > news >正文

深圳市工程建设交易服务中心网站工作总结写作

深圳市工程建设交易服务中心网站,工作总结写作,什么网站可以做软件有哪些内容,DW怎么做网站下拉菜单在Spring Boot中&#xff0c;我们可以使用注解的方式来进行XSS防御。注解是一种轻量级的防御手段&#xff0c;它可以在方法或字段级别对输入进行校验&#xff0c;从而防止XSS攻击。 引入相关依赖 maven依赖&#xff1a; <!--JSR-303/JSR-380用于验证的注解 --> <de…

在Spring Boot中,我们可以使用注解的方式来进行XSS防御。注解是一种轻量级的防御手段,它可以在方法或字段级别对输入进行校验,从而防止XSS攻击。

引入相关依赖

maven依赖:

<!--JSR-303/JSR-380用于验证的注解 -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId><version>2.6.7</version>
</dependency>

如果是使用grade,引入依赖:

implementation 'org.springframework.boot:spring-boot-starter-validation:2.6.7'

定义@XSS注解进行参数校验

我们可以自定义一个@XSS注解,用于标记那些需要校验的参数。这里是一个简单的@XSS注解定义:

package com.morris.spring.boot.module.xss;import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;@Target(value = {ElementType.METHOD, ElementType.FIELD, ElementType.CONSTRUCTOR, ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = XssValidator.class)
public @interface Xss {String message() default "非法输入, 检测到潜在的XSS";Class<?>[] groups() default {};Class<? extends Payload>[] payload() default {};
}

实现自定义注解处理器

接下来,我们需要实现XSSValidator类,该类将负责检查输入是否包含潜在的XSS攻击脚本:

package com.morris.spring.boot.module.xss;import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.safety.Whitelist;import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;/*** xss注解校验*/
public class XssValidator implements ConstraintValidator<Xss, String> {/*** 使用jsoup自带的relaxed白名单*/private static final Whitelist WHITE_LIST = Whitelist.relaxed();/*** 定义输出设置,关闭prettyPrint(prettyPrint=false),目的是避免在清理过程中对代码进行格式化* 从而保持输入和输出内容的一致性。*/private static final Document.OutputSettings OUTPUT_SETTINGS = new Document.OutputSettings().prettyPrint(false);/*** 验证输入值是否有效,即是否包含潜在的XSS攻击脚本。* * @param value 输入值,需要进行XSS攻击脚本清理。* @param context 上下文对象,提供关于验证环境的信息,如验证失败时的错误消息定制。* @return 如果清理后的值与原始值相同,则返回true,表示输入值有效;否则返回false,表示输入值无效。*/@Overridepublic boolean isValid(String value, ConstraintValidatorContext context) {// 这里先对value进行一次解析,对其中的单个<、>字符进行编码String oldBody = Jsoup.parse(value).body().html();// 使用Jsoup库对输入值进行清理,以移除潜在的XSS攻击脚本。// 使用预定义的白名单和输出设置来确保只保留安全的HTML元素和属性。String newBody = Jsoup.clean(value, "", WHITE_LIST, OUTPUT_SETTINGS);// 比较清理后的值与解析后的值是否相同,不相同说明过滤了xss脚本// 这里不使用value与newBody比,因为jsoup会对value中的单个<、>字符进行编码,如果value中还有单个的<,value与newBody也会不一样return oldBody.equals(newBody);}}

使用@Xss注解防御post请求

如果是post请求,需要在方法参数前面加上@Valid或者@Validated注解,然后在实体类的属性上面加上@Xss注解。

package com.morris.spring.boot.module.xss;import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import javax.validation.Valid;/*** Xss局部防御post请求*/
@RestController
@RequestMapping("/xss/local")
public class XssLocalPostController {/*** 使用注解拦截POST请求中的xss,在实体类需要拦截xss的属性上面加上@Xss或者@Validated注解** @param userLocalLoginPojo 实体类* @return 实体类*/@PostMapping("/test")public UserLocalLoginPojo test(@Valid @RequestBody UserLocalLoginPojo userLocalLoginPojo) {return userLocalLoginPojo;}}

在要进行XSS防御的属性上添加@Xss注解:

package com.morris.spring.boot.module.xss;import lombok.Data;@Data
public class UserLocalLoginPojo {@Xssprivate String userAccount;
}

测试url:http://localhost:8888/xss/local/test

测试post请求:

{"userAccount": "<iframe οnlοad='alert(0)'>demoData</iframe>"
}

测试结果:

{"message": "userAccount:非法输入, 检测到潜在的XSS","code": 400,"result": null
}

使用@Xss注解防御get请求

如果是get请求,需要在方法参数前面加上@Xss注解,然后在类上加上@Validated注解。

package com.morris.spring.boot.module.xss;import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;/*** Xss局部防御get请求*/
@RestController
@RequestMapping("/xss/local")
@Validated
public class XssLocalGetController {/*** 使用注解拦截get请求中的xss,在方法参数前面加上@Xss,注意类上面要加上@Validated注解** @param userAccount 请求参数* @return 请求参数*/@GetMapping("/test")public String test(@Xss String userAccount) {return userAccount;}}

测试url:http://localhost:8888/xss/local/test?userAccount=<iframe>demoData</iframe>

测试结果:

{"message": "test.userAccount: 非法输入, 检测到潜在的XSS","code": 400,"result": null
}
http://www.yayakq.cn/news/274574/

相关文章:

  • 塔罗牌手机网站制作sem什么意思
  • wordpress插件证书认证网站专业设计笔记本电脑
  • 建设网站上申请劳务资质吗大型门户网站建设步骤
  • 江苏润通市政建设工程有限公司网站网页设计模板html代码
  • 彩票网站开发搭建免费建站网页无需登陆
  • 网站建设的一般过程html美食网页设计源码
  • 做名片网站酒店微信网站建设
  • 名师工作室建设名师网站报告总结网站建设实验
  • 网站导航栏固定文化传播公司网站模版
  • 网站推广策略怎么写上海网络推广专员
  • 注册公司网站怎么收费网站支付功能报价
  • 网站建设花钱吗引流推广营销
  • 如何做网站关键词排名wordpress腾讯云cos
  • 网站建设得花多少钱做h5商城网站
  • 明快网站设计移动电商网站设计
  • 怎么做网站旺铺装修军事新闻app哪个好
  • 星大建设集团招聘网站如何创建网站的步骤
  • 建设旅游网站目的服装网站的建设
  • 太原网站seo服务服装品牌网站建设
  • 做网站就是做信息整合牡丹江市建设行业协会网站
  • 如何做自己的广告网站wordpress如何上传mp3
  • 网站 廉政建设 板块大连建设工程信息网官网首页
  • 国外景观设计网站常见网页制作工具
  • 做一组静态页面网站多少钱西安制作网站的电话
  • 网站seo外包技术资源如何精准引流呢
  • 网站备案背景宁波网络关键词优化费用
  • dede二手车网站源码17173论坛
  • 外贸网站制作有哪些网页设计的就业和发展前景
  • 建立网站外链常用的渠道有哪些网站开发
  • 做网站就是做信息整合辣条类网站建设规划书