首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >显示主键是一种危险

显示主键是一种危险
EN

Stack Overflow用户
提问于 2014-01-05 06:01:54
回答 3查看 379关注 0票数 4

例如,当我从视图中的帐户列表中选择一个帐户时,URL显示的内容如下:

http://example.com/BankAccount/EditBankAccount?bankAccountId=12

是否有一种方法来隐藏主键,因为northing阻止某人编辑URL中的id并将其张贴,以获得不同的帐户。

我可以添加代码来查看当前用户是否允许查看这个帐户,但是有更好的方法吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-01-05 09:22:19

没必要把钥匙藏在网址上。例如,您查看过StackOverflow上的urls吗?到处都是PKs。否则,您将如何理解当前用户正在编辑的哪个银行帐户?

相反,您应该编写一个授权筛选器,以确保url中提供的id实际上是属于当前通过身份验证的用户的帐户。我已经说明了如何在this similar thread中实现这种授权筛选器。

票数 6
EN

Stack Overflow用户

发布于 2014-01-05 08:33:42

你问:

有办法隐藏主键吗?

当然有,只是不要提供。让我们回顾一下您当前的URI:

代码语言:javascript
运行
复制
http://example.com/BankAccount/EditBankAccount?bankAccountId=12
                                               ^^^^^^^^^^^^^^^^

要隐藏主键,请删除它并将其编码为事务-脚本名称的一部分,例如:

代码语言:javascript
运行
复制
http://example.com/BankAccount/EditMyBankAccount
                                   ^^

我强调了不同之处。这个新的事务-脚本不需要提供任何主键,因为它总是编辑当前用户帐户-从来没有不同的一个。

这将有助于您预防不安全的直接对象引用

票数 1
EN

Stack Overflow用户

发布于 2014-01-05 09:20:22

你可以:

  1. 不给出显式有意义的词来描述查询字符串参数(如:/EditBankAccount?p1=abc&p2=xyz)
  2. 加密查询字符串参数,这样页面访问者就不会计算出实际值。
  3. 如果适用于您的情况,请在加密参数时使用盐值,以防止彩虹表攻击。将salt密钥存储在会话中。
  4. 保持原样,并将严格的安全授权规则应用于谁应该使用哪个对象的功能(即应用功能和对象级授权)

当然,第三点将使URL在会话到期后无效。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20930682

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档