Lew*_*wis 8 javascript security password-encryption
我倾向于将用户密码存储在内存中供以后使用.
var credentials = {};
function register(username,password){
//when users click sign up
credentials.username = username;
creadentials.password = password;
}
function login(){
//Users can click login at anytime. Or they just don't.
ajax('/User/login',credentials).then(function(){
credentials = {};
});
}
Run Code Online (Sandbox Code Playgroud)
我应该担心这种方法的安全任务吗?如果这是一个坏主意,攻击者将如何检索密码?
问题是你试图阻止什么攻击?
当试图想想某些东西是否安全时,试图列出可能的攻击者,然后看看他们是否可以攻击它.例如,在这种情况下:
设备外攻击者(基于网络):
内存密码在所有方面都是安全的.
设备上的攻击者,不同的用户,非管理员
内存中的密码在所有方面都是安全的,因为操作系统限制可以防止攻击者访问内存块.
设备上攻击者,同一用户,非管理员
如果攻击者可以在与您的代码相同的用户帐户下访问系统,则可以泄露内存中的密码.
设备上的攻击者,不同的用户,root
这与上面相同,密码可以泄露.
但是,这里有一个重要的问题.如果攻击者可以作为同一用户或root用户进行访问,那么您就会遇到更大的问题.例如,他们可以篡改您的代码以远程发送所有密码(当它们被输入时).
因此在实践中,密码将在任何一种情况下泄露.
但有一个主要的例外.想象一下,你在应用程序中遇到了段错误.操作系统采用核心转储.如果以纯文本格式存储密码,则密码以纯文本形式存储在该核心转储中.这是一个非常重要的问题.
实际上,任何能够阅读纯文本密码的攻击者都可以做其他讨厌的事情,我们希望深入防范.这意味着为攻击者提供多个speedbump.我们不想让事情变得简单.
所以我建议不要将纯文本密码存储在内存中.如果您以后需要明文密码(用于登录远程系统或其他东西),我建议不重新建议(使用OAuth2或其他联合身份验证系统).但是,如果必须,至少使用未在内存中存储(或至少保留)的密钥对其进行加密.
更好的方法是单向散列它,就像存储一样(使用bcrypt,scrypt,pbkdf2等).
| 归档时间: |
|
| 查看次数: |
2519 次 |
| 最近记录: |