网络安全和前端 | 青训营笔记

109 阅读1分钟

这是我参与「第四届青训营 」笔记创作活动的的第6天

攻击者

xss攻击

  • 在页面中注入恶意的脚本从而攻击

  • 利用开发者的信任,直接转化字符串为dom

  • 特点

    • 难以从UI上感知
    • 窃取信息(cookie/token)
    • 绘制UI从而诱导用户
  • 比如在提交时

  • fetch("submit",{
        body:JSON.stringify({
            id:"1",
            content:`<script>alert("xss");<script>`
        })
    })
    
  • 这就使得当这段信息展示时键入脚本

  • 存储型xss:恶意脚本存到数据库中,危害最大(对全部用户可见)

  • 反射性xss:从URL攻击,修改URL中的参数命中xss代码

  • 基于dom:在浏览器中从url的参数读取值实现,类似反射型,只不过在浏览器中注入

  • 基于mutation攻击,按浏览器区别攻击。

CSRF

  • 在用户不知情的前提下,利用用户权限构造指定HTTP请求窃取信息
  • 比如恶意页面,用户一点击就触发某个恶意api

注入

  • 如:在请求上注入sql参数,导致服务端进行了某些数据库操作
  • CLI注入
  • OS command注入
  • SSRF服务端伪造请求:攻击者进入内网

DOS

  • 攻击者疯狂请求使得服务器无法响应
  • 基于正则:/^((ab)*)+$/,攻击者发送一个容易造成回溯行为的字符串导致匹配查找次数过多
  • DDoS:不搞复杂的,量大就完事
  • 特点:直接范围IP,任意api,耗尽带宽
  • 构造大量TCP,发大量SYN,当不进行第三次握手,连接无法释放,服务器卡在最大连接

基于传输层

  • 中间人攻击方式:B/S插一个中间人窃取信息
    • 利用了名文传输
    • 信息篡改不可知
    • 身份不加验证

防御者

xss

  • 不要相信用户的提交
  • 认为用户提交的内容是string而非dom
  • 现代框架和浏览器都有现成防御工具,服务端有DOMPurify
  • string->DOM 对string转义
  • svg 进行扫描
  • 尽量不要允许用户自定义链接,允许要进行扫描
  • 同源策略
  • CSP策略:定义哪些域名和脚本可以执行,对eval和某些内联标签直接拒绝

CSRF

  • 如果伪造请求是异常来源就拒绝
  • 利用token,和具体用户绑定
  • iframe攻击:iframe的请求是同源请求,可以利用一个响应头部设置X-Frame-Options:对iframe进行限制
  • SameSite Cookie:页面cookie只能为我所用
  • node方面:利用中间件

注入

  • 找到代码中的sql部分,提前编译导致sql注入无法实现
  • 不要提供root权限
  • 建立白名单
  • 对URL类型进行限制
  • 利用扫描工具防止低效正则或拒绝用户正则
  • DDoS:负载均衡、API网关、CDN、快速自动扩容、非核心业务降级

中间人

  • HTTPS
  • 可靠(加密)、完整(MAC验证)、不可抵赖(数字签名)
  • TLS握手

![T0)0]ZPREE}P5)$_328XEG0.png](p1-juejin.byteimg.com/tos-cn-i-k3…?)

思考

为什么安全永远是我们需要考虑的问题,这里我引用我的OS老师说过的一个有哲学意义的解释:你的系统是一个由点构成的圈,攻击者可以从任何一个地方攻击,但你的防御是那些点。我们不可能解决所有的漏洞,安全就是攻击和防御不断比拼的过程。