CKFinder 3 – PHP 连接器文档
配置

配置文件

CKFinder 3 带有两个配置文件

  • config.php – 服务器端配置文件,本文档将对其进行解释。
  • config.js – 可选的客户端配置文件,在关于 设置 JavaScript 配置 的 API 文档文章中进行了解释。

以下选项可以在 config.php 文件中设置

选项名称类型描述
accessControl 数组访问控制列表 (ACL),用于根据用户角色授予用户对 CKFinder 文件夹和文件进行不同操作的权限。
authentication 函数
可调用对象
用于确定用户是否应该访问 CKFinder 的函数。
backends 数组后端配置,其中必须定义 CKFinder 应支持的所有存储类型(例如,本地文件系统上的目标路径;FTP 主机名、用户名和密码;Dropbox 帐户凭据)。
cache 3.1.0数组配置各种 CKFinder 组件的缓存生命周期。
checkDoubleExtension 布尔值是否允许使用双文件扩展名。
checkSizeAfterScaling 布尔值是否在缩放前或缩放后检查图像的尺寸以确定最大允许尺寸。
debug 布尔值打开/关闭调试模式。
debugLoggers 数组启用调试模式时使用的调试处理程序。
defaultResourceTypes 字符串配置应向最终用户显示的资源类型。
disallowUnsafeCharacters 布尔值不允许创建包含在 IIS Web 服务器上不安全的字符的文件夹和上传文件。
csrfProtection 3.2.0布尔值在连接器中启用 CSRF 防护。
forceAscii 布尔值强制文件和文件夹使用 ASCII 名称。
headers 数组要添加到每个连接器响应的 HTTP 标头。
hideFiles 数组无论其位置如何,都不应在 CKFinder 中显示的文件。
hideFolders 数组无论其位置如何,都不应在 CKFinder 中显示的文件夹。
htmlExtensions 数组允许在首个 kB 数据中包含 HTML 代码的文件类型。
images 数组图像配置,如最大允许宽度和高度。
licenseKey 字符串CKFinder 许可证密钥。如果无效,CKFinder 将以演示模式运行。
licenseName 字符串CKFinder 许可证名称。如果无效,CKFinder 将以演示模式运行。
overwriteOnUpload 字符串是否在上传时覆盖文件,而不是自动重命名。
plugins 数组要启用的插件列表。
pluginsDirectory 字符串连接器插件目录的路径。
privateDir 数组私有目录位置和设置。
resourceTypes 数组CKFinder 中处理的资源类型。每个资源类型都表示为 CKFinder 中的“根”文件夹(例如,FilesImages),并指向已配置后端的特定文件夹。
roleSessionVar 字符串CKFinder 必须用来检索当前用户的“角色”的会话变量名称。
secureImageUploads 布尔值是否在上传图像文件时执行其他检查。
sessionWriteClose 3.1.0布尔值连接器是否应关闭对会话的写入访问权限,以避免性能问题。
tempDirectory 3.1.0字符串CKFinder 使用的临时文件文件夹的路径。
thumbnails 数组内部缩略图配置。
xSendfile 布尔值是否使用 X-Sendfile 模块发送文件。

注意: config.php 是一个普通的 PHP 文件,因此如果在其中犯了错误,例如忘记分号,应用程序可能会停止工作。

配置选项

accessControl

访问控制列表 (ACL) 是一项功能,它允许您的用户对 CKFinder 文件夹和文件进行不同的操作。放置在 config.php 文件中的默认设置向每个用户授予所有选项的完全权限。

访问控制列表语法

ACL 条目的语法如下

$config['accessControl'][] = array(
'role' => '*',
'resourceType' => '*',
'folder' => '/',
'FOLDER_VIEW' => true,
'FOLDER_CREATE' => true,
'FOLDER_RENAME' => true,
'FOLDER_DELETE' => true,
'FILE_VIEW' => true,
'FILE_CREATE' => true,
'FILE_RENAME' => true,
'FILE_DELETE' => true,
'IMAGE_RESIZE' => true,
'IMAGE_RESIZE_CUSTOM' => true
);

访问控制列表条目使用以下值定义

选项名称类型描述
role 字符串提供 ACL 设置的用户角色(请参阅 roleSessionVar)。默认情况下,它设置为 *(星号),表示“所有人”。
resourceType 字符串资源类型的名称(请参阅 resourceTypes)。默认情况下,它设置为 *(星号),表示“所有资源类型”。
folder 字符串将使用限制的文件夹。默认情况下,它设置为 /(斜杠),表示“资源类型的根文件夹”。
FOLDER_VIEW 布尔值用户是否可以查看文件列表。
FOLDER_CREATE 布尔值用户是否可以创建文件夹。
FOLDER_RENAME 布尔值用户是否可以重命名文件夹。
FOLDER_DELETE 布尔值用户是否可以删除文件夹。
FILE_VIEW 布尔值用户是否可以查看文件内容。
FILE_CREATE 布尔值用户是否可以创建(例如,上传)文件。
FILE_RENAME 布尔值用户是否可以重命名文件。
FILE_DELETE 布尔值用户是否可以删除文件。
IMAGE_RESIZE 布尔值选择图像时,用户是否可以将其调整为配置文件中预定义的尺寸。
IMAGE_RESIZE_CUSTOM 布尔值选择图像时,用户是否可以将其调整为任何尺寸。

