一、XSS

跨站脚本攻击(Cross-site scripting,aka XSS)是一种代码注入攻击。攻击者通过在目标网站上注入恶意脚本,使之在用户的浏览器上运行。利用这些恶意脚本,攻击者可获取用户的敏感信息如 Cookie、SessionID 等。本质是恶意代码未经过滤,与网站正常的代码混在一起;浏览器无法分辨哪些脚本是可信的,导致恶意脚本被执行

1、攻击方式

类型 存储区(恶意代码存放的位置) 插入点
存储型 XSS 后端数据库 HTML
反射型 XSS URL HTML
DOM 型 XSS 后端数据库/前端存储/URL 前端 Javascript
  • 存储型(持久型):用户打开目标网站时,网站服务端将恶意代码从数据库取出,拼接在 HTML 中返回给浏览器解析执行。常见于带有用户保存数据的网站功能,如论坛发帖、商品评论、用户私信等
  • 反射型(非持久型):用户被诱导打开带有恶意代码的URL时,网站服务端将恶意代码从URL中取出,拼接在 HTML 中返回给浏览器解析执行。常见于通过URL传递参数的功能,如网站搜索、跳转等
  • DOM 型:攻击者构造出特殊的URL,其中包含恶意代码。用户打开带有恶意代码的URL。用户浏览器接收到响应后解析执行,前端 JavaScript 取出URL中的恶意代码并执行。属于前端 JavaScript 自身的安全漏洞

2、预防方式

  • 输入过滤:对于明确的输入类型,如数字、URL、电话号码、邮件地址等等内容
    • 输入内容长度控制:对于不受信任的输入,限定一个合理的长度
    • 对 HTML 做充分转义:不同情况采用不同转义规则,采用成熟的的转义库
  • CSP(Content Security Policy):内容安全策略本质上是建立白名单,规定浏览器只能够执行特定来源的代码
  • HTTP-only Cookie:禁止 JavaScript 读取某些敏感 Cookie,攻击者完成 XSS 注入后也无法窃取此 Cookie
  • 验证码:防止脚本冒充用户提交危险操作

二、XSRF

CSRF(Cross-site request forgery,aka CSRF or XSRF)跨站请求伪造,是一种冒充受信任用户,向服务器发送非预期请求的攻击方式。本质是利用用户的登录态发起恶意请求

1、攻击方式

  • GET 类型的 CSRF:只需要一个 HTTP 请求
  • POST 类型的 CSRF:利用起来通常使用的是一个自动提交的表单。模拟用户完成了一次 POST 操作
  • 链接类型的 CSRF:需要用户点击链接才会触发。通常是在论坛中发布的图片中嵌入恶意链接,或者以广告的形式诱导用户

2、预防方式

  • 多使用 post 接口
  • 增加验证,例如密码、短信验证码、指纹等