归档 2016 年 10 月

简谈几种网站漏洞及其应对方式

用户密码存储

现在的网站几乎不再使用明文密码存储的方式了,而是改用只在数据库中存储明文密码的 hash。常见的 hash 算法有 MD5 和 SHA,可以从任何一段字符串计算出一段固定长度的哈希 值。这样当用户输入密码时,直接将该密码代入算法得出 hash 值,再与存储的 hash 值对比,相同则允许登录。用户注册时也是直接存储密码的 hash 值,而不是明文密码。这样就防止数据库泄露的时候导致用户明文密码泄露。 但是随着计算能力大幅提高,MD5 和 SHA1 算法已经不再推荐使用了,这些算法被碰撞 的几率已经越来越大了。而应该采用加盐的方式,比如说 SHA256 加 salt 后 使用 PBKDF2 算法处理,该算法计算消耗的 CPU 时间非常多,能大大减慢暴力破解速度。

XSS

XSS 漏洞跨站脚本攻击是常见的漏洞。其原理是攻击者向有 XSS 漏洞的网站中传入恶意的 HTML 和 JavaScript 代码,当其它用户浏览该网站时,JS 代码会自动执行,从而达到攻击的目的。比如盗取用户 Cookie 等。 常见的应对方式有过滤危险的 JavaScript 和 HTML 属性、对HTML输出进行转义等。

SQL 注入

SQL 注入攻击,也是 Web 开发中最常见的一种安全漏洞。可以用它来从数据库获取密码等信息,甚至有可能获取数据库等系统的 root 权限。造成 SQL 注入的原因是因为程序没有 有效过滤用户的输入,使攻击者成功的向服务器提交恶意的 SQL 查询代码,程序在接收后将攻击者的输入作为查询语句的一部分执行,导致原始的查询逻辑被改变,额外的执行了攻击者的代码。应对方式有输入过滤等。

CSRF

CSRF可以伪造受信任用户的请求来利用受信任的网站。攻击者可以在第三方网站hacker.com 设置代码,用户在浏览这些网页的时候向 victim.com 跨域发送数据,浏览器根据同源策略,带上了 victim.com 的 cookies,导致请求被伪造,可能造成很大的危害,比如添加管理员、修改密码等。通常的应对方法有对特定请求增加token验证,token是在Cookies 中读取的,而根据同源策略,hacker.com 是无法读取 victim.com 的 Cookies 的,这样就无法伪造 token。后端服务器只要对比 Cookies 中的 token 和请求头中的 token 是否一致就可以了。

1