定制型网站制作,win7本机做网站,做网站游戏推广赚钱,wordpress标签的调用代码在Spring Boot中#xff0c;我们可以使用注解的方式来进行XSS防御。注解是一种轻量级的防御手段#xff0c;它可以在方法或字段级别对输入进行校验#xff0c;从而防止XSS攻击。
引入相关依赖
maven依赖#xff1a;
!--JSR-303/JSR-380用于验证的注解 --
de…在Spring Boot中我们可以使用注解的方式来进行XSS防御。注解是一种轻量级的防御手段它可以在方法或字段级别对输入进行校验从而防止XSS攻击。
引入相关依赖
maven依赖
!--JSR-303/JSR-380用于验证的注解 --
dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-validation/artifactIdversion2.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 ConstraintValidatorXss, String {/*** 使用jsoup自带的relaxed白名单*/private static final Whitelist WHITE_LIST Whitelist.relaxed();/*** 定义输出设置关闭prettyPrintprettyPrintfalse目的是避免在清理过程中对代码进行格式化* 从而保持输入和输出内容的一致性。*/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;
}测试urlhttp://localhost:8888/xss/local/test
测试post请求
{userAccount: iframe οnlοadalert(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;}}测试urlhttp://localhost:8888/xss/local/test?userAccountiframedemoData/iframe
测试结果
{message: test.userAccount: 非法输入, 检测到潜在的XSS,code: 400,result: null
}