web应用程序的最佳登录设计是什么?



首先,让我们在这里定义"最佳"。解决这个问题的"最佳"登录设计/流程/算法/技术应该是:

    简单
  • 。我认为我不需要解释为什么一个简单的系统比一个复杂的系统好。例如,在我看来,OAuth 2是一个非常复杂的系统。如果我没记错的话,它定义了不少于9个不同的流,用于授予应用程序对个人数据的访问权。我觉得这是多余的,但这是没有争议的。

  • 语言无关。请不要通过给出实现来回答。我不想要实现。我想要一个(或几个……)设计。您可以给出示例,但您提出的解决方案应该易于在任何(阅读:大多数)语言中编码,而不需要针对不存在的功能进行重大的变通。

  • 安全。该设计应涵盖网络上最常见的安全问题。XSS, CSRF,等等。我认为一个好的集合可以通过code Horror和搜索"security"获得…

现在是一些较小的细节:

    允许
  • JavaScript。如果设计可以退回到无脚本环境,那就太好了。

  • Flash、Java小程序不允许。这违背了上面的语言不可知条款:如果你的设计需要一些只能通过Flash或Java获得的东西,这是一个缺陷。

  • 密码存储。有一大堆与密码存储有关的问题。我不想听。

  • 密码传输。这个 很重要。以明文形式传输密码是非常邪恶的。通过SSL,它可能是可以接受的,但如果您可以拥有一个(相对)安全的系统,而不依赖于端到端加密,那将是非常棒的。

考虑到这一切,提出你认为符合上述条件的"最佳"用户/登录/注销设计/流程/算法/技术。或者告诉我你是否认为这是徒劳的!div;)

我想你已经考虑过这个问题了。看待解决方案的最简单方法是将其分成不同的层次。

<

1)数据库/strong>

  • 防止sql注入。只使用准备好的语句。最好最安全!
  • 始终,我的意思是始终,确保db用户只有访问权限,它需要

2)应用

  • 使用HTTPS。甚至不要尝试使用其他任何东西
  • 不要在cookie或任何东西中存储用户id。如果必须,请使用会话
  • 如果你没有会话,生成一个随机id使用它来查找用户。不要让cookie id不可预测,这很重要。

3) HTML/Javascript

  • 通过令牌系统防止CSRF。这是唯一合法的方式
  • 转义所有用户输入并在写入流之前对其进行清理。在JSP中,例如<c:out/>应该使用
  • 不要在javascript中做任何安全的事情。这是一个显而易见的答案,但有时提醒一下是很好的。

4)等

  • 保持补丁更新
  • 不要重新创造轮子。在Rails中,已经有一些优秀的授权宝石。使用它们!

我认为在所有这些中,使用SSL是最重要的。您可以创建最复杂的系统,使用令人敬畏的加密算法进行双重提交。但是,尽管如此,最终您仍然不会得到一个比SSL更安全、经过更好测试的系统。

有趣的问题

我会考虑:

  1. 当需要我认为网页内容应该是公开的。所以,作为用户,我认为最好只在需要时才登录
  2. SSO我们应该有更容易交叉连接web应用程序的机制。我知道应用程序不以同样的方式实现权限,我们不能在那里疯狂。这就是OAuth填补空白的地方。
  3. 不要使用验证码(它被认为是不可访问的)。除非你使用类似的东西,比如这些
  4. csrf隐藏字段以确保提交的表单是有效的,而不是随机发布到端点
  5. 总是使用SSL大家伙正在做它,它是不安全的,让我们的用户发送他们的密码在明文。有人证明了这一点。
  6. 始终计划不使用javascript以防万一,无论如何,这不是因为我们可以这样做,所以这样做是好的。
这是我今晚的休息时间。:)

相关内容

最新更新