0

我对 php 还很陌生,我想知道该怎么做。

对于我网站上的几个功能,我有一个 php 脚本来处理用户单击某些内容后的操作。IE:

<a href='/php/delete.php?id=xxx'>delete</a>

<form action='/php/handleregistration.php' method='post'></form>

在我的代码中,当您查看源代码时,这些链接很容易看到,但是查看其他网站的代码,这些引用就更难找到了。我想大多数是由相同类型的 php 脚本处理的,但通过一些 javascript/jQuery 处理。

所以,我的问题是,我应该这样做吗?为什么以及最好的方法是什么?

4

4 回答 4

3

不,URI 是公共信息。它们必须被发送到浏览器,以便浏览器向它们发出请求。如果浏览器得到一些信息,用户也会得到它。当您必须调试事物时,混淆 URI 只会让您的生活更加困难。

OTOH,你应该做的是:

  1. 在让某人编辑数据之前执行身份验证/授权(包括“用户是否允许删除内容?”之类的测试)。
  2. 对更改服务器上数据的请求(例如删除内容)使用 POST 请求(因此不是链接)
于 2013-01-07T18:05:45.357 回答
2

我不相信你需要担心。您应该始终编写安全代码,并在对数据进行任何操作之前验证和清理您的数据。IE:不要假设 id=xxx 是有效的,因为有人可以手动输入知道脚本 URL 的内容。

您看到的大多数网站可能都在使用框架或某种 url 重写。这使得 URL 看起来更好(甚至是脚本)。不过,它并没有增加太多的安全性,这可以被认为是通过默默无闻的安全性。它只会阻止不知道自己在做什么的人受到简单的攻击。它永远不会阻止熟练的攻击者,这就是为什么应该在服务器端实施安全性。

编辑:

作为旁注,您可能希望使用 POST 进行删除,以防止一些令人讨厌的不可预见的后果。正如蒂姆所说,您应该有一个删除确认页面,因为即使用户登录,也不意味着他们可以控制。

想象一个网站的 iframe 设置为 width=0 和 height=0 src=http://yoursite.com/php/delete.php?id=xxx

这将导致登录用户删除他们的帐户。(或更改密码、从信用卡扣款等)在他们不知情的情况下。

当然,将 GET 更改为 POST 并不能完全解决这个问题,但它是保护 Web 应用程序的众多步骤之一。

于 2013-01-07T18:06:16.577 回答
1

始终在服务器上强制执行安全性。最终,在客户端(Web 浏览器)上所做的事情无关紧要。

但是,您可能希望(强烈建议这样做)使用不同的 HTTP 方法,例如 GET、POST、PUT 和 DELETE,以更好地表示操作。这可能会稍微影响您的标记/JavaScript,例如将您的删除按钮放在一个表单中,以便您可以使用 HTTP DELETE 方法。

http://en.wikipedia.org/wiki/Representational_state_transfer

于 2013-01-07T18:04:41.543 回答
1

没有什么不同的。任何人都可以查看浏览器开发工具的网络选项卡,并查看发送到您的服务器的内容。

无论您的代码多么模糊,客户端都没有安全性。

相反,验证服务器上的所有内容。

于 2013-01-07T18:05:02.803 回答