【问题标题】:Should the Id column of a table be encrypted/hashed before sending to client在发送给客户端之前,表的 Id 列是否应该被加密/散列
【发布时间】:2012-03-17 06:48:10
【问题描述】:

我心里有这个问题。 我想与你们分享一下,以获得适合自己的答案,并可能会帮助那里的人。

因此,为了论证,我们假设我们的网站有一个用户表,其中包含以下列:

    id, name, email and password

很多时候我们必须在客户端使用 id 字段。 假设我们已经实现了 AJAX 以允许用户编辑他们的个人资料。 在个人资料编辑页面上看起来像这样:

<div>
    <div>
         <label>Name: <input type = "text" name = "txtName" id = "txtName"/></label>
    </div>
    <div>
         <label>Email: <input type = "text" name = "txtEmail" id = "txtEmail"/></label>
    </div>
    <div>
         <label>Password: <input type = "password" name = "txtPasswd" id = "txtPasswd"/></label>
    </div>
    <div>
         <input type = "submit" name = "updateProfile" value = "Save" />
         <input type = "hidden" name = "id" value = "1" />
    </div>
</div>

请继续关注问题,而不是指出可能由表格设计、html 或 css 内容引起的缺陷。

问候,

【问题讨论】:

  • 这取决于用户知道ID或能够猜测其他ID的危险程度。如果我可以通过将 ID 从1 更改为2 来覆盖另一个用户的配置文件,那么您的安全性问题就更深了。尽管如此,人们还是喜欢使用随机 ID 向外界提供服务
  • 我有一个散列(随机 32 个字符)和用户 ID,我使用散列在内部进行外部通信。
  • @Dagon ,这是个坏主意,因为我可以加入您的社区并查看表单并轻松更改其他用户的详细信息。
  • @Ofir Baruch 没有社区,别想知道我为谋生而建立什么样的网站。
  • @Dagon ,我使用术语community 作为具有登录名和用户的站点。总之,无意冒犯。

标签: php javascript ruby-on-rails ajax database


【解决方案1】:

您最好将用户类型保持在会话中。

按用户类型,我的意思是您必须根据用户类型检查访问/编辑/更新/查看权限。

然后向用户显示 id 没有任何方法可以显示您的数据库列值,因为您的权限检查代码将通过重定向或提示用户此类操作不允许其用户类型来克服。

如果您对 id 使用加密值,那么用户可以再次复制并使用您的加密值用于他们的偷偷摸摸的目的。

【讨论】:

    【解决方案2】:

    我认为您不需要加密用户 ID,但您应该检查其他数据。一个好主意是在更改新密码之前验证用户的旧密码。这可以防止偶然发现开放账户的人更改它。另一个好的做法是验证用户是否已登录(例如,使用会话)并确保 id 与登录用户的 id 匹配。

    这让我想到了解决这个问题的另一种方式 - 根本不要使用 id。在会话中保持方便,无需在表单中传递它。这意味着您只能使用您登录时使用的 id 进行操作,而且您可能永远不知道自己的 id 是什么。

    【讨论】:

      【解决方案3】:

      危险的地方在于处理数据的脚本。 即使作为初学者黑客,我知道我可以更改此 ID,然后脚本可能 更改他人的详细信息。

      因此,您不应该使用 id 来知道要编辑哪个用户, 你应该使用CookiesSessions

      【讨论】:

      • 除非您在 cookie 或 sessionId cookie 中添加哈希/校验和,否则“黑客”也可以轻松更改。
      • 没错。应该使用 md5 或密码的其他散列函数,用户的 id 甚至会话的 id。
      【解决方案4】:

      我将依赖服务器上的一组身份验证规则来确定允许哪个用户编辑哪个记录。在客户端显示记录 ID 确实是一个有争议的问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-04-12
        • 1970-01-01
        • 2022-11-04
        • 2020-12-24
        • 2010-11-25
        • 2011-05-03
        • 1970-01-01
        相关资源
        最近更新 更多