我一直认为错误消息应显示尽可能少的信息,以防止攻击者用来获取敏感信息的任何提示。
这是一个例子。此端点接受可选的请求参数group
,该参数可以是组的ID或名称。
POST /sign-in/?group=[group_id_or_name]
。
还接受用户名和密码的HTTP基本身份验证。
在用户名和密码验证检查之前,代码会检查该组是否有效且是否存在。
如果该组无效,REST API将返回错误请求,并显示错误消息:
请求的群组无效。
但另一种方法是显示以下错误消息:
请求的组[在此处打印requested_group_parameter值]是 无效。
是的,请求的组已经在请求参数中可用了,但是用户是否有可能在请求中注入错误的输入并让它显示恶意信息?
这里有任何可疑的做法,还是这些都是微不足道的?
答案 0 :(得分:0)
返回时应该小心,因为可能存在SQL注入攻击(或缓冲区溢出,或XSS,或者我可能忘记的其他攻击 - 取决于您的方案)。无论如何都应该注意这些,但如果您返回查询结果,攻击者可能更容易执行此类攻击(同样,取决于您的代码和方案)。
除此之外,由于该组来自客户端,因此用户可以通过检查页面代码或使用某些浏览器插件来查看它,但我没有看到任何问题。假设没有像上述那样的攻击,用户将只能看到他/她键入的组名。所以发送两条消息中的任何一条都没问题。
现在,如果这些群组的名称是敏感信息,并且您不希望它们泄露,那么为了防止暴力攻击,您不应该发送任何消息检查组名的重点。您应该继续整个过程,就好像组名称是正确的,请求用户名和密码,检查这些是否正确(为了避免计时攻击),然后返回组,用户名或密码错误或者不要存在。但是,如果通过拥有凭据可以登录任何组,此方法仍然失败,因为拥有凭据并收到错误消息的人可以很容易地理解不正确的信息是组名。