使用相对路径时,防止可能危及敏感系统信息的目录遍历攻击至关重要。
考虑这样一种情况,您有一个基本路径“/whatever/foo/”,并且需要允许使用相对路径$_GET['path'] 变量。但是,恶意行为者可能会尝试通过注入路径遍历序列(如“..”或“./”)来访问受限制的目录来利用此机制。
要在允许相对路径的同时有效防止目录遍历,您可以利用以下技术:
$basepath = '/foo/bar/baz/'; $realBase = realpath($basepath); $userpath = $basepath . $_GET['path']; $realUserPath = realpath($userpath); if ($realUserPath === false || strpos($realUserPath, $realBase) !== 0) { // Directory Traversal Attempt Detected } else { // Valid Path }
此方法利用 realpath() 函数来确定基本路径和用户提供的路径的绝对物理路径。通过比较这些绝对路径,可以验证用户路径没有遍历指定的基本路径之外。如果确实如此,realpath() 将返回 false 或不正确的路径,从而触发目录遍历尝试的检测。
以上是如何在允许相对路径的同时防止 PHP 中的目录遍历攻击?的详细内容。更多信息请关注PHP中文网其他相关文章!