我很好奇,因为我希望能够在我自己的网站上自行查看,因为我目前正在设计它。一个例子是:
www.somesite.com/product.php?id=1356
使用Facebook时,用户可以更改它,并获得与此ID相关联的用户。但在其他网站,特别是电子商务网站,当我更改它时,它会失败或进入主页。
答案 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)
}
这只是行为的一个例子。现在考虑还能做些什么?你想让我做什么?你想怎么表现?您将在您身边实施什么样的行为 - 依赖于网址中的参数完全取决于您。 用户可以通过点击预定义的链接来跟踪您的网络应用上的逻辑 - 或者他可以随心所欲地操纵网址。你没有办法检查这个。您所能做的就是正确验证所有输入(无论是来自网址还是某种帖子请求)