【问题标题】:Web Security in a Rich Client富客户端中的网络安全
【发布时间】:2010-06-21 18:53:42
【问题描述】:

我目前正在为使用富客户端的客户构建 Web 应用程序。 (弹性)

在这个应用程序中,用户有一个密码,以及一些其他关键属性,这些属性在整个系统中用于识别目的。 (例如,母亲的娘家姓)。

用户最初使用其密码登录。然后,在整个应用程序中,每当用户要执行“破坏性”操作时,他们都需要输入这些其他识别数据之一。

我的客户要求我在登录后加载这些属性,将它们存储在内存中,并在客户端上针对这些数据执行验证,然后再进行执行破坏性操作的服务器调用。

这让我觉得这是一个潜在的安全风险,因为有可能(尽管很难)欺骗 Web 客户端,并检索通过网络发送的这些数据。我的客户认为我偏执并敦促我前进。

需要考虑的一些关键点:

  • 应用程序通过 HTTPS 提供服务
  • 所有客户端/服务器通信都通过 HTTPS 进行
  • 此数据仅在登录后发送给客户端
  • 在登录期间,会话发出一个安全的 cookie。

因此,在很大程度上,该应用程序是相当安全的。

但是,我的直觉告诉我,虽然破解数据可能很困难,但它仍然不如我们根本不发送数据并在服务器上验证的安全。

我是偏执狂,还是这是真正的安全风险?

如果这是一个有效的问题,是否有任何最佳实践文件可供我的客户参考,以证实我的观点?

【问题讨论】:

    标签: web-applications security


    【解决方案1】:

    检查应在服务器端进行。

    如果未经授权的人访问了会话 ID,他总是可以使用会话 ID 调用服务器并下载个人属性。那就是将私人信息泄露给攻击者。

    更重要的是,攻击者并不真正关心您在 flex 应用程序中执行的验证。他将只使用网络嗅探器来查看正在进行哪些服务器调用 - 由于这些服务器调用不需要个人属性,因此他可以绕过您的安全模型。

    简而言之,所有的安全验证都应该在服务器端完成。这是一个常见的弱点,您可以在此页面上阅读更多信息http://cwe.mitre.org/data/definitions/602.html

    【讨论】:

    • +1 这是正确的答案。感谢您的重述,我想我没有仔细阅读这个问题。
    【解决方案2】:

    如果您必须这样做,请在会话开始时通过 MD5 散列将信息片段从服务器发送到客户端。这应该是相当安全的。在任何情况下,您都不应该以未散列或未加密的明文发送实际数据本身。也不要在会话期间将数据保存在磁盘等任何地方。

    更好的方法是接受输入并对其进行哈希处理,然后将其发送到服务器进行验证。

    归根结底,服务器应该强制执行安全性,而不是客户端。 HTTPS 只是线路级安全性。应用服务器应该强制执行信息安全规则,而不是它们的客户端。

    【讨论】:

    • md5 不安全,我不知道您试图通过散列传输中的数据来防御什么攻击。
    • 他的整个方法都是不安全的,但现实是安全是关于层的,而不是关于建造 Fort Knox。如果他必须按照他说的去做,他至少应该采取一些措施来限制妥协的可能性。我认为您对安全教科书和维基百科的理解过于严格。在现实世界中,他有一个要求,为了满足它必须做出权衡。我的观点是,如果他必须这样做,至少要采取一些措施来增加安全层。我想你会建议他断开应用程序与所有公共网络的连接,使用生物识别和量子加密?
    • md5 是单向函数。 https 防止轻松丢弃,您要防御什么攻击?
    • @Nissan Fan 一点也不,我在安全方面是脚踏实地的。我编写了漏洞利用代码,这就是橡胶与道路相遇的地方:)
    • 您在考虑攻击向量,而我在考虑数据隐私。如果系统受到威胁,在我的方法中他们将拥有的只是哈希,你的建议依赖于单层 SSL,这在我见过的任何安全策略下都不够用。多年来,我在跨国公司的应用领域做过 Infosec 最佳实践。我的建议是基于他的要求以及安全层会造成障碍的想法。您假设 SSL 负载平衡器将始终正确配置。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-27
    • 1970-01-01
    • 2011-03-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多