我正在构建一个 REST API 来为我的客户和第三方合作伙伴存储安全敏感数据。
每个请求都使用特定数据的 HMAC 进行验证,该 HMAC 键入在用户登录后短时间内分配的临时密钥上。当然,一切都通过 TLS 运行。每个请求都会被记录,连同返回的任何数据的键,以及如果由于某种原因没有阻止请求而本应返回的任何数据的键。
如果数据不存在,或者某个位置的数据可能被特定用户读取但未更新,或者如果更新请求格式错误,服务器是否应该返回有意义的错误消息?
如果用户无权执行某项操作,则应返回 401 或 403 响应,表示请求因缺少执行该操作的权限而失败。在数据格式错误或预期数据类型不匹配(将字符串发送到 int 字段等)的情况下,可能会使用其他响应代码。基本上,遵循良好的 REST/HTTP 实践并记录所有内容,但除了关于出错的基本提示之外,不要向用户提供任何信息。
永远不要向任何人提供任何信息,以防它以某种方式被用于攻击系统。只返回 500 错误,没有任何类型的描述。对于是否返回 404,或者是否应该返回空响应或 500 错误,存在一定程度的分歧。如果第三方开发人员遇到这些响应,并且不明白为什么,他们必须联系我们公司,让某人查看日志并解释如何正确提出请求。
关于哪种方法最有意义,是否有人“从战壕”中获得经验?特别值得关注的是如何平衡安全性与可用性和支持请求。