yaofly2012 / note

Personal blog
https://github.com/yaofly2012/note/issues
44 stars 5 forks source link

web安全 #21

Open yaofly2012 opened 5 years ago

yaofly2012 commented 5 years ago
  1. XSS

  2. MIME混淆攻击

  3. CSRF攻击: https://segmentfault.com/a/1190000016659945#articleHeader0

  4. XXSI

  5. 幽灵和熔断漏洞(Spectre & Meltdown)

  6. Site Isolation

  7. 流量攻击,DDoS(Distributed denial-of-service, 分布式拒绝服务) 攻击 利用大批量“流量”消耗被攻击服务器资源。 分布式:攻击者利用傀儡机(分布式的代理)发起攻击,主要目的隐藏自己身份; 拒绝服务:是指攻击的结果导致被攻击的服务器“拒绝服务”。

    • CC CC攻击是DDOS(分布式拒绝服务)的一种形式。主要针对应用本身的攻击(如访问网站耗时资源)。 带宽资源严重被消耗,网站瘫痪;CPU、内存利用率飙升,主机瘫痪;瞬间快速打击,无法快速响应。

肉鸡

  1. [网站被劫持攻击]

前端安全系列(二):如何防止CSRF攻击? egg Web 安全

yaofly2012 commented 4 years ago

CSRF(Cross-site request forgery)

也缩写成XSRF

一、原理

利用被攻击网站服务器用户网页浏览器的信任。

  1. 用户对合法网站的认证cookie(登录态等)会保存在浏览器端;
  2. 跨站请求时浏览器会携带相关cookie的;

当用户浏览恶意网页时,攻击者通过一些技术手段欺骗用户的浏览器去访问一个用户曾经认证过的网站并运行一些操作(如发邮件,发消息,甚至财产操作如转账和购买商品)。因为请求也是携带认证cookie信息的,服务端没有合适的防御措施的话就很难识别请求是用户正常请求还是CSRF请求。

特点:

结合原理和CSRF命名可以看出CSRF的特点:

  1. Cross Site: 攻击方在第三方站点;
  2. Request Forgery: 当用户浏览恶意站点时向被攻击的服务器发送操作请求。 攻击者不要获取用户的信息(cookie等),直接欺骗用户的浏览器,让其以用户的名义运行操。

二、攻击手段

直接引入前端安全系列之二:如何防止CSRF攻击?的DEMO:

受害者登录a.com,并保留了登录凭证(Cookie)。 攻击者引诱受害者访问了b.com。 b.com 向 a.com 发送了一个请求:a.com/act=xx。浏览器会默认携带a.com的Cookie。 a.com接收到请求后,对请求进行验证,并确认是受害者的凭证,误以为是受害者自己发送的请求。 a.com以受害者的名义执行了act=xx。 攻击完成,攻击者在受害者不知情的情况下,冒充受害者,让a.com执行了自己定义的操作。

三、防御

针对CSRF的攻击原理,制定防御策略:

  1. 攻击来自第三方站点:
    • sameSite cookie:告诉浏览器禁止跨站请求携带cookie;
    • 同源检测(验证HTTP Referer字段):服务器增强校验。
  2. 伪造请求 生成无法伪造的数据,服务器增强校验,识别伪造请求。

3.1 验证HTTP Referer字段

方案

[科普]跨站请求伪造-CSRF防护方法

缺点

  1. Referer配置不准确的话,很容易阻断正常请求;
  2. 后期维护困难,随着url的变化需不断修改Referer总之不推荐使用 注意:CSRF攻击中,Referer是无法伪造的。

3.2 在请求地址中添加token并验证

方案

[科普]跨站请求伪造-CSRF防护方法 利用token标记合法请求。

CSRF token的生成,下发,上送,校验

1. 生成

  1. 由服务端生成随机唯一的字符串(GUID, UUID等),并保存到服务端的session或者其他服务端缓存(如Redis);

    • token的缓存最好有过期时间;
  2. 如果希望提高token的安全性可以对生成的token进行对称加密

    2. 下发

    下发是服务端如何把生成的CSRF token传给客户端,方式很多了,看客户端怎么方便提取并传给后端。

  3. 通过Set-Cookie下发; Axios CSRF 防御就是采用这种方式。但是此时服务端不能从cookie里获取CSRF token

  4. 喷到页面里作为约定的全局变量;

  5. 最好和后端一起确定一个标准的下发和上送方式。

