安全研发总结(二):XSS攻击及其防御

先看定义(根据AI回答修改调整):

XSS攻击,全称跨站脚本攻击(Cross-Site Scripting),是一种常见的Web安全漏洞。攻击者通过利用网页开发时留下的漏洞,注入恶意代码到网页中。当其他用户访问这些网页时,恶意代码会在用户的浏览器中执行,从而达到攻击的目的。

攻击成功后,攻击者可能获取用户的敏感信息,如Cookie、会话信息等,甚至执行更高权限的操作,如劫持用户会话、插入恶意内容、重定向用户到恶意网站等。XSS攻击的危害一般来说不如sql注入漏洞,但一次成功的XSS攻击可以进行很多操作,仍属于高危漏洞。

XSS攻击可以分为三种类型:

  1. 持久型XSS:攻击者将恶意代码植入到服务器上,每当用户访问含有该代码的页面时,都会受到攻击。
  2. 非持久型XSS(反射型XSS):攻击者将恶意代码包含在URL中,并通过诱使用户点击这些链接来触发攻击。。
  3. DOM型XSS:基于DOM(文档对象模型)的漏洞,攻击者利用客户端脚本处理逻辑的安全问题实施攻击。

html显示中如<div style='color:red'>123</div>会被解释成红色的123

想一个最简单的例子,前端接收一个msg参数,后端直接返回一个jsp页面
 

@WebServlet("/xssTestServlet")
public class XssTestServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String msg = req.getParameter("msg");
        req.setAttribute("msg",msg);
        req.getRequestDispatcher("xsstest.jsp").forward(req,resp);
    }
}
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<div style='color:red'>${msg}</div>
</body>
</html>


研发人员的本意只是想把msg当成一个普通的字符串处理,即无论用户输入什么,前端都应返回红色的内容。


但是如果用户输入参数

?msg=<h1 style='color:blue'>123<h1>


这个直接就显示成蓝色了。

关键是,研发人员应该控制把参数当成一个纯字符串,而不应对<h1 style='color:blue'></h1>当成html中的标签。

仔细看看会发现,xss攻击其实和sql注入攻击很像,都是通过输入一些未预期的参数来扭曲原本的语义,只不过前者扭曲的sql语句,后者扭曲的是html便签。

sql注入可以有预编译(PreparedStatement),html却没有;同样,html的输入也很难是一个白名单能列举完全的,那就只剩下一个,就是过滤、转义。

在过滤器中加上一个全局的输入转义或输入转义即可,由于post请求中可能带有 < > & 等符号,为了防止正常输入被转义后无法识别,建议只对输出转义即可。

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值