做项目时需要考虑的安全性问题
在开发一个项目的时候,大家经常会忽略项目的安全性问题,有很多的安全性问题其实就是一个意识的问题,解决起来并不复杂,但是因为这些疏忽,却可能会给我们的用户带来很大的风险。下面就列举一些在做项目的时候应该考虑的一些安全性问题。
密码保存
保存密码的第一准则是不能明文保存密码,之前CSDN密码泄露一事还记忆犹新。通常的做法是对密码进行不可逆加密,加密时不要使用MD5或者SHA系列的算法加密,现在对这两个算法的破解研究工作已经有了相当的进展。推荐使用bcrypt。
CI服务器的安全性
CI服务器和Build服务器经常是攻击者最完美的跳板,这些服务器几乎拥有你系统的所有权限(代码库,各个生产环境的访问权限等等)。请确保其安全。
校验客户端安全证书的“指纹”
当使用SSL时,我们需要验证安全证书的“指纹”来确认该证书是有目标网站颁发的证书,这可以有效防止“中间人攻击”漏洞。
随机生成密码
不要对所有账户设置同一个密码,一锅端就不好了,使用密码管理软件为每一个账户生成一个独立的密码。当前比较推荐的是1Password,期待有更好的密码管理软件诞生。
使用安全系数更高的随机数生成类库
要想得到真正的随机数是很困难的,尤其是要满足安全领域的随机数标准,语言自带的一般随机数生成算法很难满足需要,所以JDK还提供了SecuredRandom这样的类,Ruby中也有SecureRandom这样的模块。
总是使用HTTPS和HSTS
如无值得信服的理由,所有的请求都应该使用加密协议
不要使用“安全问题”找回密码
一个桶能装多少水是有最短的那块木板决定的,一个安全系统的安全性也是有最薄弱的环节决定的。不要让安全问题成为你的那块短木板。
不要限制密码长度
通过密码长度来保证安全性的时代已经结束了,让用户使用"Pass Phrases"是一个不错的主意。
允许对密码或者密码短语使用更直观的复杂度控制
使用更有效,直观的方法帮助用户增加密码或者密码短语的难度。而不是简单的必须有大小写,必须超过8位等这些生硬的条件。
避免缓冲溢出
在弱类型语言中,最常见的安全性问题就是缓冲溢出,这也是最常见的一种远程攻击方法,一般有四种防范方法: * 通过操作系统使得缓冲区不可执行,从而阻止攻击者植入攻击代码。 * 写正确的代码 * 利用编译器的边界检查来实现缓冲区的保护。 * 在程序指针失效前进行完整性检查
避免注入攻击
所有的用户输入必须经过验证和清理才能传递给下游,最常见的就是SQL注入攻击
避免跨站脚本攻击
系统需要保证用户不能在页面中嵌入未经验证的信息
避免泄露信息给第三方
目前很多系统倾向于泄露信息给第三方,比方说Google,Facebook,新浪微博等等。这些第三方会窃取很多用户信息。
设置数据清理策略
只在需要数据时才保存数据,数据生命周期结束就清理掉,贼是没办法偷你没有的东西的。 1 楼 greatghoul 2013-04-17 引用CI服务器的安全性
这个以前还真没有注意过,受教了。