如果用户尝试访问需要他们登录的页面,我希望将用户重定向到登录页面。但是,登录后,我想将用户重定向回其原始目的地。我写了一个"重定向.php"脚本,该脚本将包含在所有此类页面上:
<?php
require "session.php";
if(!$user){
header("Location: login.php?dest=".urlencode($_SERVER["REQUEST_URI"]));
die();
}
?>
然后在我的登录页面上,我有以下内容:
<?php
$dest = "./";
if(isset($_GET["dest"])){
$dest = $_GET["dest"];
}
?>
使用以下 JavaScript:
var URL = "<?php echo $dest; ?>";
//...
//upon successful login (via AJAX):
window.location.replace(URL);
这里的一切都按预期工作,但从安全的角度来看,这是什么位置?
我想到的一个漏洞是mysite.com/login?dest=http://phishingsite.com。我怎样才能最好地防止这样的事情发生?正则表达式适合这里吗?
这类事情还有其他安全问题吗?也许是这样做的标准方法?或者更好的是,一个根本不使用 GET 变量的方法?
您可以将重定向 uri 放在会话中,让登录页面从那里读取它。黑客没有机会通过 url 或表单帖子传递目的地。