gpt4 book ai didi

playframework - 如何防止带有 ID 的隐藏字段被黑客入侵

转载 作者:行者123 更新时间:2023-12-04 03:35:07 24 4
gpt4 key购买 nike

我正在构建一个简单的 CRUD 应用程序(不使用 CRUD 模块)。

我的模型是一个具有一个属性的简单类。 id 隐式继承自 Model。

@Entity
public class Account extends Model {

@Required
public String domain;
}

观点如下。请注意带有 id 的隐藏字段。

<form class="form-horizontal" action="@{Application.save}" method="POST">
<fieldset>
<legend>Settings</legend>
<input type="hidden" name="account.id" value="${account?.id}">

#{field 'account.domain'}
<div class="control-group #{if field.error != null} error #{/if}">
<label class="control-label" for="${field.id}">&{field.name}</label>
<div class="controls">
<input type="text" class="input-xlarge" id="${field.id}" value="${field.value}" name="${field.name}">
<span class="help-inline">${field.error}</span>
</div>
</div>
#{/field}

<div class="form-actions">
<input class="btn btn-primary" type="submit" value="Save">
</div>

</fieldset>

我已经能够构建一个保存、更新工作的场景。

完成更新的方式是我从隐藏字段中读取 ID,并更新记录。如果 ID 不可用,则会创建一条新记录。

所以问题是: ID可以被黑客入侵,即修改,以便我将1更改为2,并假设存在2的记录,它会被覆盖。 (我想使用 firebug 或其他插件应该不难)。

我该如何防止这种情况?我想到的一个选项是读取具有给定 ID 的记录,如果允许用户修改它,我允许更新,否则不允许。这仍然不是万无一失的,因为虽然可以允许用户,但可以修改“错误”记录。

我想这是一个已知问题,希望有一个已知的解决方案。

感谢您花时间回答我的问题。

最佳答案

So the question is: Can the ID be hacked i.e modified so that I change 1 to 2, and assuming a record with 2 exists, it gets overwritten. (I suppose it shouldn't be difficult with firebug or other plugins).

How do I prevent this? One option I thought of is to read the record with the given Id, if user is allowed to modify it, I allow update, otherwise not. This is still not fool proof because, while the user could be allowed, "wrong" record could be modified.



当然,攻击者可以更改记录的 id。

有几种方法可以最大限度地减少这种攻击的影响。

1) 最简单的方法 - 对象获取 :

从数据库中获取对象并检查它是否属于相关用户。 这将防止其他用户弄乱不属于他们的对象,但不会阻止用户更改属于他的另一个对象。在大多数情况下,这是一种简单且足够的方法。

2) 更复杂: 签约 :

这里的想法是 签署您提供给模板的常量,并检查表单提交后哈希是否仍然匹配。
这与 play 对其 session 所做的非常相似。攻击者不可能弄乱常量(例如 id)并提供最大的安全性。但是,您还有更多工作要做。

例子:
    public static void someActionDisplayingForm(){
SomeObject o = ....
SomeOtherObject o2 = ....
String constants = o.id + "|" + o2.id;
String hash = Crypto.sign(constants);
render(o, o2, hash);
}

在您拥有的模板中
 #{form ...}
<input type='hidden' name='id1' value='${o.id}' />
<input type='hidden' name='id2' value='${o2.id}' />
<input type='hidden' name='hash' value='${hash}' />

在处理表格的方法中你会做
 public static void processing(String id1, String id2, String hash, String otherValues, ...){
String constants = id1 + "|" + id2;
String checkHash = Crypto.sign(constants);
if(!checkHash.equals(hash))
badRequest();
...
}

希望有帮助。

关于playframework - 如何防止带有 ID 的隐藏字段被黑客入侵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10843390/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com