php导航验证

php导航验证,php,Php,如何通过单击按钮而不是通过复制粘贴URL来检查用户是否已进入页面 例如,如果用户单击了Register,我希望他/她只通过单击Register按钮而不是通过复制粘贴链接进入该页面。 另外,在地址栏上给出页面名称是一种好的做法,还是我必须隐藏页面。如果我隐藏页面,我能做到吗 例如,如果localhost/projname/register.php。除了localhost/projname之外,我不希望人们在地址栏上看到注册、登录、关于或任何东西。也许可以检查他是否使用了$\u POST,比如: &

如何通过单击按钮而不是通过复制粘贴URL来检查用户是否已进入页面

例如,如果用户单击了Register,我希望他/她只通过单击Register按钮而不是通过复制粘贴链接进入该页面。 另外,在地址栏上给出页面名称是一种好的做法,还是我必须隐藏页面。如果我隐藏页面,我能做到吗


例如,如果localhost/projname/register.php。除了localhost/projname之外,我不希望人们在地址栏上看到注册、登录、关于或任何东西。

也许可以检查他是否使用了$\u POST,比如:

<?php
if($_SERVER['REQUEST_METHOD'] == "POST"){
// do ya thing
}
else
{
?>
<form action="index.php" method="post">
are you sure? <input type="submit" value="yes">
</form>
<?php
}
?>

也许可以检查一下他是否使用了$U POST,比如:

<?php
if($_SERVER['REQUEST_METHOD'] == "POST"){
// do ya thing
}
else
{
?>
<form action="index.php" method="post">
are you sure? <input type="submit" value="yes">
</form>
<?php
}
?>
您可以使用保留变量的HTTP_REFERER数据查看用户来自何处

if(empty($_SERVER['HTTP_REFERER'])) {
    // if we are here, the user copy pasted the url.
}
至于你的第二个问题,你不能像你建议的那样完全隐藏页面。web服务器必须知道要显示哪个页面,因此浏览器必须清楚地知道该显示哪个页面

但是,您可以混淆页面名称。例如,您可以调用页面sfhjgdjkfg,这样用户就无法知道这是注册页面。但我认为这真的是个坏主意,为什么首先要隐藏它?

您可以使用保留变量的HTTP\u REFERER数据来查看用户来自何处

if(empty($_SERVER['HTTP_REFERER'])) {
    // if we are here, the user copy pasted the url.
}
至于你的第二个问题,你不能像你建议的那样完全隐藏页面。web服务器必须知道要显示哪个页面,因此浏览器必须清楚地知道该显示哪个页面


但是,您可以混淆页面名称。例如,您可以调用页面sfhjgdjkfg,这样用户就无法知道这是注册页面。但是我认为这真的是个坏主意,为什么首先要你隐藏它?

如果你的表单使用POST参数,浏览器会传递一些POST数据。然后你可以检查一下

if (empty($_POST)) {
   //didn't click the button, just went straight to the url
}else{
   //did click the button
}

如果表单使用POST参数,浏览器将传递一些POST数据。然后你可以检查一下

if (empty($_POST)) {
   //didn't click the button, just went straight to the url
}else{
   //did click the button
}
一种方法是使用$\u SERVER['HTTP\u REFERER']来验证他们是否从您的站点单击了一个链接,但这种方法不是万无一失的,因为许多防火墙和防病毒套件都会删除引用者信息

更好的方法是在站点的页面上生成临时会话令牌,并在注册页面打开时检查该令牌。

一种方法是使用$\u服务器['HTTP\u REFERER']验证他们是否单击了来自站点的链接,但这种方法并不是万无一失的,因为许多防火墙和防病毒套件都会删除引用者信息


更好的方法是在站点的页面上生成一个临时会话令牌,并在注册页面打开时检查该令牌。

仅在帖子上显示页面可能会添加一个有限生命周期的令牌检查,以检查它们是否来自您的表单,尽管我认为如果这是你的要求,你可能试图用错误的方式解决问题。无法直接访问url的原因是什么?您可以查看HTTP referer,但它非常不可靠,很容易伪造/伪造/颠覆,而且在许多情况下根本不存在。@Wirkken:可能是我认为它可以为网页增加额外的安全性。我仍在学习,因此我会接受评论和建议,以了解更多关于PHP的信息。只有在帖子上显示页面,才可能添加一个生命周期有限的令牌检查,以检查它们是否来自您的表单,尽管我认为如果这是您的要求,您可能试图以错误的方式解决问题。无法直接访问url的原因是什么?您可以查看HTTP referer,但它非常不可靠,很容易伪造/伪造/颠覆,而且在许多情况下根本不存在。@Wirkken:可能是我认为它可以为网页增加额外的安全性。我还在学习,所以我会接受评论和建议来了解更多关于PHP的信息。不要在$\u帖子上使用EMPTY或ISSET!!到目前为止,这是检查服务器是否请求$u POST的不正确方法。如何检查?我一直都是这样做的。我理解,一个人可以发送POST数据,模拟他点击表单,虽然是的,也可以重新创建一个虚拟表单并以页面为目标。但我同意isset和empty可能有效,但我会更具体地在索引中添加我要查找的确切索引。不要在$\u POST上使用empty或isset!!到目前为止,这是检查服务器是否请求$u POST的不正确方法。如何检查?我一直都是这样做的。我理解,一个人可以发送POST数据,模拟他点击表单,虽然是的,也可以重新创建一个虚拟表单并以页面为目标。但我同意isset和empty可能有效,但我会更具体地在索引中添加我正在寻找的确切索引。可能是我在想,这可能是网站的某种安全性。我是新手,所以我只想知道在实时环境中是如何工作的。这是因为我正在开发一个实时网站
使用因此,我在考虑开发WebItemay时必须遵循的所有可能性和公平性。我在想,这可能是网站的某种安全性。我是新手,所以我只想知道在实时环境中是如何工作的。这是因为我正在开发一个实时使用的网站。因此,我在考虑开发网站时必须遵循的所有可能性和公平性