1 回答
TA贡献1807条经验 获得超9个赞
这篇文章的简短摘要和下面的讨论:
首先将凭据发布到 PHP,然后在返回的 HTML 中将它们返回给客户端,延迟(由于附加页面负载)增加,PHP 被添加为另一个故障点并且理论上,该系统可能会面临更多安全问题(即通过 JavaScript 或浏览器扩展扫描代码或黑客攻击 PHP 服务器)。
因此,有两种解决方案是合理的:
完全跳过 PHP 并让登录由 javascript 和 < 处理仅 a i=4>java 后端(此过程的详细说明说明如下 第 1 - 5 点;这仅是可能的,因为 PHP 服务器在此特定用例中不需要身份验证信息< a i=11>)
将凭据 POST 到 PHP,并让 PHP 与负责身份验证的 java 后端通信将它们保留给客户
原帖:
我不太明白为什么你认为 PHP 后端不可信,但在你的方案中,PHP 已经获得了你的凭据,这要归功于原始的 POST。如果您想避免使用 PHP,为什么不让您的表单调用 JavaCcript 函数,而不是首先 POST 到 PHP 后端:
用户输入凭据
用户点击“登录”
JavaScript 拦截登录尝试,调用login()
JavaScript 从文档正文 () 获取
user,pass
getElementById(...)
JavaScript 联系处理登录的 Java 后端
无需 PHP。但我可能想知道为什么这是必要的 - 如果您不能信任自己的后端,那么您的安全实践到底是什么?如果你的 PHP 不可信,为什么你的 Java 会更好呢?
在您的方案中,您已经在 POST 请求中将凭据传递到 PHP 后端。如果您担心 PHP 不知道凭据,那么您已经失败了。
至于效率,您的方案有额外的页面加载,这将使用带宽,最大化延迟(而不是最小化延迟的目标),并且让注意到额外重定向的用户认为您无能。 JavaScript 听起来更好的解决方案是您想用 Java 编写数据库代码。
就 HTML 中显示的凭据而言,实际上没有区别,因为唯一可以访问它们的人就是用户(已经输入了这些凭据的人)。如果他们输入不正确的凭据,他们只会看到不正确的凭据。 也就是说,它违反了最佳实践,而且可能不是一个好主意。
在 HTML 中显示凭据是否是一种不好的安全做法(就像在 URL 中显示凭据一样,以防止用户在复制 URL 时意外将其凭据发送给某人)?与此相关的风险是什么?这些凭证可以被任何使用的 JS 库或浏览器扩展读取吗?如果是这样,那些人可能也可以读取我在表单中输入的凭据?
答案是肯定的,这完全是不好的做法,会让您面临额外的风险。他们可能不太关心,但你说得完全正确——恶意代码可以在更多地方读取凭据,并且任何 JS 库或安装的扩展都可以读取它们。
从安全角度(和效率角度)来看,我的替代设置是否更好?
不,不。从安全角度来看,它增加了另一个故障点;他们可以选择破解 PHP 后端,而不是需要破解 Java 后端。这不一定是世界末日,但是一个额外的故障点。
在这种情况下还有其他提高安全性的建议吗?
我在上面解释了我的建议。要么接受它并使用 PHP,要么使用 JavaScript 完全绕过 PHP。
还有一件事,在处理登录时,请确保 Java 传递一个秘密值(每个会话都是唯一的),并且服务器会在每个页面加载时验证该值< a i=2>.当我作为道德黑客工作时,我测试的应用程序通过了身份验证令牌(OAuth2),但服务器实际上并未验证它是否正确,只是客户端说它是有效的。确保服务器检查客户端所做的任何事情。
此外,强调每个会话都是唯一的,因为每个会话都保持相同的秘密值肯定是保存最差的你曾经希望没有泄露的秘密。
- 1 回答
- 0 关注
- 111 浏览
添加回答
举报