【问题标题】:Is it always neccessary to hide the mysql generated id from the user?是否总是需要对用户隐藏 mysql 生成的 id?
【发布时间】:2012-01-04 17:22:57
【问题描述】:

向用户显示由数据库自动递增的实际 ID 是否存在安全风险?你能举一些实际例子来说明人们可以用它做什么危险吗?

【问题讨论】:

  • 我认为将内部 id 泄漏到 UI 中是不好的风格。但这并不总是可以避免的(内部 id 通常是主 id),而且通常肯定不是安全问题。
  • @mario 为什么它的风格不好?因为它有潜在的危险?我之所以问,是因为从技术上讲,如果它真的很重要,我可以稍微麻烦地避免它。
  • 不,本身并不危险。只是您不应该将内部编号(主要用于关系数据库映射)变成外部编号。这通常与搜索引擎优化有关。但我只想说数字不太方便用户使用,除非需要可重定位性,否则不应在 URL 中公开。
  • @mario 我的 id 永远不会在 url 中公开。只是以一种只有查看页面来源才能看到的形式传递。此外,使用数字和“网址友好”名称的组合可能更利于您的理智,并且(实际上)与用户友好和 SEO 兼容。

标签: php mysql security auto-increment


【解决方案1】:

不,它在许多情况下都使用。

如果您的网站在其他方面易受攻击,例如 SQL 注入或 XSS,他们可能会将 id 用于有害的东西。但永远不要单独使用 id。

只要查看您在 SO 的个人资料,您的 ID 就是 243414

【讨论】:

    【解决方案2】:

    我不知道向用户公开行 ID 本质上是不安全的任何原因。几乎所有的 Web 框架都会在某个时候这样做。

    使用递增的整数 id 会公开有关基础数据的一些信息。最重要的是,它们通常是连续的,因此潜在的攻击者可以预测可能有效的 id。但是,如果您允许用户从您的应用请求数据以获得他可能无权查看的 ID,那么您的应用可能存在更大的安全问题。如果您正确限制了访问,或者不需要限制对记录数据的访问,那么暴露 id 不会造成太大(如果有的话)风险。

    【讨论】:

      【解决方案3】:

      独自一人并不危险。

      如果您的系统有任何漏洞利用 id 可以帮助他们

      但不要忘记,如果您的系统易受攻击,任何信息都是危险的,只是 id 会更容易

      【讨论】:

        【解决方案4】:

        有时会是悲剧

        假设我在您的应用程序上有一个个人资料,并且我在该个人资料上有我的照片 当我删除其中一个时,链接是这样的

        http://www.yourapp.com/myprofile/pictures/delete_pic.php?id=5

        这是我的照片 想象一下 pic 19 不是我的

        http://www.yourapp.com/myprofile/pictures/delete_pic.php?id=19

        这里我将删除另一个用户的图片 如果您需要向用户显示此类 ID,请在显示时对其进行加密,在使用时对其进行解密 你可以使用

        base64_encode() & base64_decode()
        

        但这很简单,你可以制作自己的算法或做一些事情来从base64生成不同的输出,比如

        base64_encode($id+7); or loops   
        

        【讨论】:

        • 嗯,所以在删除图片之前,我会检查您是否真的可以删除图片。
        • 是的,你应该这样做,但我给了你一个例子,如果不写的话它可以做什么
        猜你喜欢
        • 1970-01-01
        • 2021-06-25
        • 2017-11-04
        • 2016-01-19
        • 2013-03-08
        • 2018-08-17
        • 2018-02-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多