Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 防止Drupal 7中的任意文件下载_Php_Drupal_Drupal 7_Drupal Services - Fatal编程技术网

Php 防止Drupal 7中的任意文件下载

Php 防止Drupal 7中的任意文件下载,php,drupal,drupal-7,drupal-services,Php,Drupal,Drupal 7,Drupal Services,Drupal Vurnebily: 可以下载Web服务器可读的任何文件。问题在于web应用程序提供的文件下载功能无法正确验证用户发送的用于指定要下载的文件的参数。这种利用漏洞的最常见用途之一是恢复应用程序的源代码以及可能包含其他服务密码的配置文件 开发示例: 在drupal中创建的应用程序表单允许用户上传文档 如果表单在提交时不完整,则会将用户重定向回表单以完成缺少的详细信息。如果文档已经上传,此表单将在一个名为zivotopis的隐藏HTML输入字段中包含上传简历的完整路径。 正确填写并提交表

Drupal Vurnebily:

可以下载Web服务器可读的任何文件。问题在于web应用程序提供的文件下载功能无法正确验证用户发送的用于指定要下载的文件的参数。这种利用漏洞的最常见用途之一是恢复应用程序的源代码以及可能包含其他服务密码的配置文件

开发示例:

在drupal中创建的应用程序表单允许用户上传文档

如果表单在提交时不完整,则会将用户重定向回表单以完成缺少的详细信息。如果文档已经上传,此表单将在一个名为zivotopis的隐藏HTML输入字段中包含上传简历的完整路径。 正确填写并提交表单后,服务器将执行以下代码:

<?php
if($_POST['zivotopis']) {
   // Create managed File object and associate with Image field.
   $oldFilepath = base64_decode($_POST['zivotopis']);
   if(strpos($oldFilepath,'.doc')) $extension = '.doc';
   else if(strpos($oldFilepath,'.docx')) $extension = '.docx';
   else if(strpos($oldFilepath,'.pdf')) $extension = '.pdf';
   $newFilename = strtoupper($_POST['field_item_last_name_label']).'_'.
$_POST['field_item_first_name_label'].'_CV'.$extension;
   $newFilename = str_replace(" ", "-", $newFilename);
   $newFilepath = drupal_realpath(dirname(__FILE__))."/tmp/".$newFilename;
   copy($oldFilepath, $newFilepath);
// ...
访问上载的文件url后,它包含数据库凭据

我的问题是

如何防止不接受用户控制的文件路径

或者为什么不禁用PHP eval()函数


关于如何遵循Drupal安全性的任何想法,Drupal提供公共和私有文件系统。对于每个文件字段(在webform或内容类型设置中),您可以选择应使用哪个字段。此外,在介质->文件系统下,您可以指定这两个系统的路径

我没有使用私有系统,但我猜Drupal会将.htaccess文件放在私有文件根目录中,防止直接访问位于那里的文件,并通过PHP提供文件,同时检查当前用户的访问权限


同样,我也不是100%确定,但应该可以将private dir完全设置在站点web根目录之外(上面)(web服务器无法访问),因此甚至不需要.htaccess保护。

Drupal提供公共和私有文件系统。对于每个文件字段(在webform或内容类型设置中),您可以选择应使用哪个字段。此外,在介质->文件系统下,您可以指定这两个系统的路径

我没有使用私有系统,但我猜Drupal会将.htaccess文件放在私有文件根目录中,防止直接访问位于那里的文件,并通过PHP提供文件,同时检查当前用户的访问权限

同样,我不是100%确定,但应该可以将私有目录完全设置为站点web根目录(web服务器无法访问)之外的目录(如上所述),因此甚至不需要.htaccess保护

...
-----------------------------7667788801930707109771964994
Content-Disposition: form-data; name="zivotopis"
Li9zaXRlcy9kZWZhdWx0L3NldHRpbmdzLnBocA==
-----------------------------7667788801930707109771964994
....