2011-08-31 77 views
0

如果我希望人们只使用我网站内的链接访问我网页上的某个页面,而不是在地址栏中输入它,那么这样做...PHP安全问题

请注意,用户首先必须登录他们的帐户,并且所有成员页面都已设置,以便用户在访问成员页面之前必须登录到他们的帐户。

if (isset($_SERVER['HTTP_REFERER'])) { 

// show page content 

} 

else { 

header('Location:http://'); 
exit(); 
} 

上午我说,如果点击一个链接后,页面会显示正确的,但如果该链接不点击,其中的链接指向的地址栏会做的是输入的地址重定向。

我在问,因为链接将人们导向到一个表单,并且我不希望这个表单在没有首先在前一页设置一些变量的情况下被访问,或者在没有登录的情况下被访问(因为人们可以创建他们的在其他网站上自己的链接指向同一位置)

感谢

回答

3

这是不安全的。来自here

将用户代理引用到 当前页面的页面地址(如果有)。 这是由用户代理设置的。并非所有用户代理都会设置此项,有些用户代理可以将HTTP_REFERER修改为 功能。 总之,它不能真正被信任。

2

用户可以设置引用到任何他们想要的,所以没有,检查某个设定是不是他们来检查的安全方式的第二页通过第一页。

+0

他们如何设置引用者自己? – carlgcode

+0

我会这么做的最快捷方式是在我的系统上创建一个主机,该主机是www.yourdomain.com,然后通过链接创建一个站点并单击。这就是我如何做到这一点,而不知道如何欺骗它。我敢肯定,有一些Firefox插件可以用我刚刚解释的一半能量来欺骗它。 – Layke

+0

http:// stackoverflow。com/questions/616980/how-do-you-spoof-http-referer – CanSpice

0

这对我来说似乎很麻烦;如果您想要设置某些变量和/或用户登录,只需检查表单页顶部的所有这些条件,并在未满足条件的情况下将访问者重定向到其他位置。

+0

用户是否必须首先登录才没有意义,如果没有登录,所有页面都将无法访问,因此只能使用链接访问该页面我已经定了,不是吗? – carlgcode

+0

@carlgcode不,链接并不重要,您应该检查任何需要用户登录的页面,无论用户是否已登录并自动重定向到登录页面或错误页面(如果不是这种情况)。 – jeroen

0

我不确定你在上一页中设置变量的意思,或者你如何实现这一点。它当然是可能的,但我会对你如何去做感兴趣。

但是,您的问题是正确的,即当来自另一页面时,引用者将被设置为该页面。然而,就安全性而言,依靠它并不是一个好主意,因为它很容易被欺骗。唯一确定的方法是要求提供凭据(用户名和密码等),这听起来像你已经在做。

你不能测试看是否设置了变量,如果他们不是然后重定向?

1

HTTP_REFERRER可能很容易被欺骗。当你希望表单安全时,通过向该字段添加一个隐藏的标记并确保它在提交表单时匹配,实施某种CSRF保护。你最好的选择是确保他们的凭证真正有效。