漏洞:反射型 XSS 攻击

什么是反射型 XSS 攻击?

反射型 XSS 是指应用程序通过 Web 请求获取不可信赖的数据,并在未检验数据是否存在恶意代码的情况下,将其发送给用户。反射型 XSS 一般可以由攻击者构造带有恶意代码参数的 URL 来实现,在构造的URL 地址被打开后,其中包含的恶意代码参数被浏览器解析和执行。这种攻击的特点是非持久化,必须用户点击包含恶意代码参数的链接时才会触发。

实现目的:

(其实说白了就类似于  SQL 注入,只不过一个是针对数据库,一个是针对 HTML )

 通过你提交的数据,实现反射型 XSS 可以比较容易地修改用户数据、窃取用户信息。

攻击示例:

例如:下面 JSP 代码片段的功能是从 HTTP 请求中读取输入的用户名 (username) 并显示到页面,如果 name 里有包含恶意代码,那么 Web 浏览器就会像显示 HTTP 响应那样执行该代码,应用程序将受到反射型 XSS 攻击
<%String name= request.getParameter("username"); %>
姓名: <%= name%>

为了避免反射型 XSS 攻击,建议采用以下方式进行防御

1.对用户的输入进行合理验证(如年龄只能是数字),对特殊字符(如`<、>、'、"`以及 `<script>、javascript` 等进行过滤。
2.根据数据将要置于 HTML上 下文中的不同位置(HTML 标签、HTML 属性、JavaScript 脚本、CSS、URL),对所有不可信数据进行恰当的输出编码。
3.设置 HttpOnly 属性,避免攻击者利用跨站脚本漏洞进行 Cookie 劫持攻击。
(其实白话理解就是,返回参数不要和请求参数一致,对用户输入的参数进行验证,确保没有包含 HTML 或 JS 等代码)

代码示例:

 错误示例:传入参数对象,不管参数对象有用没用全部返回

@ResponseBody
@RequestMapping(value = "getMap")
public Map getMap(Map map){
    // xxxx 业务逻辑
    return map;
}
  正确示例:传入参数对象,返回可用参数
@ResponseBody
@RequestMapping(value = "getMap")
public Map getMap(Map map){
    // xxxx 业务逻辑
    Map m = new Map()
    m.set(xxxx);
    m.set(xxxx);
    return m;
}

 或者对后台传入参数进行代码过滤(简写的过滤方法)

@ResponseBody
@RequestMapping(value = "getMap")
public Map getMap(String str){
    Map map = new Map();
    // xxxx 业务逻辑
    Pattern p_script;
    Matcher m_script;
    String regEx_script = "<[\\s]*?script[^>]*?>[\\s\\S]*?<[\\s]*?\\/[\\s]*?script[\\s]*?>"; //定义script的正则表达式{或<script[^>]*?>[\\s\\S]*?<\\/script> }
    p_script = Pattern.compile(regEx_script,Pattern.CASE_INSENSITIVE);
    m_script = p_script.matcher(str);
    str = m_script.replaceAll(""); //过滤script标签
    // 业务逻辑
    map.setxxxx(str);
    return map;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

平凡的人类

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值