一 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