缓解 PHP 中的目录遍历漏洞:安全保留路径
防止未经授权访问敏感目录在 PHP 开发中至关重要。目录遍历漏洞构成重大威胁,使攻击者能够利用不正确的输入验证来导航到指定目录之外。
在提到的场景中,您有一个基本路径“/whatever/foo/”并且需要允许路径相对而言,“...”或“./..”等绝对路径由于其防止遍历攻击的能力不足,不能用作过滤器。
针对这个问题,有效的解决方案是比较真实路径。它的工作原理如下:
$basepath = '/foo/bar/baz/'; $realBase = realpath($basepath); $userpath = $basepath . $_GET['path']; $realUserPath = realpath($userpath); if ($realUserPath === false || strpos($realUserPath, $realBase) !== 0) { // Directory Traversal Detected } else { // Valid Path }
realpath() 函数将提供的路径解析为其相应的物理路径,消除符号链接、“点”导航和其他路径操作技巧。通过比较用户路径的真实路径和基本路径的真实路径,您可以确定是否已尝试遍历。如果真实用户路径不是以真实基本路径开头,则可能会发生遍历。
请注意,realpath() 的输出不包括“.”等虚拟目录。或者 ”...”。因此,比较真实路径可以有效防止攻击者利用此类字符进行遍历漏洞。
以上是PHP开发者如何有效防范目录遍历漏洞?的详细内容。更多信息请关注PHP中文网其他相关文章!