Mar*_*ine 9 php passwords hash phpass
我正在创建一个处理大量个人数据的服务,因此让密码简单地飞出来是不合适的.我一直在寻找任何可能的解决方案,引起我注意的是phpass.我在这里读过StackOverflow上的内容.
我知道有很多关于这个问题的问题,但我想澄清一下,phpass是一种存储密码的安全方式.我怀疑的原因是它不使用任何盐(至少似乎没有使用),这是我被告知的安全存储的关键.
我当前的方法只是一个sha512-hash,其中包含一个特定于用户的salt,以及另一个特定于站点的哈希.这是我的PHP代码的剪辑:
hash_hmac('sha512', $password.$account_specific, $site_specific);
Run Code Online (Sandbox Code Playgroud)
很高兴听到一些关于这个问题的专家意见.我为创建另一个已经并将永远被问及的主题的线程而道歉.提前致谢.
编辑:
我也听说过哈希密码,比方说1000次也是存储密码的好方法.这种散列方式只需要几秒钟(最大值),但是打破散列密码会花费很多年龄?
在处理网络安全主题时,没有"真正的"安全的做事方式.网络安全本质上是一种猫捉老鼠的游戏; 日常用户是老鼠,黑客是猫.Web安全主要是被动的,这意味着只有在发生安全漏洞时才会考虑新的安全实现.因为这个黑客通常比安全实施领先一步.
话虽如此,您可以采取一些措施来提高网站的安全性:
1)使用盐值.
我知道你已经这样做了,这是一个很好的做法.说使用盐使您的应用程序安全,这是错误的,因为它没有.它使得攻击变得更加困难,是的,但是如果你在数据库中存储salt值并且最终得到整个数据库被注入/转储,那么黑客就拥有了使用彩虹表所需的所有信息.使用特定于应用程序的salt是一种额外的安全措施,但同样,如果您的应用程序被黑客入侵并且获得/反编译源代码,那么黑客就拥有了他们所需要的一切.
2)使用SSL证书
确保数据在进入/来自应用程序所在的服务器时是加密的,这是防止数据包嗅探和会话侧面升级的好方法.
3)使用SHA2哈希
SHA2哈希值被广泛实现,并且比它们的前身SHA1安全多倍.
4)让您的数据库和应用程序驻留在不同的服务器上.
如果您将数据库放在单独的服务器上(或至少在某个具有单独IP的地方),则可以将对数据库的访问限制为给定的呼叫IP地址/端口.这样,您可以确保可以对您的数据库进行的唯一调用来自您的应用程序.
5)使用存储过程而不是动态创建查询.
如果您的应用程序中包含逐行构建SQL查询的代码,则攻击者可以使用此信息来映射数据库的结构,然后有效地注入它.如果您使用存储过程,那么这个逻辑将从源代码的角度抽象出来,攻击者无法通过查看它们来了解您的数据库结构.
6)检查所有可能的注射点
试着破解你自己的应用程序.你知道的最好,所以你应该知道它最薄弱的一点.虽然开发人员可能会在那里制作一些最差的QAers,但是确定是否可以打开可注射孔.您是否有使用用户输入来格式化查询的地方?如果是这样,请弄乱输入,看看你能做些什么.
根据我的经验,如果你做了以上所有,那么你受到很好的保护.没有什么是100%安全的,但除非你持有十亿美元免费现金赠送方式的密码,否则这些障碍将阻止绝大多数黑客(如果不是全部的话).在一些大公司的网站上工作,这些网站中的一些网站使用缺乏安全性是荒谬的(咳嗽*咳嗽*SONY 咳嗽*咳嗽*).
请记住,许多用户喜欢在不同的平台上使用相同的密码.如果用户A为您的站点(一个安全的站点)和另一个站点(一个不安全且不散列密码的站点)使用相同的密码,那么攻击者只需要找到最薄弱的链接.用户的浏览习惯并从那里获取纯文本密码.
最好的祝福,
| 归档时间: |
|
| 查看次数: |
2960 次 |
| 最近记录: |