xss漏洞及排查

xss漏洞

举个例子说明,假设server端有这么一个rest接口(我们用flask实现):

@app.route('/test')
def hello_world():
    name = request.args.get('name')
    return 'hello, %s' % (name)

它直接返回前端输入的名字。那我们就可以构造如下url造成xss攻击:

http://localhost:8013/test?name=%3Cscript%3Ealert(document.domain);%3C/script%3E

name为:

<script>alert(document.domain);</script>

界面会弹出domain域的对话框。

上述攻击是后端将前端的输入未做任何处理,直接返回到web界面上造成,称之为反射型xss。

还有一种存储型xss,后端对前端输入未做处理,存到数据库中。后续每个用户来访问页面,数据库的数据都会加载到界面上,从而形成xss攻击。

这两种xss,客观上形成了一种动态页面或非法链接,造成浏览器解释非法脚本。

xss的影响很大,试想,上述链接如果是银行系统的一个url,且存在反射型xss漏洞,黑客将该链接以钓鱼邮件的方式发送给某人,某人一看url是合法的,点进去,可能直接就把自己的登录cookie交出去了。黑客拿到cookie,基本上相当于免密登录那人的银行系统。

参考该文

漏洞排查

要分前后端排查。

前端,如果使用的是vue框架,要关注v-html、v-bind:action、v-bind:href等指令,因这些指令可能指向由用户控制的变量,黑客就可以构造如下输入造成xss攻击:

javascript:alert(document.domain);
<img src=x onerror='alert(/xss/)'>
<a href="javascript:alert(document.domain);">
<script>alert(/xss/)</script>;
<table background="javascript:alert('XSS')">

后台,可以使用Filter,对部分rest请求的响应做xss防护,主要是对一些特殊字符的处理,比如:

<、>、src、<script>、eval、javascript、onload、alert

从原理上讲,后台的XssFilter的防护不是一定要的,还是要看前端怎么使用后台返回的数据,如果前端把后台返回的数据直接显示为html、链接或界面响应事件,才可能存在xss风险。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值