如何向用户保证网站和密码的安全[关闭]


15

在可靠的网站上,我总是看到诸如“所有数据都已加密”或“使用128位加密对所有密码进行加密”之类的声明。但是,我从未遇到过诸如“所有密码都经过哈希处理”的声明。

在我的网站上,将SHA-512(最有可能)使用带有随机盐的哈希后,将所有用户密码存储在数据库中。我想添加一个摘要,以确保用户的密码是安全的,因此不会阻止他们使用我的网站,因为它需要密码。我希望用户感到安全,但是我认为并不是每个人都知道哈希是什么。

我的问题:可以提供一条消息,说“所有密码都是加密且安全的”吗,因为我认为普通用户不会知道哈希和加密之间的区别,并且更可能会因为看到了而感到安全舒适词“加密”?还是我应该提供替代消息?

附带一提,我是加密和密码哈希的新手,我想知道在我启动网站时现在是否足够安全。我不想告诉用户它是否安全。任何信息将不胜感激。谢谢。


7
就我个人而言,我不会太担心沟通:写一份关于您所做工作的技术说明,将其埋藏在FAQ的深处,以便技术人员可以找到。无论如何,其他任何人都不在乎。更重要的是:确保您做正确的事(如果您是新手,这很难,但是至少您要尝试!)。不要建立自己的哈希,使用bcrypt之类的东西。
约阿希姆·绍尔

4
好吧,正确的做法是联合登录名,而不用其他用户名和密码打扰用户。
2013年

1
OpenID很好,但是用户名/密码也可以。我认为您的问题不是说服用户您的网站安全。由于您没有经验,所以就像向您承诺您没有的东西。只需应用通用标准-您就不会阻止专业黑客的到来,但也没人能怪您。
2013年

3
@coredump确实。使用SHA-512进行密码哈希处理并不是很好。这不是“确定”。
托马斯

3
我可能会问有关信息安全的任何后续问题,以确保您获得最好的,最新的建议。(这并不意味着您在这里得到了不好的建议,只是我们不一定是安全专业人员)。
克里斯·

Answers:


22
  1. 用户不在乎。

    他们唯一关心的是某人从他们的银行帐户中提款时,似乎有一个链接几天前才有人完全访问您的数据库。

  2. 在几乎每种情况下,我都看到过这样的消息,它们具有误导性。最可笑的是在一个网站上,每个页面上都有“军事级安全”样式的标签。出现警报,告知HTTP证书无效。登录表单上有一个SQL注入。几周后,该网站被黑客入侵,然后永久消失。

    我停止计数声称拥有信息安全性的网站的数量,同时拥有“恢复我的密码”表格,该表格实际上是通过电子邮件发送原始密码的。

    就像那些“ W3C有效的XHTML”标签一样。为什么通常将它们放在网站上,即使主页上也包含至少数十种错误和类似代码的网站<DIV COLOR='red'>

如果您仍然想让用户放心,则可以输入以下内容:

您的密码是安全的。请记住,我们看不到您的密码,也永远不会发送电子邮件要求您提供密码。

但坦率地说,用“重置我的密码”代替“我忘记了密码;通过电子邮件发送给我”比任何单词都更加令人放心。

来自不同评论的提示:

  • 不要重新发明轮子:使用OpenID。这样,您甚至都不需要存储哈希。

    资料来源: Jan Hudec评论

  • 由于您是学生,因此可以开源项目。既然您担心的是:“我不希望用户认为他们的密码不安全,因为某些在校孩子设计了它。”,再没有什么可以放心的了,即能够通过阅读源代码来检查它是由一个关心安全性的熟练开发人员编写的。

    资料来源: Jan Doggen评论


谢谢你们的投入。问题是我是一名为我的大学设计服务的学生。我不希望用户认为他们的密码不安全,因为某些在校儿童设计了该密码。我看过很多不同的方法,包括bcrypt,但我还没有决定使用哪种方法。我认为它现在已经足够安全了,如果很多人开始使用它,我可以在需要时添加它。我现在正在努力将其推出。再次感谢。
user2698818

