做项目时需要考虑的安全性问题

justjavac 发布于 2013/04/17 13:34
阅读 661
收藏 21

在开发一个项目的时候,大家经常会忽略项目的安全性问题,有很多的安全性问题其实就是一个意识的问题,解决起来并不复杂,但是因为这些疏忽,却可能会给我们的用户带来很大的风险。

下面就列举一些在做项目的时候应该考虑的一些安全性问题。 

密码保存  
保存密码的第一准则是不能明文保存密码,之前 CSDN 密码泄露一事还记忆犹新。通常的做法是对密码进行不可逆加密,加密时不要使用 MD5 或者 SHA 系列的算法加密,现在对这两个算法的破解研究工作已经有了相当的进展。推荐使用 bcrypt。 

CI 服务器的安全性  
CI 服务器和 Build 服务器经常是攻击者最完美的跳板,这些服务器几乎拥有你系统的所有权限(代码库,各个生产环境的访问权限等等)。请确保其安全。 

校验客户端安全证书的“指纹”  
当使用 SSL 时,我们需要验证安全证书的“指纹”来确认该证书是有目标网站颁发的证书,这可以有效防止“中间人攻击”漏洞。 

随机生成密码  
不要对所有账户设置同一个密码,一锅端就不好了,使用密码管理软件为每一个账户生成一个独立的密码。当前比较推荐的是 1Password,期待有更好的密码管理软件诞生。 

使用安全系数更高的随机数生成类库  
要想得到真正的随机数是很困难的,尤其是要满足安全领域的随机数标准,语言自带的一般随机数生成算法很难满足需要,所以 JDK 还提供了 SecuredRandom 这样的类,Ruby 中也有 SecureRandom 这样的模块。 

总是使用 HTTPS 和 HSTS  
如无值得信服的理由,所有的请求都应该使用加密协议 

不要使用“安全问题”找回密码  
一个桶能装多少水是有最短的那块木板决定的,一个安全系统的安全性也是有最薄弱的环节决定的。不要让安全问题成为你的那块短木板。 

不要限制密码长度  
通过密码长度来保证安全性的时代已经结束了,让用户使用 "Pass Phrases" 是一个不错的主意。 

允许对密码或者密码短语使用更直观的复杂度控制  
使用更有效,直观的方法帮助用户增加密码或者密码短语的难度。而不是简单的必须有大小写,必须超过 8 位等这些生硬的条件。 

避免缓冲溢出  

在弱类型语言中,最常见的安全性问题就是缓冲溢出,这也是最常见的一种远程攻击方法,一般有四种防范方法: 

  1. 通过操作系统使得缓冲区不可执行,从而阻止攻击者植入攻击代码。 
  2. 写正确的代码 
  3. 利用编译器的边界检查来实现缓冲区的保护。 
  4. 在程序指针失效前进行完整性检查 


避免注入攻击  
所有的用户输入必须经过验证和清理才能传递给下游,最常见的就是 SQL 注入攻击 

避免跨站脚本攻击  
系统需要保证用户不能在页面中嵌入未经验证的信息 

避免泄露信息给第三方  
目前很多系统倾向于泄露信息给第三方,比方说 Google,Facebook,新浪微博等等。这些第三方会窃取很多用户信息。 

设置数据清理策略  
只在需要数据时才保存数据,数据生命周期结束就清理掉,贼是没办法偷你没有的东西的。
加载中
0
Cavalier
Cavalier
我们一般采用的是MD5+置换。 这样的话。 安全就上升了一个等级
Cavalier
Cavalier
置换后再次md5
苏生不惑
苏生不惑
请问如何MD5+置换?
0
黄文祥
黄文祥
本地的系统大多数与第三方平台对接时都是采用http,也没说采用https。都是采用内网的形式来避免安全的问题
0
产品哥
产品哥
不要使用“安全问题”找回密码  ,请问用什么方法找?
David_Lee_
David_Lee_
手机、邮箱
0
th小米粥
th小米粥
MD5 只要你密码强度够也是一样的不好破解呢。
返回顶部
顶部