在标头重定向中使用PHP_SELF值是否安全


Is it safe to use a PHP_SELF value in a header redirect?

即将其存储在会话中,然后在用户登录时重定向到该页面?

$_SESSION['last_page'] = $_SERVER['PHP_SELF'];    
//(in a common file on all pages)

然后登录后:

header('location: ' . $_SESSION['last_page']);`

我想知道,因为我读到人们可以修改$_SERVER 中某些密钥的值

使用SCRIPT_NAME更好还是PHP_SELF好?

它可以用于XSS漏洞。

不要冒险使用

 $_SERVER['SCRIPT_NAME'];

相反。

在设置HTTP标头时,不应该为Location提供相对路径/URL,请指定脚本的完整URL。

$_SESSION['last_page'] = "http://" . $_SERVER["SERVER_NAME"] . $_SERVER["PHP_SELF"];
header('Location: ' . $_SESSION['last_page']);

$_SERVER["SCRIPT_NAME"]&$_SERVER["PHP_SELF"]是指PHP_SELF"记住"URL中引用PHP脚本后指定的任何信息。如果您不需要这些额外信息,只需使用$_SERVER["SCRIPT_NAME"]即可。

不能直接信任会话变量。它们被视为用户输入,就像GET或POST变量一样。因此,我建议您列出一些可能性(或者使用REGEX(来测试$_SESSION['last_page']是否有效,然后再使用它,,尤其是在重定向中