• 设为首页
  • 收藏本站
  • 积分充值
  • VIP赞助
  • 手机版
  • 微博
  • 微信
    微信公众号 添加方式:
    1:搜索微信号(888888
    2:扫描左侧二维码
  • 快捷导航
    福建二哥 门户 查看主题

    防止xss攻击的有效方法

    发布者: 午夜收音机 | 发布时间: 2025-6-27 16:37| 查看数: 30| 评论数: 0|帖子模式

    最近,有个项目突然接到总部的安全漏洞报告,查看后知道是XSS攻击。
    问题描述:
    在页面上有个隐藏域:
    XML/HTML Code复制内容到剪贴板
         
    • <input type = "hidden" id = "action" value = "${action}"/>    
    当前页面提交到Controller时,未对action属性做任何处理,直接又回传到页面上
    如果此时action被用户恶意修改为:***"<script>alert(1);</script>"***
    此时当页面刷新时将执行alert(1),虽然错误不严重,但是任何安全隐患都应受到重视。
    解决思路:
    该问题是由于对用户输入数据(隐藏域)未做任何处理,导致非法数据被执行,那么解决该问题的核心思路就是对用户数据做严格处理,对任何页面传递的数据都不应过分信任,处理方法如下:
    1.在页面上对action参数做转义处理,${action?html}(前端技术采用freemarker),但是此种方法只能对单个属性有效,如果此时项目处于维护期且有大量此种问题,修复的难度较大且不便于统一维护
    2.在服务端对用户数据做转义处理,此时需要创建一个filter,对request进行二次封装,核心代码如下:
    Java Code复制内容到剪贴板
         
    • import javax.servlet.http.HttpServletRequest;      
    • import javax.servlet.http.HttpServletRequestWrapper;      
    •         
    • import org.apache.commons.lang3.StringEscapeUtils;      
    •         
    • public class XssRequestWrapper extends HttpServletRequestWrapper {      
    •         
    •     public XssRequestWrapper(HttpServletRequest request) {      
    •         super(request);      
    •     }      
    •         
    •     public String getParameter(String name) {      
    •         String value = super.getParameter(name);      
    •         if (value == null) {      
    •             return null;      
    •         }      
    •         return StringEscapeUtils.escapeHtml4(value);      
    •     }      
    •         
    •     public String[] getParameterValues(String name) {      
    •         String[] values = super.getParameterValues(name);      
    •         if (values == null) {      
    •             return null;      
    •         }      
    •         String[] newValues = new String[values.length];      
    •         for (int i = 0; i < values.length; i++) {      
    •             newValues = StringEscapeUtils.escapeHtml4(values);      
    •         }      
    •         return newValues;      
    •     }      
    • }   
    XssRequestWrapper是对request进行的二次封装,最核心的作用是对request中的参数进行转义处理(需要用到commons-lang3.jar)
    定义filter,核心的代码如下:
    Java Code复制内容到剪贴板
         
    • @Override      
    • public void doFilter(ServletRequest request,      
    •                      ServletResponse response,      
    •                      FilterChain chain) throws IOException, ServletException {      
    •     HttpServletRequest req = (HttpServletRequest) request;      
    •     chain.doFilter(new <span style="color: #000000;">XssRequestWrapper</span>(req), response);      
    • }  
    在web.xml中配置指定请求进行过滤,可以有效防止xss攻击,希望本文所述对大家熟练掌握防止xss攻击的方法有所帮助。

    来源:https://www.jb51.net/hack/421871.html
    免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

    最新评论

    浏览过的版块

    QQ Archiver 手机版 小黑屋 福建二哥 ( 闽ICP备2022004717号|闽公网安备35052402000345号 )

    Powered by Discuz! X3.5 © 2001-2023

    快速回复 返回顶部 返回列表