Skip to content

Latest commit

 

History

History
182 lines (115 loc) · 9.02 KB

File metadata and controls

182 lines (115 loc) · 9.02 KB

安全漏洞攻击

代码安全指南

  1. XSS

    跨站脚本(Cross-Site Scripting,XSS)是恶意代码注入网页。利用用户对指定网站的信任。

    1. 攻击方式

      所有可输入的地方,若没有对输入数据进行处理的话,则都存在XSS漏洞。

      • 通过巧妙的方法注入恶意指令代码(HTML、JS、Flash、<iframe>,任何能写url的地方包含javascript: 可执行代码)到网页内容,使用户加载并执行恶意程序。

        攻击成功后,能够:盗取用户cookie、破坏页面结构、重定向到其它地址、利用用户机器执行各种非客户意愿的行为(如:发起请求、向其他网站发起DDoS攻击)等。

    2. 防御措施:

      1. 过滤用户输入(白名单HTML标签和标签属性)

        去除或转义(如:HTML的字符实体)、对URL编码(encodeURI)。

        e.g. js-xss

      2. HttpOnly

        cookie设置为HttpOnly不能在客户端使用document.cookie访问。

      3. 开启浏览器CSP(Content-Security-Policy,内容安全策略),设置不允许加载白名单外的域名资源

        指令细节:MDN:Content-Security-Policy

        1. HTTP响应头:

          Content-Security-Policy: 具体指令

        2. .html<meta>

          <meta http-equiv="Content-Security-Policy" content="具体指令">

        • (已被CSP拒绝执行)避免动态执行JS脚本的方式(执行字符串):evalnew FunctionsetTimeout/setInterval

      Flash的安全沙盒机制配置跨域传输:crossdomian.xml

  2. CSRF

    跨站请求伪造(Cross-Site Request Forgery,CSRF)是 第三方网站 挟制用户 在已登录的网页上执行非本意操作。利用网站对用户浏览器的信任。

    1. 攻击方式

      • 当用户已经得到目标网站的认可后,在第三方网站 对 目标网站 进行请求操作。

        攻击成功后,能够:进行所有目标网站的请求操作。

    2. 防御措施

      1. 同源策略

        1. 检查HTTP请求的Referer字段(Referer:请求来源地址),若不是信任的请求来源地址,则拒绝

          地址栏直接输入内容不会提供Referer

        2. 跨域请求的限制(利用CORS等)

        3. cookie设置SameSite属性(cookie不随着跨域请求发送)

      2. 添加校验token

        token:判断用户当前的会话状态是否有效(短时效性)。思路是请求需要携带一个攻击者无法获取到的令牌,服务端通过校验请求是否携带了合法的令牌,来判断是否是正常合法的请求。

        目标网站请求 需要额外提供 保存在页面中的随机校验码(校验码不保存在cookie即可,因为需保证用户必须实时在目标网站才能获取到)。可以放进请求参数、或自定义HTTP请求头。

      3. 验证码

        保证用户必须和目标网站进行交互后才可以发起请求。

      4. POST请求替代GET请求

        都可能被利用,但POST安全性高些:不会明文把参数写在url上;HTML标签自动请求GET请求(如:<img src="GET请求">),更容易被利用。

  3. 其他攻击

    1. 注入型劫持

      通过在正常的网页中注入广告代码(JS代码、<iframe>、其他标签等),实现页面弹窗提醒或者底部广告等。

      1. 攻击方式

        运营商劫持。

      2. 防御措施

        全链路HTTPS(若使用CDN,则必须CDN请求和回源都是HTTPS)。

        额外增加劫持难度:前端还可以用子资源完整性(SRI)验证加载文件的哈希摘要。

    2. DNS攻击

      使域名指往不正确的IP地址。

      1. 攻击方式

        1. 针对DNS服务器:DDoS攻击。
        2. 针对用户:DNS欺骗或劫持(访问恶意DNS服务器)、DNS缓存服务器投毒或污染、本机劫持(hosts文件篡改、本机DNS劫持、SPI链注入、DHO插件)。
      2. 防御措施

        1. 使用安全的DNS服务器。
        2. VPN或域名远程解析。
        3. 查杀病毒,清空DNS缓存。
    3. SQL注入(SQL Injection)

      运行非法的SQL。

    4. OS命令注入攻击(OS Command Injection)

      通过Web应用,执行非法的操作系统命令。

    5. HTTP头部注入攻击(HTTP Header Injection)

      通过在响应头部字段内插入换行,添加任意响应头部或主体。

    6. 邮件头部注入攻击(Mail Header Injection)

      向邮件头部To或Subject内任意添加非法内容,可对任意邮件地址发送广告邮件或病毒邮件。

    7. 目录遍历攻击(Directory Traversal,Path Traversal)

      对本无意公开的文件目录,通过非法截断其目录路径后,达成访问目的。

    8. 远程文件包含漏洞(Remote File Inclusion)

      当部分脚本内容需要从其他文件读入时,利用指定外部服务器的URL充当依赖文件,让脚本读取之后,就可运行任意脚本。

    9. 强制浏览(Forced Browsing)

      从安置在Web服务器的公开目录下的文件中,浏览那些原本非自愿公开的文件。

    10. 不正确的错误消息处理(Error Handling Vulnerability)

      Web应用的错误信息内包含对攻击者有用的信息。

    11. 开放重定向(Open Redirect)

      假如指定的重定向URL到某个具有恶意的Web网站,那么用户就会被诱导至那个Web网站。

    12. 会话劫持(Session Hijack)

      通过某种手段拿到了用户的会话ID,并非法使用此会话ID伪装成用户。

    13. 会话固定攻击(Session Fixation)

      强制用户使用攻击者指定的会话ID。

    14. 点击劫持(ClickJacking)、界面伪装(UI Redressing)

      利用透明的按钮或链接做成陷阱,覆盖在Web页面上。然后诱使用户在不知情的情况下,点击那个链接访问内容。

    15. 密码破解(Password Cracking)

      1. 穷举法(Brute-force Attack,暴力破解法)

        对所有密钥集合构成的密钥空间(Keyspace)进行穷举。即,用所有可行的候选密码对目标的密码系统试错。

      2. 字典攻击

        利用事先收集好的候选密码(经过各种组合方式后存入字典),枚举字典中的密码。

        如:生日日期数值化。

      • 一种安全的服务端存储密码方式:

        先利用给密码加盐(salt)的方式增加额外信息,再使用散列(hash)函数计算出散列值后保存。

        加盐

        由服务器随机生成的一个字符串,保证长度足够长,且是真正随机生成。然后把它和密码字符串相连接(前后都可以)生成散列值。当两个用户使用了同一个密码时,由于随机生成的salt值不同,对应的散列值也将不同。这样一来,很大程度上减少了密码特征,攻击者也就很难利用自己手中的密码特征库进行破解。

    16. DoS攻击(Denial of Service attack)、服务停止攻击或拒绝服务攻击

      运行中的服务呈停止状态的攻击。

      1. 集中利用访问请求造成资源过载。

        DDoS(Distributed Denial of Service attack)利用多台计算机发起Dos攻击。

      2. 通过攻击安全漏洞使服务停止。

    17. Hash Collision DoS

      参考:HASH COLLISION DOS 问题

      Hash碰撞的拒绝式服务攻击(Hash Collision DoS)是对服务器进行恶意负载。

      1. 攻击方式

        1. Hash:把任意长度的输入,通过散列算法,输出固定长度的散列值。
        2. Hash Collision DoS:利用各语言Hash算法的「非随机性」,制造出无数value不同、key相同的数据,让Hash表成为一张单向链表,而导致整个网站的运行性能下降。
        • 找到hash算法漏洞,不断提交服务器请求导致无数hash碰撞,进而形成类似单向链表的存储结构。

          攻击成功后,能够:hash堆积、查询缓慢、服务器CPU高负荷、服务器内存溢出。

      2. 防御措施

        1. 升级hash算法。
        2. 限制POST参数个数和请求长度。
        3. 防火墙检测异常请求。
  • 验证码

    仅能预防机器行为:防止广告机注册、发帖、评论,防止暴力破解密码。

    1. 服务端生成图片,前端根据图片发送请求给服务端验证。
    2. 前端生成并验证