0

我正在使用 cakephp 2.1,并且我已经编写了一些操作,例如查看、编辑和删除。在 url 中,它看起来像 'view/1'、'edit/1'、'delete/1',这样我就可以更改 url 中的 id。我不想在 url 中更改它,它不应该允许编辑 id。请帮我这样做。工作会更有价值。

4

1 回答 1

0

好的......我想我理解你的问题。您担心如果人们可以编辑 ID,因为它们在 URL 中可见,那么这将是一个安全威胁?

一、查看动作:

您应该在服务器端检查用户是否有权查看具有该特定 ID 的记录。如果他们不这样做,那么你可以给出一个错误。如果他们这样做了,那么让他们查看它 - 不要担心他们是如何到达那里的,无论他们是否编辑了 URL 中的 ID。如果他们有权查看记录,就让他们查看。

二、删除动作:

同样,就像查看操作一样,您应该在服务器端检查用户是否有权删除记录。如果他们这样做,那么让他们删除它!如果他们编辑了 URL 中的 ID,请不要担心。如果用户没有删除记录的权限,那么您的服务器端检查将阻止他们,即使他们已经编辑了 URL 中的 ID。

三、编辑动作:

这稍微复杂一些,但仍然很容易。我假设您正在使用 HTML 表单编辑记录,并通过 POST 提交。好的,所以 URL 中的 ID 决定了要获取和编辑的记录。与查看和删除一样,您应该进行服务器端检查以确保用户有权编辑该项目。如果他们确实获得许可,则返回表格。

一旦表单加载完毕,浏览器中显示的 URL 就不再重要了。表单提交到的 URL 以及表单提交的数据很重要。现在,默认情况下,编辑表单会将 ID 存储在隐藏的输入字段中。用户可以更改该 ID,从而更改他们正在编辑的记录。

为了防止这种情况,请使用 CakePHP 的安全组件。您需要做的就是包含该组件,CakePHP 会在表单加载时自动在表单上放置一个散列,当表单提交时它会再次检查该散列。如果用户编辑了隐藏的输入字段,则此检查将失败,并且 CakePHP 将不允许继续进行编辑。

请注意,要以这种方式使用安全组件,您必须使用 CakePHP 的表单助手(您可能已经使用)构建表单。

最后一点......有时人们对任何人在他们的数据库中看到 ID 有点偏执 - 因此不希望他们显示在 URL 或其他任何地方。但是,几乎在所有情况下,ID 都没有什么“秘密”。谁看到他们并不重要。它们只是您的应用程序和数据库识别记录的一种手段。只要您的应用程序是安全的,那么您应该能够向全世界展示您的所有 ID,而无需担心。

于 2012-10-26T22:15:31.533 回答