3
@ user2698818您应该做的是设计安全性,然后发布一个详细描述此安全性的问题并询问“此安全性(足够)吗”。良好的安全性可以完全公开。
2013年

@ user2698818:好的。编辑了我的答案。
2013年

6
@JanDoggen:好吧,他应该做的是使用其他人设计并询问“它是否足够安全” 的现有安全系统。最好是这个问题已经存在了很长时间,并且已经引起了该领域几位专家的注意;-)
约阿希姆·绍尔

12

不要首先存储密码!遵循Stack Exchange的示例,让用户使用其身份登录到另一个通过OpenID提供身份验证的站点。大多数常见的Web框架都免费提供实现。

或者可能是任何其他协议。如果是某个机构的内部项目(如您对其他答案的评论所建议),则几乎肯定已经存在LDAP,Kerberos(Windows Active Directory也基于这两个; apache支持针对它们的HTTP身份验证)或某些此类服务用于计算机登录。只需连接到那。

这样可以避免您存储敏感信息(您很可能仍然需要存储权限,但是它们并不那么重要),而用户不必记住其他用户名和密码,因此可以双赢。


1
请告诉我您创建了哪些网站,因此,如果您将权限视为对安全性要求不高的网站,那么我可以避免使用它们。
orlp

1
如果要求是存储密码怎么办。另外,该问题专门询问有关存储它们的问题。
Piotr Kula 2013年

3
@ppumkin:“我如何使用X做Y”这类问题很多,其中最佳答案是“您使用Z”。如果您不同意,只需提供更好的答案;-)。
2013年

3
@ppumkin打个比方:“我试图用拳头砸碎一块岩石,我应该使用什么手套?” 在提供第19支德国骑兵护手之前,请检查他们是否知道凿子。
deworde

1
我会避免太快地建议OpenID。是的,这很棒,但是如果您支持多个OpenID / OAuth提供程序,通常效果最好。在众多的技术论坛,博客,问答中,您必须通过Facebook的OID提供程序进行登录,并且不能使用其他任何应用程序。我所在的工作网络阻止了Facebook域名的批发,因此我无法使用这些网站。如果您要支持OID,并且现在仅要使用OID,请选择在目标受众中很受欢迎并且不太可能被系统管理员阻止的提供商。Google和Windows Live是不错的选择。
KeithS

2

说:

“这很安全。”

是您对某些技术事实或过程做出的个人判断,并且此判断受您自己当时对安全性了解的限制。但是,您可以毫无疑问地保证您的加密,存储方法等将承受任何类型的攻击,甚至是您不知道或不知道的攻击吗?

含义:该声明有可能过时,甚至在您不了解的情况下也存在危险。

因此,我倾向于通过@JoachimSauer上述评论同意:只需描述你做什么,你如何保存用户的信息,并告诉用户这是怎么应该让你的服务保障。然后让用户自己判断。


不,“这是安全的”不是“个人”或主观的声明,它不喜欢“这是很”给。它实际上是一个语义上空的语句,没有指定“关于什么”或“不受什么攻击”或“在什么情况下处于什么级别”。如果您的整个语句由“此安全”组成,则在您完成键入之前已经过时,并且很可能您不知道它。我确实同意,尽管在最后一部分中,所有内容都与细节有关。
AviD

@AviD:也许您对我特定的单词选择读得太多了。是的,只说“安全”的事情而没有提供更多细节是没有意义的。但我坚信这是也是个人的判断,因为并非每个人对“安全”都有完全相同的理解和要求:A认为足够安全的东西可能对B感到不安全。发表声明的人“发现它很安全”。这与赋予某人相关事实并让他们得出自己的结论不那么重要。
stakx

