【问题标题】:Putting ID in Get request将 ID 放入 Get 请求中
【发布时间】:2016-01-13 21:34:05
【问题描述】:

我有以下网址:

/Reports?reportId={value}

问题是不是每个用户都能看到每份报告,但通过这种 url,他实际上可以输入他想要的任何 ID 并访问该报告。

所以我的问题是我应该只添加一个服务器端验证来检查当前登录的用户是否可以访问此报告,如果没有返回一些授权响应,或者通过 POST 发送它,这样他就看不到 url 并更改它(如果这种方法足够安全)。

通常我想知道在 url 中发送 ID 是否是个坏主意?也许最好将 Guids 用于 ID-s 而不是整数?

【问题讨论】:

    标签: asp.net http web


    【解决方案1】:

    所以我的问题是我是否应该只添加一个服务器端验证来检查当前登录的用户是否可以访问此报告,如果没有返回一些授权响应

    是的,一千倍。

    或通过 POST 发送,这样他就看不到 url 并更改它(如果这种方法足够安全的话)。

    没有。从来没有这个。这是通过默默无闻的安全。 POST 数据不会以任何方式隐藏。

    如果在 url 中发送 ID 是个坏主意?也许最好将 Guids 用于 ID-s 而不是整数?

    不,这根本不重要。这也是通过默默无闻的安全。 GUID 仍以纯文本形式显示,因此任何有权访问浏览器历史记录、防火墙或一般网络的人都可以检查和重放包含 GUID 的流量。

    另见Why not expose a primary key - Programmers Stack Exchange

    【讨论】:

      【解决方案2】:

      除了CodeCaster的回答:

      URL 中的 ID 可以间接揭示一些与业务相关的信息。例如,从合同 ID=963 中,您的竞争对手可能会了解到您自上个月以来签订了 40 份新合同(ID 为例如 923)并获得了 cca 50k。这有时是不希望的。

      屏蔽 ID 是很常见的,例如通过转换为掩码字符串。我通常分别使用openssl_encryptopenssl_decrypt

      下面是将 ID 转换为掩码字符串/从掩码字符串转换的示例:

      public static function encryptOpenssl($textToEncrypt, $encryptionMethod = 'AES-256-CFB', $secretHash = "12#rk!", $raw = false, $password = ''){
          $length = openssl_cipher_iv_length($encryptionMethod);
          $iv = substr(md5($password), 0, $length);
          return openssl_encrypt($textToEncrypt, $encryptionMethod, $secretHash, $raw, $iv);
      }
      
      public static function decryptOpenssl($textToDecrypt, $encryptionMethod = 'AES-256-CFB', $secretHash = "12#rk!", $raw = false, $password = ''){
          $length = openssl_cipher_iv_length($encryptionMethod);
          $iv = substr(md5($password), 0, $length);
          return openssl_decrypt($textToDecrypt, $encryptionMethod, $secretHash, $raw, $iv);
      }
      

      您当然可以使用任何其他混淆算法,例如rot13,交换字符位置,字符映射,前置/附加无关字符等。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-12-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-06-18
        • 1970-01-01
        相关资源
        最近更新 更多