2012-01-15 44 views
-1

我非常好奇,因为我希望能够在自己的网站上自行检查这一点,因为我目前正在设计它。一个例子是:网站如何判断用户是否在网址中插入了自己的值

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

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

+0

这就是所谓的“得到”方法。基本上,它就像一个表单,当你“发布”一些信息时,但你在URL本身中有数据。您将以与表单相同的方式获取PHP中的信息。例如,如果该ID不存在,那么您可以重定向到主页或未知页面。 Facebook有很多网址,所以打一个很容易。 – Matt 2012-01-15 04:19:52

+0

那么我知道那些东西,但是有一些例子,网站上肯定有这个ID,我检查了自己,但是当我把它放进去时,它不起作用。所以我不认为它是一个简单的验证。 – Andy 2012-01-15 04:23:27

+0

然后你需要发布代码,因为这就是它的工作原理。这取决于你如何处理通过的数据。它不会自动发生。 – Matt 2012-01-15 23:44:13

回答

3

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

查看https://www.owasp.org/index.php/Top_10_2010-A4的一些额外的细节和例子。

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

因为这被标记为电子商务,所以如果您还没有注意,您应该注意到PCIDSS - 6.5.4:“不安全的直接对象引用”特别适用于此场景。

+0

我完全理解。但这意味着当我为某个网站上的某些产品输入有效的ID时,它应该可以正常工作,但不会。所以我只是好奇。 – Andy 2012-01-15 04:26:43

+1

@安迪 - 请提供一个具体的例子,你已经看到了这个;我很好奇。 – ziesemer 2012-01-15 04:30:13

+0

我更深入地了解了你的链接@ziesemer非常感谢你。它给了我一个正确方向的好点。 – Andy 2012-01-15 04:35:53

0

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

Facebook做同样的事情。

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

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

+0

真的吗?因为我在更改URL中的用户标识,所以对我来说工作得很好。你确定你只是提前输入几个地方吗?我不是说我输入任意数字。我知道他们的存在是因为我在网站上冲浪。 – Andy 2012-01-15 04:24:50

+0

可能他们正在检查HTTP_REFERER,但如果没有看到示例,真的没办法回答这个问题。最终,在大多数情况下,这会是糟糕的用户体验。 – ceejayoz 2012-01-15 04:36:30

+0

谢谢输入@ceejayoz – Andy 2012-01-15 04:41:37

0

威盛$ _ 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) 
} 
+0

再一次,我检查以确保产品ID存在,但它仍然无法使用。但我明白你的意思。我只是想了解它是如何工作的,因为如果没有办法区分用户输入和点击的内容,他们是如何知道我的用户输入是肯定有效的,至少对于他们的数据库来说是如此? – Andy 2012-01-15 04:29:19

+0

你可以somtime修改你的代码来处理你的网址....在我的意思是这个..例如你有Something .....当有人点击这个链接你的网址将被改变.... ($ _ GET ['action'] == send_mail)send_mail()使用$ _GET方法你可以100%检查什么是验证的, ; – cool 2012-01-15 04:34:42

+0

但如果你正在处理依赖的变量,从数据库中检索......你不能确定什么是正确的,什么是不是......用户可以输入他想要的东西......但是你需要明白这一点GOOD INPUTS GO IN DATABASE ...(例如使用PDO并准备报表)...检查数字...检查值...检查信...定期表达...等 – cool 2012-01-15 04:38:27

相关问题