我刚刚获得了PHP5演出。我不会处理涉及超敏感数据的应用程序部分,但我仍然对安全性和加密方法知之甚少。我只知道非常基础(不要以明文存储密码,不允许用户使用帖子数据运行代码等)。为了保证我的应用程序安全,我需要知道什么,我在哪里可以学习它?
答案 0 :(得分:27)
了解哈希和加密之间的区别。加密通常是对字符串的双向解释。我可以加密我的密码,然后再将其解密为纯文本。哈希背后的想法是它们成为单向“加密”。
在我的网站上,我将密码存储为哈希值。每当用户登录时,我都会重新哈希他们提供的密码,根据存储在数据库中的哈希对其进行测试,并批准它们是否匹配。如果他们忘记密码,我就无法向他们发送密码,因为(通常)我无法知道。两个不同的字符串可以转换为相同的哈希值,这使得(通常)无法找出原始字符串是什么。
这是一个很好的问题,可以深入了解并识别何时使用加密与哈希。
答案 1 :(得分:17)
知道不要编写自己的加密功能。现有的可信库是最好的方法。避免使用酷炫的前沿技术,这些技术缺少许多成功的程序员工时和用户时间。知道不要相信你选择的功能,直到你自己彻底测试它,第一人称。及时了解可能在一夜之间阻止您选择的功能的新发展。知道这只是因为你正在使用当今最好的加密技术,如果你把钥匙留在桌子上就没有任何保护(例如,明文不在缓存中或存储在同一数据库中的另一个表中,私钥不是留在空旷的地方)
答案 2 :(得分:15)
答案 3 :(得分:14)
该技术不是安全方面最薄弱的环节。
答案 4 :(得分:11)
无论你做什么,它都可以被打破。
答案 5 :(得分:6)
简短回答
你永远不会太安全
使用Salted密码哈希提高安全性
答案较长(但仍未完成)
安全性不是通过网络上的快速教程学习的。它需要深入了解不仅存在哪些漏洞,而且为什么存在,如何它们的工作原理。最大的问题之一(特别是在开源中)是新方法一直在增加,因此我们必须理解安全概念和理论。
阅读书籍,上课,并在本地计算机上自行测试漏洞。然后,您将慢慢地开始掌握如何保护Web应用程序的概念
请查看以下内容以启动您
答案 6 :(得分:6)
在哪里学习安全性:获取Schneier的书Applied Cryptography。
答案 7 :(得分:3)
存储密码时请注意以下几点,
哈希密码通常更安全,因为您不必保密。但是,它会阻止您在身份验证流程中使用其他基于哈希的方案。例如,您不能使用带有哈希密码的HTTP摘要式身份验证。
简单哈希容易出现彩虹表格(http://en.wikipedia.org/wiki/Rainbow_table)。请在散列中添加非重新定义的随机数,或使用随机数作为HMAC的密钥。 nonce需要与密码一起存储。我将它添加到摘要中。
如果使用加密,请确保使用随机初始向量,以便为不同用户将相同密码加密到不同的密文。否则,您很容易出现模式匹配攻击。 MySQL有内置的加密命令。它不会注入IV,所以永远不要将它用于密码。
使用密文保存密钥名称/版本,以便可以旋转密钥。需要按键旋转才能符合某些标准。当您被迫更改或旋转密钥时,无法解密没有密钥信息。
如果您遵循这些建议,使用任何加密/哈希方案都可以安全地使用密码。
答案 8 :(得分:1)
查看Open Web Application Security Project。他们有很多关于当前Web应用程序安全问题的信息,以及您需要做些什么来防范它们。 OWASP正在组建一个Development Guide,提供有关Web应用程序和Web服务开发问题的大量有用信息。
答案 9 :(得分:1)
如果您从PHP上下文中查看它,我会推荐这本书:
我非常喜欢这本书,它涵盖的不仅仅是PHP中与安全相关的函数列表。其中很大一部分涉及一般的Web安全概念和保护机制。此处介绍了权限,最小权限原则,加密,散列,跨站点脚本,跨站点请求伪造,会话劫持等,以及使用PHP编写安全代码的示例。
在大学读过研究生级别的安全课程后,我对本书的报道印象深刻。我认为任何专业的PHP开发人员都需要阅读。
答案 10 :(得分:0)