纯文本密码和"记住我",node.js和js客户端

时间:2014-06-26 08:58:42

标签: node.js security passport.js password-protection

我正在尝试了解node.js(使用passport.js)和客户端(纯javascript)Web应用程序的更多安全性。但我对网络编程很陌生。

我已经实现了LocalStrategy,没关系。要获得对某些API的访问权限,我必须以普通帐户登录,或以其他人的身份以管理员身份登录。

我正在使用浏览器身份验证对其进行测试(仍然没有“记住我”功能,因此每次我必须重新输入密码时)我正在使用curl进行测试:

curl --cookie-jar jarfile --data "username=admin&password=pass" http://localhost:5000/login
curl --cookie jarfile "http://localhost:5000/api/admin"

现在,遵循“期望更糟”的范例,我希望受到一点点中间人攻击的保护,所以我不想发送纯文本密码:我必须加密浏览器中的密码(sha256),发送密码,并存储/比较散列密码。

  1. 我不明白的是 salt 。有什么用的 图案?在服务器中生成并将其发送到登录页面?如何使用curl进行测试?是否必须始终是另一个?用户必须将其插入登录表单吗?
  2. “记住我”的事情怎么样?我真的不明白这一点:我是否必须在浏览器中使用用户名,加密密码和盐存储cookie?为什么“记住我”实现在服务器端?不应该在客户端吗?
  3. 很抱歉,我还没有在网上找到任何能用node.js和passport.js清楚解释这些概念的东西,纯粹的javascript客户端和卷曲测试(我非常关心卷发测试)。

1 个答案:

答案 0 :(得分:1)

  

用node.js和passport.js

解释这些概念

这些概念不依赖于特定的运行时或框架,因此Web上的材料不引用node.js和passport.js

是有道理的。
  
      
  1. ...... 事物
  2.   

Salt是一个字符串,它使密码破解变得更加困难。您应该为每个用户使用不同的盐。我经常看到盐的使用仅与服务器有关。客户端以明文方式发送密码,服务器用盐对其进行哈希处理。因此,它不会影响curl的测试。如果攻击者可以单独使用salted哈希登录(因此不需要知道原始密码),则会使salt和hash变得不那么有用。

  

2。 ......“记住我”的事情

通常不是为每个请求传输凭据,而是有一种“会话ID”类型的令牌。服务器维护状态以将会话ID与用户记录相关联,从而“记住”用户已登录。将密码存储在cookie中并不常见。

  

每次我处理登录时,我都要存储会话ID并将其发送给客户端?并且客户将其发回给我?

很多网站都是这样做的。我想虽然有变化的余地。

  

curl --cookie-jar jarfile --data "username=admin&password=pass" http://localhost:5000/login实际上将用户名和密码存储在cookie中,不是吗?

它将用户名和密码发送到服务器,服务器可以响应它想要存储在cookie中的任何数据。如果服务器将用户名和密码作为cookie发回,那么是。如果它发回一个会话ID,那么没有。