PHP 登录重定向安全性



如果用户尝试访问需要他们登录的页面,我希望将用户重定向到登录页面。但是,登录后,我想将用户重定向回其原始目的地。我写了一个"重定向.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 或表单帖子传递目的地。

最新更新