我目前正在开发一个 java 后端 和一个 使用 php、html 和javascript 用于私人项目(但我最终希望将其开源),这意味着无论如何访问都仅限于我的 LAN,并且安全性目前并不发挥重要作用但将来可能会。
由于我最喜欢用 Java 进行编码,因此大多数数据处理和存储(MySQL)都是用 Java 处理的,并通过 http 提供给前端(javascript; fetch())。
此外,java 后端处理身份验证进程意味着我必须通过 javascript 中的 fetch 调用将登录凭据传递到后端。
由于我并不真正喜欢高级网络编程,所以我想了一个基本的 POST ->重定向->登录的 GET 设置应该足够了,我之前使用过类似的登录过程(但在 PHP 中处理身份验证)。所以:
客户填写HTML-Form并提交
浏览器向 /login 发出 POST 请求并传递凭据 和目标页面
PHP 然后返回包含 javascript 部分 的 HTML,该部分以纯文本形式保存凭据 login("<?php echo $_POST['username'] ?>", "<?php echo $_POST['password'] ?>", "<?php echo $_POST['target'] ?>");
Javascript 然后获取 java后端创建会话凭据 使用这些
Javascript 问题window.location.replace(target);
并且客户端被重定向到目标页面(其中通过会话 cookie 处理身份验证)
我目前正在过度思考,从效率和安全的角度来看这是否是一个好主意。我目前的想法是使用表单通过javascript直接将数据获取到后端,而不是使用POST请求到附加页面(跳过上面的步骤2和3):
这意味着首先 PHP 永远不会看到凭据(这将减少一个故障点)并且凭据可能不会显示在 HTML 中。此外,这会减少加载时间,因为不再需要 POST。
因此我的问题是:
在 HTML 中显示凭据是否是一种不好的安全做法(就像在 URL 中显示凭据一样,以防止用户在复制 URL 时意外将其凭据发送给某人)?与此相关的风险是什么?这些凭证可以被任何使用的 JS 库或浏览器扩展读取吗?如果是这样,那些人可能也可以读取我在表单中输入的凭据?
从安全角度(和效率角度)来看,我的替代设置是否更好?
在这种情况下还有其他提高安全性的建议吗?
感谢你们对我的帮助。
函数式编程