php – 安全漏洞?
发布时间:2020-12-13 17:16:45 所属栏目:PHP教程 来源:网络整理
导读:使用此代码会产生什么影响? ?phpif(file_exists("pages/" . $_GET["page"] . ".php")){ include("pages/" . $_GET["page"] . ".php"); } else{ include("pages/home.php"); }? 我已经做到了这样你就不能在没有“.php”扩展名的情况下加载任何东西,所以我认
使用此代码会产生什么影响?
<?php if(file_exists("pages/" . $_GET["page"] . ".php")){ include("pages/" . $_GET["page"] . ".php"); } else{ include("pages/home.php"); } ?> 我已经做到了这样你就不能在没有“.php”扩展名的情况下加载任何东西,所以我认为使用起来非常安全.如果您使用: website.com/index.php?page=../index 在url中它将创建一个无限循环.据我所知,您无法加载外部URL. 例: website.com/index.php?page=anothersite.com/virus 但我不确定,有什么建议吗?或者这可以使用吗? 解决方法
正如
zerkms已经指出的那样,取决于PHP版本,file_exists和include可能是
not be safe when handling NULL bytes.仅
since PHP version 5.4.3,filesystem functions are said to be NULL byte safe.
因此,您应该在使用之前验证该值,例如,使用允许值的白名单: $allowedPages = array(/* … */); if (in_array($_GET["page"],$allowedPages)) { // allowed } 您还可以将此白名单展开到文档根目录下的任何现有文件: if (strpos($_GET["page"]," ") !== false) { // NULL byte detected } $path = realpath("pages/" . $_GET["page"] . ".php"); $base = realpath($_SERVER['DOCUMENT_ROOT']) . "/"; if ($path !== false && substr($path,strlen($base)) === $base) { // allowed } 但是,这仍然可以用于绕过其他访问控制措施,例如基于位置的HTTP授权. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |