【问题标题】:Is it bad practice to display user input in JSON responses for error messages?在错误消息的 JSON 响应中显示用户输入是不好的做法吗?
【发布时间】:2017-02-13 20:14:19
【问题描述】:

我一直认为错误消息应该显示尽可能少的信息,以防止攻击者可以用来访问敏感信息的任何提示。

这是一个例子。此端点接受可选的请求参数group,它可以是组的 ID 或名称。

POST /sign-in/?group=[group_id_or_name].

还接受用户名和密码的 HTTP 基本身份验证。

在用户名和密码验证检查之前,代码会检查组是否有效以及是否存在。

如果组无效,RE​​ST API 会返回错误请求并显示错误消息:

请求的组无效。

但另一种方法是显示此错误消息:

请求的组 [在此处打印请求的组参数值] 是 无效。

是的,请求的组已经在请求参数中可用,但是用户是否有可能在请求中注入错误的输入并让它显示恶意信息?

这里是否有任何可疑的做法,或者这一切都是微不足道的?

【问题讨论】:

    标签: json rest security


    【解决方案1】:

    返回时应小心,因为可能存在 SQL 注入攻击(或缓冲区溢出、XSS 或其他一些我可能忘记的攻击 - 取决于您的情况)。无论如何都应该注意这些,但是如果您返回查询结果,攻击者可能更容易执行此类攻击(同样,取决于您的代码和场景)。

    除此之外,由于该组来自客户端,因此用户可以通过检查页面代码或使用某些浏览器插件来查看它,我看不出有任何问题。假设没有像上面描述的攻击,用户将只能看到他/她输入的组名。所以发送两条消息中的任何一条都可以。

    现在,如果组的名称是敏感信息并且您不希望它们泄露,为了防止暴力攻击,您不应该在该点发回任何消息检查组名。相反,您应该继续整个过程,就好像组名是正确的一样,询问用户名和密码,检查这些是否正确(以避免定时攻击),然后才返回组、用户名或密码错误或不正确不存在。但是,如果通过拥有凭据可以登录到任何组,则此方法仍然失败,因为拥有凭据并收到错误消息的人很容易理解错误信息是组名。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-30
      • 1970-01-01
      相关资源
      最近更新 更多