注意: IMAGE_RESIZEIMAGE_RESIZE_CUSTOM 选项对应于选择调整大小功能,该功能会自动创建所选图像的调整大小版本。它们不会影响在 CKFinder 的图像编辑器(编辑功能)中修改的图像的调整大小。

可以定义多个 ACL 条目。所有属性都是可选的。子文件夹从其父级定义继承其默认设置。

关于文件夹

重要的是要了解 folder 条目的含义。在 ACL 定义中,folder 是相对于资源类型位置的路径。这不是服务器上文件夹的绝对路径。

示例

如果 Files 资源类型指向 /home/joe/www/example.com/userfiles/files/,则为 Files 资源类型中的 /documents 文件夹定义的 ACL 将应用于 /home/joe/www/example.com/userfiles/files/documents/

访问控制列表示例

请查看以下示例,这些示例展示了各种权限配置,以进一步了解如何在 CKFinder 中使用访问控制列表。

示例 1

Images 资源类型的 /Logos 文件夹中禁止文件操作。

若要限制在 Images 资源类型的 Logos 文件夹中上传、重命名或删除文件,请使用以下 ACL 设置

$config['accessControl'][] = Array(
'role' => '*',
'resourceType' => 'Images',
'folder' => '/Logos',
'FOLDER_VIEW' => true,
'FOLDER_CREATE' => true,
'FOLDER_RENAME' => true,
'FOLDER_DELETE' => true,
'FILE_VIEW' => true,
'FILE_CREATE' => false,
'FILE_RENAME' => false,
'FILE_DELETE' => false,
'IMAGE_RESIZE' => true,
'IMAGE_RESIZE_CUSTOM' => true
);

注意: 此示例仅引用 /Logos 文件夹中的文件操作。它不限制对文件夹的操作,因此用户仍然可以删除或重命名它。若要限制用户修改文件夹本身(而不是其内容)的能力,您还应更改文件夹权限。

示例 2

使所有资源类型的 /Logos 文件夹完全只读。

若要限制在所有资源类型(*)的 /Logos 文件夹(包括 /Logos 文件夹本身)中上传、重命名或删除文件以及创建、重命名和删除文件夹,请使用以下 ACL 设置

$config['accessControl'][] = Array(
'role' => '*',
'resourceType' => '*',
'folder' => '/Logos',
'FOLDER_VIEW' => true,
'FOLDER_CREATE' => false,
'FOLDER_RENAME' => false,
'FOLDER_DELETE' => false,
'FILE_VIEW' => true,
'FILE_CREATE' => false,
'FILE_RENAME' => false,
'FILE_DELETE' => false,
'IMAGE_RESIZE' => false,
'IMAGE_RESIZE_CUSTOM' => false
);

使用这些权限,用户甚至没有权利用选择调整大小功能创建现有图像的调整大小版本。

示例 3

由于权限由子文件夹继承,因此只需定义将由 ACL 条目进一步修改的权限即可。CKFinder 中的默认设置允许所有人执行所有操作

$config['accessControl'][] = array(
'role' => '*',
'resourceType' => '*',
'folder' => '/',
'FOLDER_VIEW' => true,
'FOLDER_CREATE' => true,
'FOLDER_RENAME' => true,
'FOLDER_DELETE' => true,
'FILE_VIEW' => true,
'FILE_CREATE' => true,
'FILE_RENAME' => true,
'FILE_DELETE' => true,
'IMAGE_RESIZE' => true,
'IMAGE_RESIZE_CUSTOM' => true
);

这意味着,要禁止除查看以外的任何文件夹操作,您可以设置

$config['accessControl'][] = array(
'role' => '*',
'resourceType' => '*',
'folder' => '/',
'FOLDER_CREATE' => false,
'FOLDER_RENAME' => false,
'FOLDER_DELETE' => false,
);

无需重复所有设置为 true 的条目。

authentication

用于确定用户是否应该访问 CKFinder 的函数。它也可以是任何类型的 PHP 可调用对象。

示例 1

在没有任何其他检查的情况下启用 CKFinder

$config['authentication'] = function() {
return true;
};

警告: 不要简单地返回 true。这样做会允许“任何人”上传和列出您服务器上的文件。您应该实现某种会话验证机制,以确保只有受信任的用户才能上传或删除您的文件。

示例 2

假设 $_SESSION['IsAuthorized'] 在用户登录系统后立即设置为 true。您可以检查此会话变量,而不是总是返回 true

session_start();
$config['authentication'] = function() {
return isset($_SESSION['IsAuthorized']) && $_SESSION['IsAuthorized'];
};

示例 3

任何类型的 PHP 可调用函数都可以设置为 authentication,因此可以传递函数名而不是显式定义函数

假设您在应用程序中的某个文件中定义了以下函数,该文件名为 foo.php

function isAuthenticated() {
return true;
}

config.php

require_once '/path/to/foo.php';
$config['authentication'] = 'isAuthenticated';

示例 4

您还可以传递包含方法的数组,而不是显式定义函数。

假设您在应用程序中的某个文件中定义了以下函数,该文件名为 foo.php

<?php
namespace MyProject;
class User {
private $authenticated = false;
function login() {
$this->authenticated = true;
}
function logout() {
$this->authenticated = false;
}
public function isLoggedIn() {
return $this->authenticated;
}
}
$user = new User();
$user->login();

