前端安全

XSS(跨站脚本攻击)

XSS 攻击指的是跨站脚本攻击,是一种代码注入攻击。攻击者通过在网站注入恶意脚本,使之在用户的浏览器上运行,从而盗取用户的信息如 cookie 等

XSS 本质是因为网站没有对恶意代码进行过滤,浏览器不能分辨那些脚本是可信的,从而导致了恶意代码的执行

获取页面数据 & DOS 攻击 & 破坏页面结构 & 流量劫持

反射性 XSS

攻击者诱导用户访问一个带有恶意的 URL,服务端接受数据处理后,将代码发送给浏览器,浏览器端解析这段带有 XSS 代码的数据后当做脚本执行

存储性 XSS

恶意脚本会存储在目标服务器上,当浏览器请求数据时,脚本从服务器传回并执行

DOM-Based XSS

修改页面的 DOM 节点形成的 XSS

防御

  • 静态网站 & 对插入 HTML 部分做充分的转义
  • 使用 CSP ,CSP 的本质是建立一个白名单,告诉浏览器哪些外部资源可以加载和执行,从而防止恶意代码的注入攻击。
  • 对一些敏感信息进行保护,比如 cookie 使用 http-only,使得脚本无法获取。也可以使用验证码,避免脚本伪装成用户执行一些操作。

CSRF(跨站请求伪造)

CSRF 攻击指的是跨站请求伪造攻击,攻击者诱导用户进入第三方网站,保存了登录状态,攻击者就可以利用这个登录状态,绕过后台的用户验证,冒充用户向服务器执行一些操作。

本质利用 Cookie 会在同源请求中携带发送给服务器的特点,来实现用户的冒充

防御

  • 进行同源检测
  • 使用
  • CSRF-TOKEN 进行验证
  • 双 Cookie 进行双重验证
  • Cookie 属性设置成 Samesite

中间人攻击

中间⼈ (Man-in-the-middle attack, MITM) 是指攻击者与通讯的两端分别创建独⽴的联系, 并交换其所收到的数据, 使通讯的两端认为他们正在通过⼀个私密的连接与对⽅直接对话, 但事实上整个会话都被攻击者完全控制。在中间⼈攻击中,攻击者可以拦截通讯双⽅的通话并插⼊新的内容。

劫持

DNS 劫持

  • DNS 强制解析: 通过修改运营商的本地 DNS 记录,来引导⽤户流量到缓存服务器
  • 302 跳转的⽅式: 通过监控⽹络出⼝的流量,分析判断哪些内容是可以进⾏劫持处理的,再对劫持的内存发起 302 跳转的回复,引导⽤户获取内容

HTTP 劫持

由于 http 明⽂传输,运营商会修改你的 http 响应内容(即加⼴告)

使用 https & 加密代理 & CSP 内容安全策略

前端网页劫持

  • 跳转劫持:通常对比访问的 URL 是否是之前要访问的 URL,如果 URL 不一致,则记录上报。
  • 注入型劫持
    • 注入 JS:在正常页面注入劫持的 js 代码实现的劫持
    • 注入 iframe:将正常页面嵌入 iframe 或者页面增加 iframe 页面

HTTPS 中的 TLS/SSL 加密详解