我正在开发一个需要良好安全性的网络应用。在目前的设计中,许多用户操作需要用户重新发送他们的密码(否则服务器必须以纯文本形式存储它,至少是暂时的。)
通过AJAX请求进行大量用户交互。我不想让用户为每个人重新输入密码,而是想做类似的事情:
var password_plain = document .getElementById ("password") .value;
ajax ("/login.php", {password: password_plain, username: ...});
// later
ajax ("/api.php", {password: password_plain, action: ...});
为了论证,假设设计通常是合理的,例如
服务器不存储或泄漏纯文本密码
正确设置了SSL
password_plain=null
(并清除DOM值)威胁模型是攻击者无法对客户端或服务器计算机进行物理访问,也无法在任何一个上运行任意代码,但可能诱使用户访问客户端浏览器中的恶意其他网页。
javascript变量中的密码是否安全?
答案 0 :(得分:3)
取决于。
如果你没有正确地封装你的作用域,第三方脚本可以在执行期间读取和修改你的变量(假设它被保留多个事件循环滴答),但是,这有点边缘情况。只要它在任何类型的功能或模块中完成,并且您旁边没有XSS漏洞,那么您就是金色的。
还有一些关于可以查看内存和内容的程序的问题,但这也是无关紧要的,因为如果用户在他们的计算机上有这样的东西,那么你的JS代码是他们最不担心的。
我会补充说,不建议您反复传输密码,通常需要进行一次身份验证,获取某种一次性令牌(如会话令牌),并在此期间使用该身份验证。会话。与密码不同,当出现问题时,会话很容易在服务器端失效。
重要的是:
答案 1 :(得分:0)
不,它在JavaScript变量中绝对不安全。如果您在本地存储它,那么跨站点脚本攻击(XSS)可能会以明文方式破坏和窃取用户的凭据。