3. 上送

上送:是客户端调用接口时提取CSRF token并传给服务。看请求接口类型也后很多上送方式。

  1. 针对GET请求可以放入queryString里;
  2. Form POST请求可以添加隐藏域;
  3. AJAX, fetch请求还可以采用放入request header里;
  4. 最好和后端一起确定一个标准的上送方式。

注意:CSRF token最好别通过cookie方式上送。

4. 校验

  1. 服务端从请求里获取客户端上送的token
  2. 解密(如果之前有加密的话);
  3. 再跟从Seesion获取缓存的值对比。

四、哪些场景需要考虑CSFR

重要的场景都需要并且建议采用token方案,一些常见的case有:

  1. 支付类场景(支付,转账,充值);
  2. 取消/关注好友,转发,删除(日志,帖子等),发邮件等操作;
  3. 信息更改类(更好手机号,邮箱等)。

参考:

  1. wiki
  2. 前端安全系列之二:如何防止CSRF攻击?
  3. [科普]跨站请求伪造-CSRF防护方法
yaofly2012 commented 3 years ago

XSS ( Cross-site Scripting)/跨站脚本攻击 TODO

缩写CSS一般表示层叠样式表,所以Cross-site Scripting缩写是XSS

一、原理

利用浏览器在渲染HTML字符串时会执行相应的脚本:

  1. scripts标签指定的脚本;
  2. 其他标记的href, onerror等特性指定的脚本

这些恶意代码一般上送用户的cookie等敏感信息,或者执行挖矿代码。

特点

  1. Scripting:客户端执行脚本,攻击发生在客户端;
  2. Cross site:跨站。

二、攻击手段

XSS 攻击一般分为两类:

  1. Reflected XSS(反射型的 XSS 攻击)
  2. Stored XSS(存储型的 XSS 攻击)

2.1 Reflected XSS(反射型的 XSS 攻击)

恶意脚本通过被攻击的网站的URL注入。相对于存储型的 XSS 攻击,反射型XSS攻击是一种非持久性XSS攻击。常见于页面渲染的数据来自URL,比如搜索关键词等。

2.2 Stored XSS(存储型的 XSS 攻击)

恶意脚本被存储到被攻击的网站服务器了,当用于访问受攻击的页面时就会执行恶意代码。常见于有表单的网站,比如评论等。

三、防御

3.1 防御手段

  1. 在渲染用户输入的字符串时进行转义处理,把<>等字符转成HTML实体形式【必须】; 如果渲染的数据来自富文本编辑器,可以只转义<script>, </script>等非法标签或者特性的,可以借助第三方库(如下)。

  2. 存储型XSS攻击中可以在录入数据的环节过滤掉非法字符<script>, </script>【最好】。

3.2 React & XSS

React默认是阻止XSS攻击的。但是如果使用了dangerouslySetInnerHTML属性那开发就得自己处理XSS攻击了。

npm xss库

待研究

import xss from "xss"

const str = `
<div>
<p>hello</p>
<a href="javascript:alert('hell0');">hello</a>
<script>
console.log('xss attack')
</script>
</div>
`
export default function Index() {
    const p = xss(str);
    console.log(p)
    return <div>
        <h1>XSS</h1>
        <p>{str}</p>
        <p dangerouslySetInnerHTML={{__html: p}}/>
    </div>
}

3.3 浏览器和XSS

Content Security Policy (CSP)主要是用来定义页面可以加载哪些资源,可用于浏览器抵御XSS攻击。

看了下JD,携程首页都没有使用。

参考

  1. egg 安全威胁XSS的防范
  2. owasp Cross Site Scripting (XSS)
  3. 掘金 跨站脚本漏洞(XSS)基础讲解
  4. Which characters need to be escaped in HTML?
  5. portswigger Cross-site scripting