config.php

require_once '/path/to/foo.php';
$config['authentication'] = array($user, 'isLoggedIn');

后端

后端用于 资源类型定义 中,作为文件应存储位置的存储定义。虽然后端和资源类型密切相关,但它们被分别定义以简化配置,例如,使用相同的 FTP 帐户来定义四种不同的资源类型,它们之间的唯一区别是 FTP 服务器上的子文件夹的名称。

示例

一个连接到定义为 my_ftp 的后端和两种资源类型的示例

$config['backends'][] = array(
'name' => 'my_ftp',
'adapter' => 'ftp',
'host' => 'ftp.example.com',
'username' => 'username',
'password' => 'password'
);
$config['resourceTypes'] = array(
array(
'name' => 'Files',
'directory' => 'files', // = ftp_root_folder/files
'maxSize' => 0,
'allowedExtensions' => 'pdf,doc,zip',
'backend' => 'my_ftp',
'lazyLoad' => true
),
array(
'name' => 'Images',
'directory' => 'images', // = ftp_root_folder/images
'maxSize' => 0,
'allowedExtensions' => 'gif,jpeg,jpg,png',
'backend' => 'my_ftp',
'lazyLoad' => true
)
);

通用配置选项

以下列出的选项集可用于任何后端类型。

选项名称类型描述
name 字符串后端的唯一名称。
adapter 字符串此后端使用的适配器类型 - local 用于本地文件系统。
baseUrl
可选
字符串用于直接访问 CKFinder 文件的基 URL。此 URL 必须对应于存储 CKFinder 用户文件的目录。
useProxyCommand
可选 3.1.0
布尔值是否应将存储在此后端的链接指向 代理 命令。

useProxyCommand

CKFinder 3.1.0

useProxyCommand 选项允许您服务 CKFinder 中存储的任何文件。创建指向网页文件的链接在某些情况下可能很困难,甚至不可能(例如,当文件存储在私有 FTP 服务器上,或文件不在 Web 服务器根文件夹中时)。为后端启用此选项会告诉 CKFinder 使用 代理 命令创建指向文件的链接。

以这种方式服务文件具有以下优点

  • 文件无需通过直接链接公开访问。您无需更改存储配置即可使文件可供匿名用户访问。
  • 更好地控制对文件的访问。您可以使用 CKFinder ACL 选项来定义对文件的更严格的访问权限(请参阅 accessControl 配置选项)。
  • 更轻松地控制客户端缓存规则。使用 cache 配置选项,您可以定义由 Proxy 命令服务的文件在浏览器中缓存的时间长度。

这种方法的缺点是所有指向文件的链接都将依赖于 CKFinder 连接器,因此如果您决定有一天删除 CKFinder,这些链接将无法正常工作。

支持的后端

CKFinder 连接器使用 文件系统抽象层,它允许透明地使用许多不同的文件系统。您可以在下面找到支持的后端的列表及其配置选项。

本地文件系统

这是 CKFinder 中的默认后端,它指向服务器本地文件系统中的文件夹。

配置选项

选项名称类型描述
name 字符串后端的唯一名称。
adapter 字符串此后端使用的适配器类型 - local 用于本地文件系统。
baseUrl
可选
字符串用于直接访问 CKFinder 文件的基 URL - 此 URL 必须对应于存储 CKFinder 用户文件的目录。
root 字符串包含 CKFinder 用户文件的目录的文件系统路径。该目录必须存在于服务器上。
chmodFiles 整数在 CKFinder 中创建的文件(例如上传、复制、移动文件)的权限。使用八进制值。
chmodFolders 整数在 CKFinder 中创建的文件夹的权限。使用八进制值。
filesystemEncoding 字符串本地文件系统中文件和文件夹名称的编码。
useProxyCommand
可选 3.1.0
布尔值是否应将存储在此后端的链接指向 代理 命令。
followSymlinks
可选 3.4.3
布尔值启用对 UNIX 符号链接的支持。如果启用此选项,后端上的符号链接将被视为普通文件或文件夹。
重要:如果您启用此选项,请确保为符号链接指向的文件或目录设置了正确的文件系统权限。多个 Web 服务器的默认配置不允许访问定义的 document root 之外的文件。

示例

$config['backends'][] = array(
'name' => 'default',
'adapter' => 'local',
'baseUrl' => 'http://domain.com/ckfinder/userfiles/',
'root' => '/var/www/ckfinder/userfiles/',
'chmodFiles' => 0755,
'chmodFolders' => 0755,
'filesystemEncoding' => 'UTF-8',
'followSymlinks' => true
);

Dropbox

此后端允许您将 Dropbox 帐户中的任何文件夹附加到 CKFinder。

配置选项

选项名称类型描述
name 字符串后端的唯一名称。
adapter 字符串此后端使用的适配器类型 - dropbox 用于 Dropbox。
username 字符串Dropbox 帐户用户名。
appKey 字符串Dropbox 应用程序 app key
appSecret 字符串Dropbox 应用程序 app secret
accessCode 字符串Dropbox 应用程序访问代码。
baseUrl
可选
字符串用于直接访问 Dropbox 上的 CKFinder 文件的基 URL(如果您使用公共文件夹,则可以找到所有公共文件的通用前缀)。
root
可选
字符串包含 CKFinder 用户文件的目录路径。该目录必须存在于服务器上。
useProxyCommand
可选 3.1.0
布尔值是否应将存储在此后端的链接指向 代理 命令。

