我正在尝试了解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),发送密码,并存储/比较散列密码。
curl
进行测试?是否必须始终是另一个?用户必须将其插入登录表单吗?很抱歉,我还没有在网上找到任何能用node.js和passport.js清楚解释这些概念的东西,纯粹的javascript客户端和卷曲测试(我非常关心卷发测试)。
答案 0 :(得分:1)
用node.js和passport.js
解释这些概念
这些概念不依赖于特定的运行时或框架,因此Web上的材料不引用node.js和passport.js
是有道理的。
- ...... 盐事物
醇>
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,那么没有。