我正在尝试学习一些有关 REST api 的知识,而我遇到的问题之一是安全性。
我正在将 angularjs 用于 Web 界面和用于 php api 的苗条框架。我已经阅读了一些文章(我喜欢这篇文章)并开始按照本教程实现 HMAC (不完全相同的步骤)。我想知道我的方法中是否存在一些重大的安全漏洞,或者我的做法是否正确。
当我使用 AngularJS 时,我知道我存储在客户端的所有内容都不安全。我假设用户有一台“干净如新”的机器并且知道他在做什么(我可能是主要的 api 用户)。我更关心的是中间人和复制。
(在客户端)
- 用户输入他的用户名和密码。
- 他的密码被加密(例如,sha256)并存储为全局;(他的用户名只是存储在某个地方)
- 在 web 接口发送到 api 的每个请求中,都会在标头中发送一个 hmac 哈希,其中消息是使用用户名、时间戳、资源路径、随机字符串(服务器和客户端都知道的)形成的; 硬编码),关键是密码哈希。
(在服务器端)
当服务器收到请求时:
- 检查时间戳;
- 检查用户名是否存在于数据库中;
- 尝试使用变量(也在请求中收到)用户名、时间戳、资源路径和随机字符串(在请求中未收到此字符串;它只是硬编码)来复制相同的 hmac 哈希。对于密钥,他使用存储在数据库中的值,即给定用户的加密密码。
如果所有验证都顺利,用户应该是一个值得信任的人,而不仅仅是一个中间人。