示例

$config['backends'][] = array(
'name' => 'my_dropbox_files',
'adapter' => 'dropbox',
'username' => 'your.email@gmail.com',
'appKey' => 'd9cjs6x7zns8d9f',
'appSecret' => 'z0x8sjdks7a8djf',
'accessCode' => 's7djvcys9cidys7uvkdos9a7shdnxps9d7ehsnxkaq8',
'root' => '/my/ckfinder/files'
);

要将 CKFinder 与 Dropbox 一起使用,您需要一个应用程序访问代码、app key 和 app secret。

首先,访问 Dropbox 应用程序控制台 并创建一个新的应用程序。

创建 Dropbox 应用程序,设置权限,获取 app 和 secret key

请注意,在创建应用程序时,您可以定义要通过此应用程序访问的文件夹或整个 Dropbox 帐户。选择在 CKFinder 中使用 Dropbox 所需的所有权限非常重要 - 您可以在下面找到所需权限的完整列表。

创建应用程序后,可以在应用程序页面上的“设置”选项卡中找到 app keyapp secret。您也可以在那里生成访问令牌,但它是可过期的,持续时间为 4 小时,可以供开发人员快速测试 Dropbox 应用程序 (您不需要为了使 ckfinder 工作而生成它)。CKFinder 会自动刷新访问令牌,借助您将在下一步生成的 appKeyappSecretaccessCode

Dropbox 应用程序的最低权限

CKFinder 为了工作需要以下权限

✓ files.metadata.write - 查看和编辑 Dropbox 文件和文件夹的信息,

✓ files.metadata.read - 查看 Dropbox 文件和文件夹的信息,

✓ files.content.write - 编辑 Dropbox 文件和文件夹的内容

✓ files.content.read - 查看 Dropbox 文件和文件夹的内容

✓ sharing.write - 查看和管理您的 Dropbox 共享设置和协作者

✓ sharing.read - 查看您的 Dropbox 共享设置和协作者

如果您更改权限,请记住清除缓存并为新的设置生成新的访问令牌才能生效。

如何生成访问代码?

请记住,在生成访问代码之前设置权限!请阅读有关所需权限集的信息。

要接收 Dropbox 访问代码,您需要使用以下链接,并将 APPKEYHERE 部分替换为您 Dropbox 应用程序的 app key

https://www.dropbox.com/oauth2/authorize?client_id=APPKEYHERE&response_type=code&token_access_type=offline

确认关于信任开发人员应用程序的警告并允许应用程序管理您的数据。将访问代码复制到配置中的 Dropbox 后端的 accessCode 选项。

访问代码有什么用?

访问代码是在 Dropbox OAuth API 中进行正确身份验证所必需的。作为响应,我们将获得访问令牌、访问令牌的过期时间和刷新令牌。CKFinder Dropbox 适配器需要访问令牌才能工作,刷新令牌需要在旧令牌过期后生成新的访问令牌。这些令牌保存在 CKFinder 应用程序的缓存中。如果您清除缓存,刷新令牌将丢失,CKFinder 将尝试生成一个新的令牌。不幸的是,访问代码是一次性的,因此您需要生成一个新的访问代码,否则会出现无效配置异常。

注意旧版 Dropbox 应用程序以及旧版生成的访问令牌。

以旧方式生成的访问令牌(现在不可能)仍然有效,因为它们仍然是不可过期的。2022 年 10 月 14 日的信息。

Amazon S3

此后端允许您将 Amazon S3 存储附加到 CKFinder。

配置选项

