网站如何判断用户是否在URL中插入了自己的值

时间:2012-01-15 04:16:49

标签: php e-commerce

我很好奇,因为我希望能够在我自己的网站上自行查看,因为我目前正在设计它。一个例子是:

www.somesite.com/product.php?id=1356

使用Facebook时,用户可以更改它,并获得与此ID相关联的用户。但在其他网站,特别是电子商务网站,当我更改它时,它会失败或进入主页。

3 个答案:

答案 0 :(得分:3)

没有任何方法可以查看用户是否更改了它。这是安全编码的一部分。从服务器的角度来看,您需要验证所有输入,并验证当前用户是否应该有权访问他们请求的资源。

有关其他详细信息和示例,请参阅https://www.owasp.org/index.php/Top_10_2010-A4

Facebook似乎只允许您提供的示例,因为您尝试访问的用户个人资料ID可能对您公开。但是,您将无法访问所有其他用户配置文件 - 只有您有权访问的用户配置文件。如果您尝试访问我的Facebook个人资料ID,您也会在此处看到您的访问被拒绝。

由于这被标记为电子商务,您还应该知道PCI DSS(如果您还没有) - 其中6.5.4:“不安全的直接对象引用”特别适用于这种情况。

答案 1 :(得分:0)

  

使用Facebook时,用户可以更改它,并获得与此ID相关联的用户。但在其他网站,特别是电子商务网站,当我更改它时,它会失败或进入主页。

Facebook做同样的事情。

https://www.facebook.com/profile.php?id=102934810293841029348转到标题为“个人资料不可用”的错误页面,因为该ID不存在。

您可能只是将其更改为不存在的ID。

答案 2 :(得分:0)

通过$ _GET方法(或$ _REQUEST)...

工作

您可以更改某些网站ID(或任何其他参数,这是网址的一部分)的原因,并且它的工作原理是,因为他们将其编程为行为类似。它实际上取决于如何在后台使用此url参数。例如,在product.php中,您将拥有以下内容:

if(isset($_GET['id']) {
  $id = $_GET['id'];
  $id = filterid(id)..... and so ...

  // Maybe check for id and redirect if id is not ok
  // Maybe check for id and some additional secrete parameter ...?

  // What is the id? What kind of behavior you want?
}

您在不同网站上有不同行为的原因 - 依赖于url参数(在本例中为“id”) - 是因为在不同情况下实施了不同的行为......

由于安全性,他们中的一些人实施了严格的检查(特别是对于id)!例如,如果您有页面并且您知道您的id必须是数字,并且您知道数据库中的最大ID是例如15000,那么您可以编写类似这样的内容....

if(isset($_GET['id'] && strlen($_GET['id']) <= 5 && isNumeric($_GET['id']) {
       //if everything is ok you can execute your code here
}
else {
      $id = 1; //if someone try to put something else in id, you will simply redirect him on first id(firs product)
}

这只是行为的一个例子。现在考虑还能做些什么?你想让我做什么?你想怎么表现?您将在您身边实施什么样的行为 - 依赖于网址中的参数完全取决于您。 用户可以通过点击预定义的链接来跟踪您的网络应用上的逻辑 - 或者他可以随心所欲地操纵网址。你没有办法检查这个。您所能做的就是正确验证所有输入(无论是来自网址还是某种帖子请求)