是的,“相对于什么”,我指的是什么要求,安全性,风险等。仍然不是个人判断,但也许您所说的“个人”是我所说的“上下文”。“安全” 一项严格的科学指标,而不是柔和的如鱼得水的“感觉”。但是,是的,就像您说的那样,请不要告诉我它是“安全的”,请告诉我您是如何做到的。
AviD

@AviD:好的。除了说安全性也是一厢情愿的感觉之外,我再也不会对此争论不休了。当然,这还不止于此,但是当问题是关于“确保”用户(请参阅问题标题)时,最终的结果是如饥似渴的感觉。
stakx

1

这实际上取决于您特定网站的上下文。

例如,如果这是一个消费者网站,很可能大多数人只关心密码(也许是密码),财务/健康信息(取决于)以及私人信息(例如图片)(哈哈哈,是的...)。 。

如果这是一个业务应用程序,则整个站点的安全级别是相关的,而不仅仅是密码。同样,这取决于您的目标用户是谁-高度技术/非技术性等等。

所有这些上下文极大地定义了什么您应该传达的信息以及所需的保证级别。

例如,对于非技术用户来说,有一些通用的简单注释就足够了,例如:

该站点是使用最新的安全技术构建的。您的密码始终是加密的,我们将永远不会将您的图片发送给NSA。

(而且,正如其他人所说的,即使没有密码,而应使用OpenId或OAuth等标准。)

对于技术含量高的企业,您需要一整页的技术和程序详细信息,例如:

在整个开发和部署过程中,我们已经实现了完整的SDL(安全开发生命周期)。
...
我们的安全架构是...这带来了...的好处...
我们确保安全的编码,例如...通过...执行这些测试和那些测试。
我们的密码包括这些算法...和...我们符合您需要的任何行业法规,并经过认证...
我们的安全性已由该独立的第三方顾问验证。
...
有关更多详细信息,以及要查看我们的政策或安排独立审核,请与市场部门讨论。

当然,你不想放弃 太多详细的信息,它应该比密码本身更重要的是有关该过程的信息……当然,它应该不用说现实实际上应该符合您在此处写的内容,无论您要处理的是哪种上下文。

作为所提到的答案之一,大多数用户不在乎,不会理解您告诉他们的任何信息,即使您说确实将用户数据发送到NSA,他们仍然会注册。
这不是给他们的。
他们会很高兴没有任何密码,只要让我从列表中选择用户名并自动登录即可。

显然,这是针对很少的人关心的 -您应该使聪明的用户能够做正确的事,为他们提供所需的信息,并为他们提供可能需要的教育。
如果不这样做,那么当出现问题时,其他98%的用户会突然醒来并生气。
(“当然,我知道我不需要密码即可查看我的图片,但我不认为其他人也可以看到它们!!”)


0

如果您希望系统是安全的,则密码算法的强度毫无意义-大多数黑客可以立即破解密码,尤其是如果选择的密码很小或包含黑客已经“破解并存储的通用单词”和彩虹桌一样。读 ArsTechnica上有关密码破解的文章,以获取大量见解。

您需要做的是向用户保证,坏人一开始就无法掌握其哈希值。我工作过的一家注重安全性的公司拥有3层Web系统,其中Web服务器实际上未连接到数据库服务器。当我的老板想放他的网站并可以直接访问数据库时(被错误设计的代码,'nuff说),他被告知他无法拥有它,当他按下时...被告知他们之间没有任何联系。他必须对其进行架构,以便它通过中间层服务传递所有数据请求。这些服务不仅受到保护,而且暴露在最小的攻击面之下,并被锁定。而且,DB从不公开任何表以供读取,只有存储过程反过来被锁定,因此只有相关服务才能访问。

编写代码并没有您想像的那么糟糕,一旦您知道架构和每一层的分离,编写代码就很容易了。


0

您可以开发地球上最安全的站点,并且用户体验确实很差。用户将认为您的网站不安全。

您可以在这个星球上建立最不安全的网站,并拥有出色的用户体验。用户将认为您的网站是安全的。至少直到它出现在晚间新闻上。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.