我有一个next.js静态网站,它有一些表单,如联系人、工作申请等。我们的后端是.NET 4.6。由于这些表单是公共的,API端点(Web服务(基本上没有身份验证,任何人都可以开始使用Postman等工具进行请求。如何确保这些端点的安全?我想到了一些我可以做的事情:
-
对这些请求的有效载荷进行加密,然后在处理之前在后端对其进行解密。其想法是,如果其他人可以看到端点url,他们仍然无法正确加密数据,端点会拒绝它。出现的问题是,可以使用开发工具检查前端用于加密有效载荷的密钥,然后任何人都可以发送正确加密的有效载荷。
-
在后台,检查请求头以确保referer或origin头指向我的网站。现在的问题是,有一些工具可以帮助您模仿成功的请求标头,这意味着有人可以用正确的标头欺骗请求。
确保这些端点安全的最佳方法是什么?有没有一种方法可以限制我的网站只能请求它?或者有办法在客户端隐藏加密密钥吗?关于如何处理这个问题,还有其他建议吗?
由于您的API是公共的,而生成有效负载的HTML是公共的。然而,您可以通过使用以下步骤使其更加困难
-
在表单提交期间请求发送令牌
- 请求此令牌时,记录请求者的IP
- 限制每个IP每小时允许的请求数量(可能是5个?(
-
在#2 中传递从#1获得的令牌
- 提交表单时,验证令牌的请求者IP和当前请求IP是否匹配
- 检查在给定的时间段内是否有来自同一IP的其他表单提交,如果是,则拒绝请求
或
您只需限制每个IP每小时允许提交的数量。虽然这不会阻止攻击,但会使他们减速到更容易攻击的目标。