每个Web开发人员应该了解哪些encryption?
我刚刚登陆了PHP5演出。 我不会处理涉及超敏感数据的应用程序部分,但是我仍然对安全性和encryption方法感到尴尬。 我只知道非常基础(不要以明文存储密码,不允许用户使用发布数据运行代码等)。 我需要知道什么才能保证我的应用程序安全,我可以在哪里学习?
了解哈希和encryption之间的区别。 encryption通常是对string的双向解释。 我可以encryption我的密码,然后再解密成明文。 哈希背后的想法是,它们变成了单向的“encryption”。
在我的网站上,我把密码存储为散列。 任何时候当用户login时,我都会重新提供他们提供的密码,对存储在数据库中的哈希进行testing,并批准它们是否匹配。 如果忘记密码,我不能发给他们密码,因为(一般情况下)没有办法让我知道。两个不同的string可以转换成相同的哈希值,这使得(通常)不可能找出原始string是什么。
这是一个很好的理解和辨别何时使用encryption和散列的问题。
知道不要编写自己的encryptionfunction。 一个现有的,值得信赖的图书馆是最好的方法去尽可能。 避免冷静,尖端的技术,缺乏许多成功的程序员时间和用户时间在他们身后。 不要相信你select的function,除非你自己彻底地testing过,第一人称。 随时了解可能会在一夜之间阻止您select的function的新发展。 要知道,仅仅因为你正在使用现在最好的encryption技术,如果你把密钥放在桌子上,你什么也得不到保护(例如,明文不在caching中或者存储在同一个数据库的另一个表中,私钥不是左开)
- 理解encryption和哈希之间的区别
- 了解盐的原因
- 了解HTTP是明文的
- 了解什么是HTTPS
- 明白你永远不会(几乎永远不会)能够创build比第三方库和内置库已经做的更好的哈希或encryption方法
这项技术并不是安全方面最薄弱的环节。
- 员工是IT安全方面最薄弱的环节
- 安全最薄弱的环节:人员
- 密码:最薄弱的环节?
- 最弱的链接安全
- 最薄弱的环节
无论你做什么都可以被打破。
在哪里了解安全性:获得Schneier的书Applied Cryptography 。
简短的回答
你永远不可能太安全
使用咸味密码散列提高安全性
更长的答案(仍然不完整,虽然)
networking上的快速教程并不是要学习安全性。 它不仅需要深入了解存在哪些漏洞,而且还要了解它们为什么存在以及它们如何工作。 最大的问题之一(尤其是开源),就是一直添加新的方法,因此我们必须理解安全的概念和理论。
阅读书籍,上课并在本地机器上testing自己的漏洞。 然后,您将慢慢掌握如何保护Web应用程序的概念。
请看下面的内容来启动你
- Web应用程序安全性开发人员指南
- networking安全testing手册
- 应用密码学
存储密码时请注意以下几点,
-
哈希密码通常更安全,因为您不必保守秘密。 但是,它会阻止您在身份validationstream程中使用其他基于散列的scheme。 例如,您不能使用散列密码的HTTP摘要式身份validation。
-
简单的散列很容易出现彩虹表攻击( http://en.wikipedia.org/wiki/Rainbow_table )。 请在散列中添加非重复的随机数,或者使用nonce作为HMAC的密钥。 随机数需要与密码一起存储。 我把它添加到摘要中。
-
如果使用encryption,请确保使用随机的初始向量,以便不同的用户将相同的密码encryption成不同的密文。 否则,你很容易出现模式匹配攻击。 MySQL有内置的encryption命令。 它不注入IV,所以不要使用密码。
-
使用密文保存密钥名称/版本,以便可以旋转密钥。 密钥轮换是符合某些标准所必需的。 当您不得不更改或旋转按键时,无法解密密钥信息的encryption。
如果你遵循这些build议,你的密码将是安全的任何encryption/散列scheme。
查看Open Web Application Security项目 。 他们有很多关于当前web应用程序安全问题的信息,以及您需要采取什么措施来防御这些问题。 OWASP正在编写一个开发指南 ,提供了许多有关Web应用程序和Web服务开发问题的良好信息。
如果你从PHP上下文来看,我推荐这本书:
在亚马逊的Pro PHP安全
我真的很喜欢这本书,它涵盖的不仅仅是PHP中安全相关函数的列表。 它的很大一部分包括一般的networking安全概念和保护机制。 权限,最小权限原则,encryption,哈希,跨站点脚本,跨站点请求伪造,会话劫持等都包含在这里,以及使用PHP编写安全代码的示例。
在大学攻读研究生水平的安全课程之后,我对本书的报道印象深刻。 我认为它需要阅读任何专业的PHP开发人员。
首先你必须熟悉这个php方法:
- MD5
- SHA1
在这里你有PHP中的所有encryption扩展。