【问题标题】:How does one ensure that a user can delete only specific records?如何确保用户只能删除特定记录?
【发布时间】:2017-10-03 19:57:23
【问题描述】:

直接写sql命令时,很容易指定删除哪些记录(例如,通过指定ID等)。

但是在网页中,如果您有一个指定不同记录的链接列表(其中 id 嵌入作为查询参数),您如何确保用户只是不编辑链接中的 id,以便他可以删除不同的记录吗?

例如,假设我有以下链接:

<a href="foo.com/deleterecord/1121">delete</a>

用户可以轻松复制粘贴链接,将 1121 更改为 1123,并删除一些他不应该访问的其他记录。

所以我的问题是,在您的架构中,您如何允许用户选择要删除的记录(通过单击链接),但同时防止用户编辑链接以删除其他记录?还是在数据库层处理?

【问题讨论】:

标签: javascript jquery html node.js postgresql


【解决方案1】:

基本上你不能阻止链接的编辑,或者更好的是,你不能阻止客户端调用一些编辑的链接。最简单、最安全的做法是在服务器端验证用户身份和相关权限。

【讨论】:

    【解决方案2】:

    一种减少(不是删除)用户查看/编辑与您发送链接的记录不同的风险的方法是使用两个彼此不相关的密钥.第二个密钥可以是一个有意义的密钥,也可以只是一个随机数。

    create table foo (pk serial, validation_key integer, data [...]);
    Select * from foo where pk = 1121 and validation_key = 123456789;
    

    更可靠的方法是在生成链接时对主键进行编码,并验证给定的 pk 和解码后的值是否匹配。

    <a href="foo.com/deleterecord/1121/ABC123DEF456==">delete</a>
    

    正如其他人所提到的,真正的控制发生在服务器端。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-09
      • 1970-01-01
      • 1970-01-01
      • 2015-07-10
      • 2023-02-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多