HTTP系列之Web 安全

451 阅读3分钟

Web 安全

跨站脚本攻击(XSS)

跨站脚本攻击是指通过存在安全漏洞的 Web 网站注册用户的浏览器内运行非法的 HTML 标签或 JavaScript 进行的一种攻击。

攻击案例

在用户输入框内或页面 URL 注入 JavaScript 代码:

img

通过注入脚本,使得用户在进行登录表单提交时,发送数据到攻击者网站,导致个人登录信息被窃取。

解决方案

  1. HTML 转义
  2. 对用户输入进行检查、过滤、转义
  3. X-XSS-Protection设置为 1(有效状态),它是针对 XSS 的一种对策,用于控制浏览器 XSS 防护机制的开关。
  4. 在响应的Set-Cookie字段,设置HttpOnly,它使 JavaScript 脚本无法获得 Cookie。

img

跨站点请求伪造(CSRF)

跨站点请求伪造攻击是指攻击者通过设置好的陷阱,强制对已完成认证的用户进行非预期的个人信息或认定信息等某些状态更新。

攻击案例

用户已登录站点(Cookie 持有已认证的回话 ID),点击攻击者在留言板上发表的恶意代码评论<img src="http://example.com/msg?q=您好">,用户点击该图片,会发送评论请求,并且由于携带 Cookie,留言板也会留下该评论。

img

解决方案

  1. 验证码:发送请求前强制用户与应用进行交互,一定程度可以遏制 CSRF 攻击,但不能作为主要方案。
  2. token验证,由于 Cookie 会在时发送请求,自动携带发送给服务端,所以可以增加 token,不存放在 Cookie 内,服务端验证时对比 token,相当于在 Cookie 外增加一层条件验证。
  3. referer check:请求首部的 Referer 指令会告知服务器请求的原始资源的 URI,服务器可以以此作为依据判断,需要注意处理用户从浏览器搜索进入页面的情况。

用户登录安全及认证

用户密码安全

密码需要做加密处理,防止被截取破解,最好是基于 SSL 传输。

身份认证

  1. 基本认证机制

HTTP 提供一个原生的质询/响应框架,简化对用户的认证过程。

  • 客户端发起不包含认证信息的请求;
  • 服务器接收到后返回 401 Unauthorized,并会在WWW-Authenticate首部告知客户端适用于访问请求 URI 所指定资源的认证方案和带参数提示的质询;
  • 客户端重新发出请求,附加Authorization首部,说明认证算法、用户名和密码;
  • 如果授权正式是正确的,服务器就会将文档返回,可能会在可选的Authentication-info首部返回一些与授权会话相关的附加信息。
  • 缺点:密码采用 Base-64 编码,容易被解码获取,易被第三方捕获,服务器和客户端的身份容易被假冒。
  1. HTTPS

  2. token

  • 先获取 token