防止XSS攻击封装

<?php
if (!function_exists('remove_xss')) {
    //使用htmlpurifier防范xss攻击
    function remove_xss($string){
        //composer安装的,不需要此步骤。相对index.php入口文件,引入HTMLPurifier.auto.php核心文件
//         require_once './plugins/htmlpurifier/HTMLPurifier.auto.php';
        // 生成配置对象
        $cfg = HTMLPurifier_Config::createDefault();
        // 以下就是配置:
        $cfg -> set('Core.Encoding', 'UTF-8');
        // 设置允许使用的HTML标签
        $cfg -> set('HTML.Allowed','div,b,strong,i,em,a[href|title],ul,ol,li,br,p[style],span[style],img[width|height|alt|src]');
        // 设置允许出现的CSS样式属性
        $cfg -> set('CSS.AllowedProperties', 'font,font-size,font-weight,font-style,font-family,text-decoration,padding-left,color,background-color,text-align');
        // 设置a标签上是否允许使用target="_blank"
        $cfg -> set('HTML.TargetBlank', TRUE);
        // 使用配置生成过滤用的对象
        $obj = new HTMLPurifier($cfg);
        // 过滤字符串
        return $obj -> purify($string);
    }
}

 

转载于:https://www.cnblogs.com/shenchanglu/p/11337442.html

### XSS攻击的最佳实践 #### 使用OWASP ESAPI库增强安全性 为了有效XSS攻击,在`pom.xml`文件中引入OWASP ESAPI依赖是一个推荐的做法。通过该库可以方便地对输入数据进行编码处理,从而避免恶意脚本注入[^4]。 ```xml <dependency> <groupId>org.owasp.esapi</groupId> <artifactId>esapi</artifactId> <version>2.2.0.0</version> </dependency> ``` #### 实现自定义Filter拦截请求参数 创建一个专门用于清理HTML标签并转义特殊字符的过滤器类,继承`OncePerRequestFilter`,重写doFilterInternal方法。此方式可以在每次HTTP请求到达控制器之前自动执行预设的数据净化逻辑[^1]。 ```java import org.springframework.web.filter.OncePerRequestFilter; import javax.servlet.FilterChain; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; public class XssFilter extends OncePerRequestFilter { @Override protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { XssHttpServletRequestWrapper xssRequest = new XssHttpServletRequestWrapper((HttpServletRequest) request); super.doFilter(xssRequest ,response, filterChain); } } ``` #### 封装XssHttpServletRequestWrapper工具类 针对原始的`HttpServletRequest`对象封装一层新的包装类——`XssHttpServletRequestWrapper`,在此内部完成对于GET/POST提交过来的所有字符串类型的参数值做统一的HTML实体化转换操作。 ```java import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequestWrapper; import java.util.HashMap; import java.util.Map; public class XssHttpServletRequestWrapper extends HttpServletRequestWrapper { public XssHttpServletRequestWrapper(HttpServletRequest request){ super(request); } private Map<String,String[]> removeXssAndSql(String[] values) { HashMap<String, String[]> cleanValues = new HashMap<>(); if (values != null && values.length > 0) { for (int i = 0; i < values.length; i++) { // 对于每一个传入的value都调用stripXss函数去除潜在危险代码 cleanValues.put(i+"",new String[]{ stripXss(values[i]) }); } }else{ cleanValues.put("",null); } return cleanValues; } /** * 移除可能存在的XSS风险内容 */ private static String stripXss(String value) { if(value!=null){ // 去掉所有的<script>(.*?)<\/script> value=value.replaceAll("<(\\S*?)[^>]*>.*?</\\1>|<.*? />",""); // 替换html特殊字符为对应的实体形式 value=value.replace("&","&") .replace(">",">") .replace("<","<"); } return value; } } ``` #### 注册全局过滤器组件 最后一步是在Spring Boot启动类或者配置类上添加@Bean注解声明上述定制化的XssFilter实例作为spring容器管理下的bean对象,确保其能够被正确加载到web应用上下文中生效[^2]。 ```java @Configuration public class WebConfig implements WebMvcConfigurer { @Bean public XssFilter xssFilter() { return new XssFilter(); } } ``` 通过以上措施能够在较大程度上降低因不当处理用户输入而导致发生跨站点脚本攻击的风险,保障Web应用程序的安全稳定运行[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值