【问题标题】:How do I encode passwords in web forms without javascript?如何在没有 javascript 的情况下对 Web 表单中的密码进行编码?
【发布时间】:2023-03-06 10:00:02
【问题描述】:

当然,这并不是说我无法访问 javascript。在我的大部分 CS Web 开发课程中,我们都学习了一些关于服务器端验证的知识,然后一引入 javascript,服务器端验证就被抛到了窗外。

我选择不只依赖 javascript,因为客户端从来都不是一个安全的地方。我已经养成了为这些事情编写客户端和服务器端代码的习惯。但是,对于我正在编写的具有可选 AJAX 的 Web 应用程序,如果有人关闭了 javascript,我不希望密码通过网络发送明文。

我意识到我可能会问一个 catch-22 的情况,所以让我问这个问题:当我们唯一可以依赖的情况下,我们如何知道我们的用户密码对于同一网络上的恶意用户来说是安全的(足够)服务器端脚本。在登录页面的第一个请求中,有没有办法让浏览器加密数据字段?

【问题讨论】:

  • +1 表示您对客户的合理偏执... =)
  • 同意。永远不要相信来自浏览器的任何数据。用户可以随意更改。重新定义javascript,或者完全关闭它。或者只是将数据从他们自己网站上的页面发布到您的网站。 Javascript 检查只是为了给用户提供更流畅的 UI 体验,节省前往服务器标记不良数据的行程。但是,您必须在服务器上再次重复所有检查。

标签: javascript security encryption cryptography


【解决方案1】:

SSL 解决了这个问题。作为记录,密码永远不应该被“加密”或“编码”,这意味着有一种“解码”或“解密”的方法,如果CWE-257,这是明显的违规行为。密码必须经过哈希处理,SHA-256 是一个不错的选择,但这并不意味着传输,仅用于存储。当您传输机密时,有一长串可能出错的事情,SSL 是迄今为止解决这些问题的最佳选择。

如果攻击者可以嗅探流量,那么他们将能够看到会话 ID 并立即使用它,因此这是一个有争议的问题。无论如何,您必须使用 SSL 来保护经过身份验证的会话。

【讨论】:

  • 所以我得到的是:如果用户必须登录到一个站点,并且您不希望任何人窃听,那么对每个页面使用 SSL,包括登录后的页面?这个网站怎么是http://而不是https://?不好的做法?还是我错过了另一个概念?
  • 没错,没有什么能阻止攻击者通过嗅探流量来劫持 stackoverflow 会话。您可能正在使用开放式无线网络在咖啡馆里啜饮热气,然后您的会话被劫持。大多数开发人员不理解这一点,但如果您查看任何像 bankofamerica.com 这样的在线银行门户网站,它们都会使用 ssl 保护所有经过身份验证的会话。
  • 有人在这里嗅出您的登录信息的机会最多是远程的,如果您使用 OpenID 登录,那么该站点负责身份验证(在我的情况下通过 HTTP Digest 完成,它是经过哈希处理的) .为了增加有人嗅出您的 stackoverflow 会话的可能性,大多数拥有这些技能的人不会关心 stackoverflow 或破坏您的帐户。
【解决方案2】:

简单的解决方案是 SSL。

【讨论】:

    【解决方案3】:

    我认为您混淆了几个概念。浏览器不会加密单个字段。客户端脚本、服务器端脚本和 AJAX 并不是防御窃听的手段。

    正如其他人所说,SSL 是一种加密数据的技术。整个请求和响应,包括字段和脚本都包含在 SSL 会话中。

    【讨论】:

    • 没错,我搞错了。在阅读了这些答案之后,SSL 对所有内容进行加密是完全有道理的,否则它不会有太大用处。我想我是只见树木不见森林。
    【解决方案4】:

    您也可以使用Digest HTTP Authentication

    【讨论】:

    • HTTP Digest 不允许基于表单的登录。
    • 我一直在疯狂地搜索这个。我在这里问了一个问题,但我想我误解了答案。所以我可以停止寻找并放弃我的任何加密试验并转而使用 SSL?
    猜你喜欢
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    • 2016-12-02
    • 2011-05-22
    • 1970-01-01
    • 2018-12-14
    • 2018-12-21
    • 2013-03-29
    相关资源
    最近更新 更多