选项名称类型描述
name 字符串后端的唯一名称。
adapter 字符串此后端使用的适配器类型 - s3 用于 Amazon S3。
bucket 字符串存储桶名称。
区域 字符串区域标识符。有关区域及其端点的列表,请参阅 https://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region
密钥 字符串访问密钥。
秘密 字符串秘密值。
签名
可选
字符串区域的签名版本(默认设置为 v4)。有关区域和支持的签名版本的列表,请参阅 https://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region
可见性
可选
字符串存储文件的可见性。默认值为 private,这意味着上传到 S3 的文件将无法直接访问(使用文件 URL)。要启用直接访问,请将此值设置为 public
baseUrl
可选
字符串用于直接访问 Amazon S3 上的 CKFinder 文件的基 URL(如果文件公开可见,您可以找到它们的通用前缀,例如 https://s3-eu-west-1.amazonaws.com/bucket)。
root
可选
字符串包含 CKFinder 用户文件的目录路径。该目录必须存在于服务器上。
useProxyCommand
可选 3.1.0
布尔值是否应将存储在此后端的链接指向 代理 命令。

示例

$config['backends'][] = array(
'name' => 'awss3',
'adapter' => 's3',
'bucket' => 'ckftest',
'region' => 'eu-west-1',
'key' => 'AYUZ7A78ZHAAZ8AL4A',
'secret' => 'ab89Va7dgDFtGrASOMA58787z7dgDFtGrASOMA58odg',
'visibility' => 'public',
'baseUrl' => 'http://s3-eu-west-1.amazonaws.com/bucket/s3_ckf_files/',
'root' => 's3_ckf_files'
);

要创建 AWS 访问密钥,请参阅 Amazon Web Services 文档

注意:请遵循 IAM 最佳实践,不要使用您的 AWS 根访问密钥。

FTP

此后端允许您将您的 FTP 服务器帐户连接到 CKFinder。

配置选项

选项名称类型描述
name 字符串后端的唯一名称。
adapter 字符串此后端使用的适配器类型 - ftp 用于 FTP。
主机 字符串服务器主机名。
username 字符串FTP 用户名。
密码 字符串FTP 用户密码。
baseUrl
可选
字符串用于直接访问 FTP 服务器上 CKFinder 文件的基 URL。
root
可选
字符串包含 CKFinder 用户文件的目录路径。该目录必须存在于服务器上。
useProxyCommand
可选 3.1.0
布尔值存储在此后端上的文件的链接是否应指向 代理 命令。
端口
可选
整数FTP 服务器端口(默认设置为 21)。
ssl
可选
布尔值确定是否应使用安全 SSL-FTP 连接的标志(默认设置为 false)。
超时
可选
整数确定是否应使用安全 SSL-FTP 连接的标志(默认设置为 90)。
utf8
可选
布尔值确定是否应使用安全 SSL-FTP 连接的标志(默认设置为 false)。
被动
可选
布尔值打开或关闭被动模式(默认设置为 true
传输模式
可选
整数确定使用 FTP 传输文件的模式的标志(默认设置为 FTP_BINARY = 2
系统类型
可选
布尔值确定 FTP 系统类型的标志(默认设置为 null。可以设置为 windowsunix
忽略被动地址
可选
布尔值确定是否忽略被动地址的标志(默认设置为 null。可以设置为 truefalse
Unix 列表中启用时间戳
可选
布尔值确定是否在 Unix 列表中打开时间戳的标志(默认设置为 false
手动递归
可选
布尔值确定是否递归列出目录的标志(默认设置为 true

示例

$config['backends'] = array(
'name' => 'my_ftp', // 必需
'adapter' => 'ftp', // 必需
'host' => 'ftp.example.com', // 必需
'username' => 'username', // 必需
'password' => 'password' // 必需
);

Azure

CKFinder 3.3.0

此后端允许您将 Azure 存储附加到 CKFinder。

配置选项

选项名称类型描述
name 字符串后端的唯一名称。
adapter 字符串此后端使用的适配器类型 - azure 用于 Azure 存储。
帐户 字符串帐户名称。
密钥 字符串访问密钥。
baseUrl
可选
字符串用于直接访问 Azure 上 CKFinder 文件的基 URL。
root
可选
字符串包含 CKFinder 用户文件的目录路径。该目录必须存在于服务器上。
useProxyCommand
可选
布尔值是否应将存储在此后端的链接指向 代理 命令。

示例

$config['backends'][] = array(
'name' => 'azure-backend',
'adapter' => 'azure',
'account' => 'account-name',
'key' => 'ab89Va7dgDFtGrASOMA58787z7dgDFtGrASOMA58odg==',
'container' => 'container-name',
'baseUrl' => 'https://account-name.blob.core.windows.net/container-name/root-dir/',
'root' => 'root-dir'
);

有关创建和管理存储帐户密钥的信息,请参阅 Microsoft Azure 文档

Rackspace

将在 CKFinder 的未来版本中提供。

SFTP

将在 CKFinder 的未来版本中提供。

WebDAV

将在 CKFinder 的未来版本中提供。

GridFS

将在 CKFinder 的未来版本中提供。

缓存

CKFinder 3.1.0

配置各种 CKFinder 组件的缓存生存期

  • thumbnails - 缩略图图像的缓存生存期。
  • imagePreview - 由 ImagePreview 命令返回的图像的缓存生存期。
  • proxyCommand - 由 代理 命令提供的文件的缓存生存期。

生存期定义为表示秒数的整数。如果提供的值不是大于 0 的正数,则组件的缓存将被禁用。

示例

$config['cache'] = array(
'imagePreview' => 0, // 禁用 ImagePreview 的缓存。
'thumbnails' => 24 * 3600 // 将缩略图缓存 24 小时。
'proxyCommand' => 3600 // 将代理命令提供的文件缓存一小时。
);

checkDoubleExtension

是否允许带有双文件扩展名的文件。由于 Apache 模块的安全问题,建议保持 checkDoubleExtension 启用状态。

工作原理?

假设以下场景

  • 如果 php 不在允许的扩展名列表中,则无法上传名为 foo.php 的文件。
  • 如果 rar(或任何其他)扩展名添加到允许的扩展名列表中,则可以上传名为 foo.rar 的文件。
  • 文件 foo.php.rar 具有 rar 扩展名,因此理论上也可以上传。

在某些情况下,Apache 可以像对待任何其他 PHP 脚本一样对待 foo.php.rar 文件并执行它。

如果 checkDoubleExtension 启用,则会检查点 (.) 后文件名中的每个部分,而不仅仅是最后部分。如果扩展名被禁止,则点 (.) 将被替换为下划线 (_)。在这种情况下,上传的 foo.php.rar 文件将被重命名为 foo_php.rar

示例

$config['checkDoubleExtension'] = true;

checkSizeAfterScaling

指示上传图像的文件大小必须仅在缩小(如果需要)后根据资源类型配置中定义的 maxSize 设置进行检查。否则,会在上传后立即检查大小。

示例

$config['checkSizeAfterScaling'] = true;

调试

打开/关闭调试模式。参见 调试和日志记录

示例

$config['debug'] = true;

debugLoggers

指定调试处理程序。可以提供多个处理程序。参见 调试和日志记录

选项名称描述
ckfinder_log 在位于私有 CKFinder 文件夹中的日志文件中报告错误(/ckfinder/userfiles/.ckfinder/logs/error.log)。
error_log 在服务器日志中报告错误(Apache 中的 error_log)。
firephp 如果 Firefox 中安装了 FirePHP 或 Google Chrome 中安装了 FirePHP4Chrome,则直接在 Firebug 控制台中报告错误。

示例

$config['debugLoggers'] = array('ckfinder_log', 'error_log', 'firephp');

defaultResourceTypes

应加载的 资源类型名称 的逗号分隔列表。如果留空,则加载所有资源类型。

示例

$config['defaultResourceTypes'] = 'Files,Images';

disallowUnsafeCharacters

禁止创建名称包含在 IIS Web 服务器上不安全的字符的文件夹和上传文件。提高 IIS Web 服务器上的安全性。

示例

$config['disallowUnsafeCharacters'] = true;

csrfProtection

CKFinder 3.2.0

在连接器中启用 CSRF 保护。默认的 CSRF 保护机制基于 双提交 cookie

示例

$config['csrfProtection'] = true;

forceAscii

强制文件和文件夹的 ASCII 名称。如果启用,带有变音符号的字符,例如 åäöćčđš 将自动转换为 ASCII 字母。

示例

$config['forceAscii'] = false;

标头

应添加到每个连接器响应中的标头。

示例

定义 CORS 标头。

$config['headers'] => array(
'Access-Control-Allow-Origin' => '*',
'Access-Control-Allow-Credentials' => 'true'
);

hideFiles

无论其位置,都不应在 CKFinder 中显示的文件。不接受路径,仅接受文件名,包括扩展名。*(星号)和 ?(问号)通配符被接受。

示例

隐藏以点字符开头的文件。

$config['hideFiles'] = array('.*');

hideFolders

无论其位置如何,都不应在 CKFinder 中显示的文件夹。

示例

隐藏所有以点字符开头的文件夹以及另外两个文件夹:CVS__thumbs

$config['hideFolders'] = array('.*', 'CVS', '__thumbs');

htmlExtensions

可能允许在数据的前 1 kB 中包含 HTML 代码的文件类型。

有时在上传文件时,可能会发生文件在前几千字节的数据中包含 HTML 代码。仅当文件扩展名在 htmlExtensions 中指定时,CKFinder 才会上传包含 HTML 代码的文件。

示例 1

$config['htmlExtensions'] = array('html', 'htm', 'xml', 'js');

示例 2

为了上传文件开头包含 HTML 代码的 .xsl 文件,请将 xsl 扩展名添加到列表中。

$config['htmlExtensions'] = array('html', 'htm', 'xml', 'js', 'xsl');

请注意,此功能仅执行一组非常基本的检查以检测文件中前 1 kB 内容中的类似 HTML 的数据,以保护用户免受例如无意中上传包含 HTML 内容且扩展名错误的文件。

注意:包含类似 HTML 的数据的恶意文件可能使用各种 UTF 编码。要验证所有可能的编码,请确保在您的服务器上启用了 mbstring PHP 扩展。

图像

CKFinder 的图像配置。

配置选项

选项名称类型描述
maxWidth 整数上传图像的最大宽度。如果图像大小大于指定的大小,则图像将调整为定义的尺寸。
maxHeight 整数上传图像的最大高度。如果图像大小大于指定的大小,则图像将调整为定义的尺寸。
质量 整数创建图像的质量,范围为 1 到 100。质量值越小,调整大小的图像尺寸越小。请注意,可接受的质量值为大约 80-90。
大小
可选
数组可以从 CKFinder 中轻松选择并传递到外部应用程序(例如 CKEditor)的图像的预定义大小,而无需手动调整图像大小。关联数组的键被翻译并用作“选择缩略图”上下文菜单中的条目。特定条目的翻译标签取自语言文件,例如 small 将被翻译为 lang.image['small']。如果当前语言未设置翻译键,则使用英文版本。如果未找到英文版本,则使用未翻译的字符串(将第一个字母设置为大写)。
阈值
可选
数组CKFinder 在应用程序的不同部分显示图像预览时使用的低级内部配置选项。如果 CKFinder 的缓存中已经存在已调整大小的图像版本,并且该图像的大小与请求的大小几乎相同(在定义的阈值内),CKFinder 将使用该图像。此选项通过以下方式提高性能:(i)避免具有几乎相同大小的图像的过多副本;(ii)避免在每次预览时缩放图像。

示例

$config['images'] = array(
'maxWidth' => 1600,
'maxHeight' => 1200,
'quality' => 80,
'sizes' => array(
'small' => array('width' => 480, 'height' => 320, 'quality' => 80),
'medium' => array('width' => 600, 'height' => 480, 'quality' => 80),
'large' => array('width' => 800, 'height' => 600, 'quality' => 80)
),
'threshold' => array('pixels'=> 80, 'percent' => 10)
);

licenseKey

CKFinder 许可证密钥。如果无效,CKFinder 将以演示模式运行。

示例 1

$config['licenseKey'] = 'ABCD-EFGH-IJKL-MNOP-QRST-UVWX-YZ12';

licenseName

CKFinder 许可证名称。如果无效,CKFinder 将以演示模式运行。

示例 1

$config['licenseName'] = 'example.com';

overwriteOnUpload

更改 CKFinder 上传与文件夹中已存在的文件同名文件时的默认行为。如果启用,则现有文件将被覆盖,而不是自动重命名文件。

$config['overwriteOnUpload'] = true;

plugins

此选项包含将在 CKFinder 连接器中启用的插件列表。

下面给出的配置示例假设您已安装 文档示例插件。此包包含三个名为 DiskQuotaGetFileInfoUserActionsLogger 的插件。

要启用的插件可以通过两种方式定义

使用插件名称

$config['plugins'] = array('DiskQuota', 'GetFileInfo', 'UserActionsLogger');

使用数组表示法,明确设置插件文件的路径,例如下面 CustomPlugin 插件

$config['plugins'] = array(
'DiskQuota',
array(
'name' => 'CustomPlugin',
'path' => '/my/path/to/CustomPlugin.php'
)
);

注意: 插件通常提供一些可以在 CKFinder 主要配置文件中设置的配置选项。有关详细信息,请查看特定插件的文档。

pluginsDirectory

此选项定义插件目录的路径。

连接器查找插件的默认目录路径是 plugins 目录,它位于 config.php 文件所在的目录中。

有关插件和插件目录结构的更多信息,请参阅 插件 文章。

示例 1

$config['pluginsDirectory'] = __DIR__ . '/custom/path/to/plugins';

注意: 最安全且最推荐的选项是将插件目录提供为绝对路径。

privateDir

内部目录配置。

重要: CKFinder 需要经常访问这些目录,因此建议将此文件夹保留在本地文件系统上。

选项名称类型描述
backend 字符串 | 数组私有目录应位于其中的后端。
cache 字符串 | 数组用于缓存文件的内部文件夹。
logs 字符串 | 数组用于日志的内部文件夹(请注意,将日志记录到文件仅在日志文件存储在本地文件系统后端时有效)。
tags 字符串 | 数组用于存储文件标签(元数据)(用于将来的版本)的内部文件夹。
thumbs 字符串 | 数组用于内部缩略图(图像预览)的文件夹。默认情况下,它位于 cache 文件夹中。

示例 1

将私有目录位置设置为 default 后端内的 .ckfinder 文件夹。

$config['privateDir'] = array(
'backend' => 'default',
'tags' => '.ckfinder/tags',
'logs' => '.ckfinder/logs',
'cache' => '.ckfinder/cache',
'thumbs' => '.ckfinder/cache/thumbs',
'temp' => '/custom/path/for/temp'
),

示例 2

将私有目录位置设置为 default 后端内的 .ckfinder 文件夹。logs 位置配置为使用不同的后端(logs_backend)和日志文件夹。

$config['privateDir'] = array(
'backend' => 'default',
'tags' => '.ckfinder/tags',
'logs' => array (
'backend' => 'logs_backend',
'path' => '/my/ckfinder/logs'
),
'cache' => '.ckfinder/cache',
'thumbs' => '.ckfinder/cache/thumbs',
),

resourceTypes

资源类型只不过是在不同路径下对文件进行分组的一种方式,每个路径都有不同的配置设置。资源类型在 CKFinder 中表示为“根文件夹”。每个资源类型可以使用不同的 后端

默认情况下,CKFinder 配置文件预先配置了两种示例资源类型:FilesImages。配置的资源类型数量没有限制。您可以更改或删除默认类型,但请确保至少配置一种资源类型。

选项名称类型描述
name 字符串资源类型的机器友好名称,它将用于 CKFinder UI 和服务器连接器之间的通信。
label 字符串资源类型的人类友好名称,它将在 CKFinder UI 中用作“根文件夹”名称。
backend 字符串指向该资源类型应该指向的 后端 的名称。
directory
可选
字符串资源类型应该指向的确切后端子文件夹的路径。
maxSize
可选
字符串以字节为单位定义的上传图像的最大大小。还支持简写符号:G、M、K(不区分大小写)。1M 等于 1048576 字节(1 兆字节),1K 等于 1024 字节(1 千字节),1G 等于 1 千兆字节。
allowedExtensions 字符串您希望允许使用 CKFinder 上传的文件扩展名。NO_EXT 值可用于没有扩展名的文件。
deniedExtensions
可选
字符串您不希望使用 CKFinder 上传的文件扩展名。仅当 allowedExtensions 保持为空时才应设置此选项。NO_EXT 值可用于没有扩展名的文件。
lazyLoad
可选
布尔值如果设置为 true,则 Init 命令不会检查资源类型是否包含子文件夹。此选项对于远程后端特别有用,因为 Init 命令将更快执行,因此 CKFinder 的启动速度也将更快。建议将其设置为 true 用于远程后端。

重要: 建议始终使用 allowedExtensions 设置,而不是 deniedExtensions。如果您将 allowedExtensions 保持为空并在 deniedExtensions 列表中添加扩展名(例如 pdf),则设置将允许上传除具有 pdf 扩展名的文件(例如 .php.exe 文件)之外的所有其他文件。

示例 1

一个简单的资源类型定义,其中 label 设置为 Files 的法语等效项。name(机器名称)设置为 Files,可以在诸如 defaultResourceTypes 之类的示例中使用,或在 将 CKFinder 与 CKEditor 集成 时使用。

$config['resourceTypes'][] = array(
'name' => 'Files',
'label' => 'Fichiers',
'backend' => 'default',
'directory' => '/files/',
'maxSize' => '8M',
'allowedExtensions' => 'doc,gif,jpg,pdf,png,zip,NO_EXT'
);

示例 2

此简单示例显示了如何动态地本地化资源类型的标签。根据发送到服务器连接器的每个 Ajax 请求中传递的 lang 属性的值来设置资源类型标签。

function getLabel() {
$lang = 'en';
$labels = array(
'en' => 'Files',
'fr' => 'Fichiers',
'pl' => 'Pliki'
);
if (!empty($_GET['lang']) && !empty($lang[$_GET['lang']])) {
$lang = $_GET['lang'];
}
return $labels[$lang];
}
$config['resourceTypes'][] = array(
'name' => 'Files',
'label' => getLabel(),
'backend' => 'default',
'directory' => '/files/',
'maxSize' => '8M',
'allowedExtensions' => 'doc,gif,jpg,pdf,png,zip,NO_EXT'
);

roleSessionVar

CKFinder 必须用来检索当前用户的角色的会话变量名称。

示例 1

config.php 中设置 roleSessionVar

$config['roleSessionVar'] = 'CKFinder_UserRole';

您可以使用 $_SESSION 在您的应用程序中设置 CKFinder 用户角色,例如,当用户登录时

session_start();
$_SESSION['CKFinder_UserRole'] = 'administrator';

示例 2

role 可用于设置 ACL 设置

为所有用户设置只读权限,但允许具有 administrator 角色的用户完全访问权限

$config['accessControl'][] = Array(
'role' => '*',
'resourceType' => '*',
'folder' => '/',
'FOLDER_VIEW' => true,
'FOLDER_CREATE' => false,
'FOLDER_RENAME' => false,
'FOLDER_DELETE' => false,
'FILE_VIEW' => true,
'FILE_CREATE' => false,
'FILE_RENAME' => false,
'FILE_DELETE' => false,
'IMAGE_RESIZE' => false,
'IMAGE_RESIZE_CUSTOM' => false
);
$config['accessControl'][] = Array(
'role' => 'administrator',
'resourceType' => '*',
'folder' => '/',
'FOLDER_VIEW' => true,
'FOLDER_CREATE' => true,
'FOLDER_RENAME' => true,
'FOLDER_DELETE' => true,
'FILE_VIEW' => true,
'FILE_CREATE' => true,
'FILE_RENAME' => true,
'FILE_DELETE' => true,
'IMAGE_RESIZE' => true,
'IMAGE_RESIZE_CUSTOM' => true
);

secureImageUploads

是否在上传图像文件时执行其他检查。

有时,用户可能会尝试上传不是图像文件但看起来像是图像文件的 文件。示例:您有一个名为 document.jpeg 的文本文件,您尝试上传它。您可以通过以下方式将其设置为 true 来启用图像检查功能

$config['secureImageUploads'] = true;

使用此配置设置,程序将检查文件的尺寸。如果它们等于零,则该文件被视为无效,并且 CKFinder 将拒绝它。

sessionWriteClose

CKFinder 3.1.0

如果设置为 true,则会话的写访问权限将在尽可能快的时间内关闭,以避免性能问题(请参阅 避免与 PHP 会话相关的性能问题)。

$config['sessionWriteClose'] = true;

tempDirectory

CKFinder 3.1.0

绝对路径,指向 Web 服务器上用于 CKFinder 的临时文件的可写目录。默认情况下,它指向由 sys_get_temp_dir() 返回的 sys_temp_dir

注意: 在某些 IIS 服务器上,系统临时目录可能无法从 PHP 级别访问。使用此选项,您可以配置 CKFinder 使用任何其他可写目录来存储临时文件。

$config['tempDirectory'] = __DIR__ . '/userfiles/.ckfinder/temp';

thumbnails

内部缩略图配置。

注意: 更改最小值和最大值将导致 CKFinder 中的滑块范围不同。

配置选项

选项名称类型描述
bmpSupported 布尔值是否为 .bmp 文件显示缩略图。
enabled 布尔值CKFinder 是否应该为图像文件显示真实的缩略图。
大小 数组CKFinder 允许创建的内部缩略图的预定义大小。由于 CKFinder 允许使用滑块在应用程序中更改缩略图的大小,因此默认情况下使用了一些预定义集,以便在用户不需要大图像时使用小型且最高效的大小(150px),当用户更喜欢大图像时使用 500px。

示例

$config['thumbnails'] = array(
'enabled' => true,
'sizes' => array(
array('width' => '150', 'height' => '150', 'quality' => 80),
array('width' => '300', 'height' => '300', 'quality' => 80),
array('width' => '500', 'height' => '500', 'quality' => 80),
),
'bmpSupported' => true,
);

xSendfile

是否使用 X-Sendfile 模块发送文件。Mod X-Sendfile(或类似模块)可用于 Apache2、Nginx、Cherokee、Lighttpd。

警告: 启用 xSendfile 选项可能会导致安全问题

  • 服务器上文件的路径可能会使用 X-Sendfile 标头发送到浏览器。
  • 如果服务器配置不正确,文件将以 0 长度发送。

示例

$config['xSendfile'] = false;