我非常好奇,因为我希望能够在自己的网站上自行检查这一点,因为我目前正在设计它。一个例子是:网站如何判断用户是否在网址中插入了自己的值
www.somesite.com/product.php?id=1356
使用的Facebook,用户可以改变它,他们得到与此ID相关联的用户。但在其他网站,特别是电子商务网站,当我改变它时,它会失败或进入主页。
我非常好奇,因为我希望能够在自己的网站上自行检查这一点,因为我目前正在设计它。一个例子是:网站如何判断用户是否在网址中插入了自己的值
www.somesite.com/product.php?id=1356
使用的Facebook,用户可以改变它,他们得到与此ID相关联的用户。但在其他网站,特别是电子商务网站,当我改变它时,它会失败或进入主页。
没有任何方法可以查看用户是否改变了它。这是安全编码的一部分。从服务器的角度来看,您需要验证所有的输入,并验证当前用户实际上应该有权访问他们请求的资源。
查看https://www.owasp.org/index.php/Top_10_2010-A4的一些额外的细节和例子。
Facebook似乎只允许这样做,因为您试图访问的用户配置文件ID可能会公开给您。但是,您将无权访问所有其他用户配置文件 - 只有您有权访问的用户配置文件。如果您尝试访问我的Facebook个人资料ID,您也会在此处看到您的访问被拒绝。
因为这被标记为电子商务,所以如果您还没有注意,您应该注意到PCIDSS - 6.5.4:“不安全的直接对象引用”特别适用于此场景。
使用Facebook时,用户可以更改它,并获得与此ID关联的用户。但在其他网站,特别是电子商务网站,当我改变它时,它会失败或进入主页。
Facebook做同样的事情。
https://www.facebook.com/profile.php?id=102934810293841029348转到标题为“Profile Unavailable”的错误页面,因为该ID不存在。
您可能只是将其更改为不存在的ID。
威盛$ _ GET方法(或$ _REQUEST)的作品......
你可以改变一些网站的ID的原因,它的工作原理,是因为他们PROGRAMM它这样做。例如,在product.php你就会有这样的事情
if(isset($_GET['id']) {
$id = $_GET['id'];
$id = filterid(id)..... and so ...
}
原因,一些ID不能更改,因为这样的PROGRAMM:)...这仅仅是因为security..For例如,如果你有网页,你知道你的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)
}
再一次,我检查以确保产品ID存在,但它仍然无法使用。但我明白你的意思。我只是想了解它是如何工作的,因为如果没有办法区分用户输入和点击的内容,他们是如何知道我的用户输入是肯定有效的,至少对于他们的数据库来说是如此? – Andy 2012-01-15 04:29:19
但如果你正在处理依赖的变量,从数据库中检索......你不能确定什么是正确的,什么是不是......用户可以输入他想要的东西......但是你需要明白这一点GOOD INPUTS GO IN DATABASE ...(例如使用PDO并准备报表)...检查数字...检查值...检查信...定期表达...等 – cool 2012-01-15 04:38:27
这就是所谓的“得到”方法。基本上,它就像一个表单,当你“发布”一些信息时,但你在URL本身中有数据。您将以与表单相同的方式获取PHP中的信息。例如,如果该ID不存在,那么您可以重定向到主页或未知页面。 Facebook有很多网址,所以打一个很容易。 – Matt 2012-01-15 04:19:52
那么我知道那些东西,但是有一些例子,网站上肯定有这个ID,我检查了自己,但是当我把它放进去时,它不起作用。所以我不认为它是一个简单的验证。 – Andy 2012-01-15 04:23:27
然后你需要发布代码,因为这就是它的工作原理。这取决于你如何处理通过的数据。它不会自动发生。 – Matt 2012-01-15 23:44:13