WEB前端安全——Cookie安全、密码安全、点击劫持

3,327 阅读3分钟

一 Cookie安全

Cookie的安全和CSRF是有紧密联系的,CSRF攻击本质就是利用Cookie存储的信息。下面介绍几个重要的Cookie的属性。

1 Secure

指定Cookie是否只能通过https协议访问,一般的Cookie使用HTTP协议即可访问,如果设置了Secure,则只有当请求是使用https协议时cookie才会被发送到服务端。

2 HttpOnly

如果在Cookie中设置了"HttpOnly"属性,那么通过程序(JS脚本、Applet等)将无法读取到Cookie信息。这是防御XSS的一个方法。

3 SameSite

SameSite-cookie的目的是尝试阻止CSRF以及XSS攻击,可以防止cookie被非同源的网站利用。但是这个属性有浏览器兼容性的问题。其有两个值:

Strict 严格模式,表明这个 cookie 在任何情况下都不可能作为第三方 cookie,绝无例外。

Lax 宽松模式,比 Strict 放宽了点限制。假如请求是同步请求(改变了当前页面或者打开了新页面)且同时是个 GET 请求,则这个 cookie 可以作为第三方 cookie。假如请求是异步请求,或者页面跳转是通过表单的 post 提交触发的,则不会发送。

二 密码安全

1 密码泄露渠道

  • 数据库泄漏
  • 服务器入侵
  • 传输过程被窃听

2 密码安全要求

  • 存储安全:严禁明文存储
  • 传输安全:严禁明文传输、限制频率

严禁明文传输的意义是防止传输过程中明文密码被窃听,严禁明文存储的意义是防止明文密码被盗取或泄漏。

3 传输安全

HTTP在传输过程中是明文的,这意味着我们网站的信息是会被泄漏的,也意味着攻击者可以对我们的网站进行劫持,例如注入广告。解决方案是升级HTTPS,HTTPS是加密传输的。当然,HTTPS也有许多的设置,有一些加密方式也是不安全的,这需要开发者进行选择。

4 密码加固方法

  • 单向变换(哈希算法)——防泄漏
  • 变换的复杂度要求(多次变换)——防猜解
  • 密码复杂度要求(加盐)——防猜解

密码加固主要是通过哈希算法(即摘要算法,例如MD5/SHA)对密码进行处理,这种算法是不可逆的,但是可以通过彩虹表进行破解,所以对密码进行一次哈希处理是不够安全的,可以通过多次哈希处理以及多次不同的哈希算法来提高破解难度。也可以在哈希处理前,给密码加盐(在密码固定位置中加入特定的字符串)来提高密码的复杂度。

5 前端加密

前端加密的意义有限,能防止密码明文在传输过程中被窃听和泄漏,但是无法阻止用户资料被盗取或被登录,意思是前端加密的密码只能保证明文密码不泄漏,但是无法保证前端加密后的密码不泄漏。

三 点击劫持

点击劫持,又称界面伪装攻击,攻击者一般通过透明的iframe(目标网站),覆盖在攻击者的网页上,并诱导用户进行操作。这种一般会利用XSS或CSRF漏洞来进行攻击。解决方案是通过设置HTTP头X-Frame-Options,来防止网页被Iframe加载。它有三个值:

DENY:浏览器会拒绝当前页面加载任何frame页面

SAMEORIGIN:frame页面的地址只能为同源域名下的页面

ALLOW-FROM origin:允许frame加载的页面地址

四 后记

本文简单地介绍了Cookie安全、密码安全、点击劫持这三个方面值得注意的地方,如果想了解更详细的前端安全,可以阅读本文的大哥篇: WEB前端安全——XSS和CSRF