首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >安全漏洞?

安全漏洞?
EN

Stack Overflow用户
提问于 2013-05-27 10:34:40
回答 5查看 273关注 0票数 4

使用此代码的影响是什么?

代码语言:javascript
复制
<?php
if(file_exists("pages/" . $_GET["page"] . ".php")){
    include("pages/" . $_GET["page"] . ".php");
    } else{
        include("pages/home.php");
        }
?>

我已经让它让你不能在没有".php“扩展的情况下加载任何东西,所以我认为使用它是非常安全的。如果您使用:

代码语言:javascript
复制
website.com/index.php?page=../index 

在url中,它将创建一个无限循环。据我所知,你不能加载外部URL。

示例:

代码语言:javascript
复制
website.com/index.php?page=anothersite.com/virus

但我不是很确定,有什么建议吗?或者这可以使用吗?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-05-27 13:27:56

正如zerkms已经指出的,根据PHP版本的不同,file_existsinclude可能会not be safe when handling NULL bytes。只有since PHP version 5.4.3, filesystem functions are said to be NULL byte safe

因此,您应该在使用该值之前对其进行验证,例如,使用允许值的白名单:

代码语言:javascript
复制
$allowedPages = array(/* … */);
if (in_array($_GET["page"], $allowedPages)) {
    // allowed
}

您还可以将此白名单扩展到文档根目录下的任何现有文件:

代码语言:javascript
复制
if (strpos($_GET["page"], "\0") !== false) {
    // NULL byte detected
}
$path = realpath("pages/" . $_GET["page"] . ".php");
$base = realpath($_SERVER['DOCUMENT_ROOT']) . "/";
if ($path !== false && substr($path, 0, strlen($base)) === $base) {
    // allowed
}

但是,这仍然可以用于绕过其他访问控制措施,如基于位置的HTTP授权。

票数 2
EN

Stack Overflow用户

发布于 2013-05-27 13:36:31

结合使用../../模式和空字节可能会导致路径“转义”其封闭部分。

代码语言:javascript
复制
"../../../etc/passwd\0.php"

你可以对它做两件事:

  1. 使用您希望首先accept.
  2. Sanitize该路径的可能值的白名单,例如

$path = preg_replace('/^a-z/','');//现在像使用一样使用$path

票数 2
EN

Stack Overflow用户

发布于 2013-05-27 10:58:57

首先,根据URL参数包含页面是不安全的,这很容易被用户搞乱,你最好避免这样做。

其次,如果您希望避免包含外部url,则可能需要根据http://www.php.net/manual/en/filesystem.configuration.php#ini.allow-url-include配置php.ini。

如果您还没有开始配置页面,您可以首先修剪$_GET‘https://“’中"http://"”页面字符串,这是一个很好的行为,并创建一个.htaccess文件来将不存在的页面请求重定向到home.php,您还必须确保您的服务器上有mod_rewrite。

代码语言:javascript
复制
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d

RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ home.php [NC,L] 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16765652

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档