├── .github └── FUNDING.yml ├── scripts ├── DocGen │ ├── bn.yml │ ├── hi.yml │ ├── ja.yml │ ├── ko.yml │ ├── ta.yml │ ├── de.yml │ ├── en.yml │ ├── es.yml │ ├── id.yml │ ├── it.yml │ ├── lv.yml │ ├── nl.yml │ ├── no.yml │ ├── pl.yml │ ├── pt.yml │ ├── ru.yml │ ├── sv.yml │ ├── th.yml │ ├── tr.yml │ ├── vi.yml │ ├── zh-Hans.yml │ ├── zh-Hant.yml │ ├── fr.yml │ ├── ur.yml │ ├── ar.yml │ └── fa.yml └── DocGen.php ├── .gitattributes ├── readme.md ├── readme.zh-Hans.md └── readme.zh-Hant.md /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | liberapay: Maikuolan 2 | ko_fi: maikuolan 3 | custom: https://paypal.me/maikuolan 4 | -------------------------------------------------------------------------------- /scripts/DocGen/bn.yml: -------------------------------------------------------------------------------- 1 | category: "\#\#\#\# "%s" (বিভাগ)\n%s" 2 | directive: "\#\#\#\#\# "%s" `[%s]`\n- %s" 3 | menu_close: "" 4 | menu_item: "- [%s](%s)" 5 | menu_open: "%s" 6 | -------------------------------------------------------------------------------- /scripts/DocGen/hi.yml: -------------------------------------------------------------------------------- 1 | category: "\#\#\#\# "%s" (वर्ग)\n%s" 2 | directive: "\#\#\#\#\# "%s" `[%s]`\n- %s" 3 | menu_close: "" 4 | menu_item: "- [%s](%s)" 5 | menu_open: "%s" 6 | -------------------------------------------------------------------------------- /scripts/DocGen/ja.yml: -------------------------------------------------------------------------------- 1 | category: "\#\#\#\# "%s" (カテゴリ)\n%s" 2 | directive: "\#\#\#\#\# "%s" `[%s]`\n- %s" 3 | menu_close: "" 4 | menu_item: "- [%s](%s)" 5 | menu_open: "%s" 6 | -------------------------------------------------------------------------------- /scripts/DocGen/ko.yml: -------------------------------------------------------------------------------- 1 | category: "\#\#\#\# "%s" (카테고리)\n%s" 2 | directive: "\#\#\#\#\# "%s" `[%s]`\n- %s" 3 | menu_close: "" 4 | menu_item: "- [%s](%s)" 5 | menu_open: "%s" 6 | -------------------------------------------------------------------------------- /scripts/DocGen/ta.yml: -------------------------------------------------------------------------------- 1 | category: "\#\#\#\# "%s" (வகை)\n%s" 2 | directive: "\#\#\#\#\# "%s" `[%s]`\n- %s" 3 | menu_close: "" 4 | menu_item: "- [%s](%s)" 5 | menu_open: "%s" 6 | -------------------------------------------------------------------------------- /scripts/DocGen/de.yml: -------------------------------------------------------------------------------- 1 | category: "\#\#\#\# „%s“ (Kategorie)\n%s" 2 | directive: "\#\#\#\#\# „%s“ `[%s]`\n- %s" 3 | menu_close: "" 4 | menu_item: "- [%s](%s)" 5 | menu_open: "%s" 6 | -------------------------------------------------------------------------------- /scripts/DocGen/en.yml: -------------------------------------------------------------------------------- 1 | category: "\#\#\#\# "%s" (Category)\n%s" 2 | directive: "\#\#\#\#\# "%s" `[%s]`\n- %s" 3 | menu_close: "" 4 | menu_item: "- [%s](%s)" 5 | menu_open: "%s" 6 | -------------------------------------------------------------------------------- /scripts/DocGen/es.yml: -------------------------------------------------------------------------------- 1 | category: "\#\#\#\# "%s" (Categoría)\n%s" 2 | directive: "\#\#\#\#\# "%s" `[%s]`\n- %s" 3 | menu_close: "" 4 | menu_item: "- [%s](%s)" 5 | menu_open: "%s" 6 | -------------------------------------------------------------------------------- /scripts/DocGen/id.yml: -------------------------------------------------------------------------------- 1 | category: "\#\#\#\# "%s" (Kategori)\n%s" 2 | directive: "\#\#\#\#\# "%s" `[%s]`\n- %s" 3 | menu_close: "" 4 | menu_item: "- [%s](%s)" 5 | menu_open: "%s" 6 | -------------------------------------------------------------------------------- /scripts/DocGen/it.yml: -------------------------------------------------------------------------------- 1 | category: "\#\#\#\# "%s" (Categoria)\n%s" 2 | directive: "\#\#\#\#\# "%s" `[%s]`\n- %s" 3 | menu_close: "" 4 | menu_item: "- [%s](%s)" 5 | menu_open: "%s" 6 | -------------------------------------------------------------------------------- /scripts/DocGen/lv.yml: -------------------------------------------------------------------------------- 1 | category: "\#\#\#\# "%s" (Kategorija)\n%s" 2 | directive: "\#\#\#\#\# "%s" `[%s]`\n- %s" 3 | menu_close: "" 4 | menu_item: "- [%s](%s)" 5 | menu_open: "%s" 6 | -------------------------------------------------------------------------------- /scripts/DocGen/nl.yml: -------------------------------------------------------------------------------- 1 | category: "\#\#\#\# "%s" (Categorie)\n%s" 2 | directive: "\#\#\#\#\# "%s" `[%s]`\n- %s" 3 | menu_close: "" 4 | menu_item: "- [%s](%s)" 5 | menu_open: "%s" 6 | -------------------------------------------------------------------------------- /scripts/DocGen/no.yml: -------------------------------------------------------------------------------- 1 | category: "\#\#\#\# "%s" (Kategori)\n%s" 2 | directive: "\#\#\#\#\# "%s" `[%s]`\n- %s" 3 | menu_close: "" 4 | menu_item: "- [%s](%s)" 5 | menu_open: "%s" 6 | -------------------------------------------------------------------------------- /scripts/DocGen/pl.yml: -------------------------------------------------------------------------------- 1 | category: "\#\#\#\# "%s" (Kategoria)\n%s" 2 | directive: "\#\#\#\#\# "%s" `[%s]`\n- %s" 3 | menu_close: "" 4 | menu_item: "- [%s](%s)" 5 | menu_open: "%s" 6 | -------------------------------------------------------------------------------- /scripts/DocGen/pt.yml: -------------------------------------------------------------------------------- 1 | category: "\#\#\#\# "%s" (Categoria)\n%s" 2 | directive: "\#\#\#\#\# "%s" `[%s]`\n- %s" 3 | menu_close: "" 4 | menu_item: "- [%s](%s)" 5 | menu_open: "%s" 6 | -------------------------------------------------------------------------------- /scripts/DocGen/ru.yml: -------------------------------------------------------------------------------- 1 | category: "\#\#\#\# «%s» (Категория)\n%s" 2 | directive: "\#\#\#\#\# «%s» `[%s]`\n- %s" 3 | menu_close: "" 4 | menu_item: "- [%s](%s)" 5 | menu_open: "%s" 6 | -------------------------------------------------------------------------------- /scripts/DocGen/sv.yml: -------------------------------------------------------------------------------- 1 | category: "\#\#\#\# "%s" (Kategori)\n%s" 2 | directive: "\#\#\#\#\# "%s" `[%s]`\n- %s" 3 | menu_close: "" 4 | menu_item: "- [%s](%s)" 5 | menu_open: "%s" 6 | -------------------------------------------------------------------------------- /scripts/DocGen/th.yml: -------------------------------------------------------------------------------- 1 | category: "\#\#\#\# "%s" (ประเภท)\n%s" 2 | directive: "\#\#\#\#\# "%s" `[%s]`\n- %s" 3 | menu_close: "" 4 | menu_item: "- [%s](%s)" 5 | menu_open: "%s" 6 | -------------------------------------------------------------------------------- /scripts/DocGen/tr.yml: -------------------------------------------------------------------------------- 1 | category: "\#\#\#\# "%s" (Kategori)\n%s" 2 | directive: "\#\#\#\#\# "%s" `[%s]`\n- %s" 3 | menu_close: "" 4 | menu_item: "- [%s](%s)" 5 | menu_open: "%s" 6 | -------------------------------------------------------------------------------- /scripts/DocGen/vi.yml: -------------------------------------------------------------------------------- 1 | category: "\#\#\#\# "%s" (Thể loại)\n%s" 2 | directive: "\#\#\#\#\# "%s" `[%s]`\n- %s" 3 | menu_close: "" 4 | menu_item: "- [%s](%s)" 5 | menu_open: "%s" 6 | -------------------------------------------------------------------------------- /scripts/DocGen/zh-Hans.yml: -------------------------------------------------------------------------------- 1 | category: "\#\#\#\# “%s” (类别)\n%s" 2 | directive: "\#\#\#\#\# “%s” `[%s]`\n- %s" 3 | menu_close: "" 4 | menu_item: "- [%s](%s)" 5 | menu_open: "%s" 6 | -------------------------------------------------------------------------------- /scripts/DocGen/zh-Hant.yml: -------------------------------------------------------------------------------- 1 | category: "\#\#\#\# 『%s』 (類別)\n%s" 2 | directive: "\#\#\#\#\# 『%s』 `[%s]`\n- %s" 3 | menu_close: "" 4 | menu_item: "- [%s](%s)" 5 | menu_open: "%s" 6 | -------------------------------------------------------------------------------- /scripts/DocGen/fr.yml: -------------------------------------------------------------------------------- 1 | category: "\#\#\#\# « %s » (Catégorie)\n%s" 2 | directive: "\#\#\#\#\# « %s » `[%s]`\n- %s" 3 | menu_close: "" 4 | menu_item: "- [%s](%s)" 5 | menu_open: "%s" 6 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | # Refer to: 2 | # https://help.github.com/articles/dealing-with-line-endings/ 3 | 4 | * text eol=lf 5 | 6 | # Refer to: 7 | # https://github.com/github/linguist 8 | 9 | *.md linguist-documentation 10 | -------------------------------------------------------------------------------- /scripts/DocGen/ur.yml: -------------------------------------------------------------------------------- 1 | category: "\#\#\#\#
[%s][%s][%s]', '', '', '', '', '', '', '', ''],
66 | ['`', '`', '`', '`', '`', '__', '__', '*', '*'],
67 | html_entity_decode($Out)
68 | );
69 | } else {
70 | $Out = preg_replace('~([^<]+)~i', '\1', html_entity_decode($Out));
71 | }
72 | if ($Try = $Data->getString('config.' . $Category . '_hint')) {
73 | if ($Data->Directionality !== 'rtl') {
74 | $Try = str_replace(
75 | ['', '', '', '', '', '', '', '', ''],
76 | ['`', '`', '`', '`', '`', '__', '__', '*', '*'],
77 | html_entity_decode($Try)
78 | );
79 | } else {
80 | $Try = preg_replace('~([^<]+)~i', '\1', html_entity_decode($Try));
81 | }
82 | $Out .= "\n\n" . $Try;
83 | }
84 | $Final .= sprintf($Data->getString('category'), $Category, $Out) . "\n\n";
85 | foreach ($Directives as $Directive => $Info) {
86 | $Out = $Data->getString('config.' . $Category . '_' . $Directive);
87 | if ($Data->Directionality !== 'rtl') {
88 | $Out = str_replace(
89 | ['', '', '', '', '', '', '', '', ''],
90 | ['`', '`', '`', '`', '`', '__', '__', '*', '*'],
91 | html_entity_decode($Out)
92 | );
93 | } else {
94 | $Out = preg_replace('~([^<]+)~i', '\1', html_entity_decode($Out));
95 | }
96 | if (in_array($Info['type'], ['string', 'timezone', 'checkbox', 'url', 'email', 'kb'], true)) {
97 | $Type = 'string';
98 | } elseif ($Info['type'] === 'float') {
99 | $Type = 'float';
100 | } elseif ($Info['type'] === 'bool') {
101 | $Type = 'bool';
102 | } else {
103 | $Type = 'int';
104 | }
105 | $Choices = [];
106 | if ($Info['type'] === 'timezone') {
107 | $Choices = ['SYSTEM' => $Data->getString('field.Use system default timezone'), 'UTC' => 'UTC'];
108 | $Info['allow_other'] = true;
109 | } elseif (isset($Info['choices'])) {
110 | $Choices = $Info['choices'];
111 | }
112 | $First .= ($Current === $Cats ? ' ' : '│ ') . $Directive . ' [' . $Type . "]\n";
113 | $Final .= sprintf($Data->getString('directive'), $Directive, $Type, $Out) . "\n\n";
114 | if (!empty($Choices)) {
115 | $Final .= "```\n" . $Directive;
116 | if (isset($Info['labels'])) {
117 | if (!is_array($Info['labels'])) {
118 | $Info['labels'] = [$Info['labels']];
119 | }
120 | foreach ($Info['labels'] as &$Label) {
121 | $Label = $Data->getString($Label) ?: $Label;
122 | }
123 | unset($Label);
124 | $Final .= '───[' . implode(']─[', $Info['labels']) . ']';
125 | }
126 | $Final .= "\n";
127 | $Number = count($Choices);
128 | if (!empty($Info['allow_other'])) {
129 | $Number++;
130 | }
131 | $Iterant = 1;
132 | foreach ($Choices as $Choice => $Value) {
133 | $Value = $Data->getString($Value) ?: $Value;
134 | if ($Type === 'string') {
135 | $Value = '"' . $Value . '"';
136 | } elseif ($Type === 'bool') {
137 | $Value = $Value ? 'true' : 'false';
138 | }
139 | if (strpos($Value, "\n")) {
140 | $Value = explode("\n", $Value);
141 | $Value[1] = wordwrap($Value[1], 76, ($Iterant === $Number ? "\n " : "\n│ "));
142 | $Final .= ($Iterant === $Number ? '└─' : '├─') . $Choice . ' (' . $Value[0] . '): ' . $Value[1] . "\n";
143 | } else {
144 | $Final .= ($Iterant === $Number ? '└─' : '├─') . $Choice . ' (' . $Value . ")\n";
145 | }
146 | $Iterant++;
147 | }
148 | if (!empty($Info['allow_other'])) {
149 | $Final .= '└─…' . $Data->getString('label.Other') . "\n";
150 | }
151 | $Final .= "```\n\n";
152 | }
153 | if (!empty($Info['hints'])) {
154 | $HintValue = '';
155 | if (is_string($Info['hints']) && strpos($Info['hints'], '.') !== false) {
156 | $HintValue = $Data->getString($Info['hints']);
157 | }
158 | if ($HintValue !== '') {
159 | if ($Data->Directionality !== 'rtl') {
160 | $HintValue = str_replace(
161 | ['', '', '', '', '', '', '', '', ''],
162 | ['`', '`', '`', '`', '`', '__', '__', '*', '*'],
163 | html_entity_decode($HintValue)
164 | );
165 | } else {
166 | $HintValue = preg_replace('~([^<]+)~i', '\1', html_entity_decode($HintValue));
167 | }
168 | $Final .= $HintValue . "\n\n";
169 | } else {
170 | foreach ($Data->arrayFromL10nToArray($Info['hints']) as $HintKey => $HintValue) {
171 | if ($Data->Directionality !== 'rtl') {
172 | $HintValue = str_replace(
173 | ['', '', '', '', '', '', '', '', ''],
174 | ['`', '`', '`', '`', '`', '__', '__', '*', '*'],
175 | html_entity_decode($HintValue)
176 | );
177 | } else {
178 | $HintValue = preg_replace('~([^<]+)~i', '\1', html_entity_decode($HintValue));
179 | }
180 | if (!is_string($HintKey)) {
181 | $Final .= $HintValue . "\n\n";
182 | continue;
183 | }
184 | $Final .= sprintf("__%s__ %s\n\n", $HintKey, $HintValue);
185 | }
186 | }
187 | }
188 | if (!empty($Info['See also'])) {
189 | $Final .= sprintf($Data->getString('menu_open'), $Data->getString('label.See also')) . "\n";
190 | foreach ($Info['See also'] as $RefKey => $RefLink) {
191 | $RefKey = addcslashes($RefKey, '|');
192 | $Final .= sprintf($Data->getString('menu_item'), $RefKey, $RefLink) . "\n";
193 | }
194 | $Final .= $Data->getString('menu_close') . "\n";
195 | }
196 | }
197 | if ($Current !== $Cats) {
198 | $Current++;
199 | }
200 | }
201 | $Matches = [];
202 | if (preg_match_all('~\{([.,%_ ?!\dA-Za-z()-]+)\}~', $Final, $Matches)) {
203 | $Matches = array_unique($Matches[1]);
204 | foreach ($Matches as $Match) {
205 | if ($Try = $Data->getString($Match)) {
206 | $Final = str_replace('{' . $Match . '}', $Try, $Final);
207 | }
208 | }
209 | }
210 | if (!isset($_GET['autoupdate'])) {
211 | echo $First . "```\n\n" . $Final;
212 | } else {
213 | $Try = $_GET['autoupdate'] . 'readme.' . $_GET['language'] . '.md';
214 | if (is_file($Try) && is_writable($Try)) {
215 | $README = file_get_contents($Try);
216 | if (($Start = strpos($README, '')) !== false) {
217 | $Start = strpos($README, '```', $Start);
218 | }
219 | if (($Finish = strpos($README, '')) !== false) {
220 | $Finish = strrpos(substr($README, 0, $Finish), '---');
221 | }
222 | if ($Start === false || $Finish === false) {
223 | echo 'Unable to find configuration section markers in ' . $Try . '!';
224 | } else {
225 | $New = substr($README, 0, $Start) . $First . "```\n\n" . $Final . substr($README, $Finish);
226 | $Handle = fopen($Try, 'wb');
227 | fwrite($Handle, $New);
228 | fclose($Handle);
229 | echo 'Successfully updated ' . $Try . '. :-)';
230 | }
231 | } else {
232 | echo $Try . ' doesn\'t exist or isn\'t writable!';
233 | }
234 | }
235 | }
236 |
237 | unset($Web, $FrontEnd, $Scanner, $Loader);
238 |
--------------------------------------------------------------------------------
/readme.zh-Hans.md:
--------------------------------------------------------------------------------
1 | ## phpMussel v3 中文(简体)文档。
2 |
3 | ### 内容
4 | - 1. [前言](#user-content-SECTION1)
5 | - 2. [如何安装](#user-content-SECTION2)
6 | - 3. [如何使用](#user-content-SECTION3)
7 | - 4. [扩展PHPMUSSEL](#user-content-SECTION4)
8 | - 5. [配置选项](#user-content-SECTION5)
9 | - 6. [签名格式](#user-content-SECTION6)
10 | - 7. [已知的兼容问题](#user-content-SECTION7)
11 | - 8. [常见问题(FAQ)](#user-content-SECTION8)
12 | - 9. [法律信息](#user-content-SECTION9)
13 |
14 | *Regarding translations: My native language is English. Because this is a free and open-source hobby project which generates zero income, and translatable content is likely to change as the features and functionality supported by the project changes, it doesn't make sense for me to spend money for translations. Because I'm the sole author/developer/maintainer for the project and I'm not a ployglot, any translations I produce are very likely to contain errors. Sorry, but realistically, that won't ever change. If you find any such errors/typos/mistakes/etc, your assistance to correct them would be very much appreciated. Pull requests are invited and encouraged. Otherwise, if you find these errors too much to handle, just stick with the original English source. If a translation is irredeemably incomprehensible, let me know which, and I can delete it. If you're not sure how to perform pull requests, ask. I can help.*
15 |
16 | ---
17 |
18 |
19 | ### 1. 前言
20 |
21 | 感谢使用phpMussel,这是一个根据ClamAV的签名和其他签名在上传完成后来自动检测木马/病毒/恶意软件和其他可能威胁到您系统安全的文件的PHP脚本。
22 |
23 | [PHPMUSSEL](https://phpmussel.github.io/) COPYRIGHT 2013 和走向未来 GNU/GPLv2 由 [Caleb M (Maikuolan)](https://github.com/Maikuolan)。
24 |
25 | 本脚本是基于GNU通用许可V2.0版许可协议发布的,您可以在许可协议的允许范围内自行修改和发布,但请遵守GNU通用许可协议。使用脚本的过程中,作者不提供任何担保和任何隐含担保。更多的细节请参见GNU通用公共许可证,下的`LICENSE.txt`文件也可从访问:
26 | - 。
27 | - 。
28 |
29 | 谢谢[ClamAV](https://www.clamav.net/)为本脚本提供文件签名库访问许可。没有它,这个脚本很可能不会存在,或者其价值有限。
30 |
31 | 谢谢GitHub和Bitbucket为项目托管,还有谢谢这些组织为提供一些签名:[PhishTank](https://www.phishtank.com/),[NLNetLabs](https://nlnetlabs.nl/),[Malware.Expert](https://malware.expert/),等人。
32 |
33 | ---
34 |
35 |
36 | ### 2. 如何安装
37 |
38 | #### 2.0 与COMPOSER安装
39 |
40 | 推荐的安装phpMussel v3的方法是通过Composer。
41 |
42 | 为了方便起见,您可以通过旧的主要phpMussel存储库安装最常用的phpMussel依赖项:
43 |
44 | `composer require phpmussel/phpmussel`
45 |
46 | 作为备选,您可以单独选择所需的依赖项。您很可能只需要特定的依赖项,而不需要所有。
47 |
48 | 为了使用phpMussel做任何事情,您需要phpMussel核心代码库:
49 |
50 | `composer require phpmussel/core`
51 |
52 | 提供phpMussel的前端管理工具:
53 |
54 | `composer require phpmussel/frontend`
55 |
56 | 为您的网站提供自动文件上传扫描:
57 |
58 | `composer require phpmussel/web`
59 |
60 | 提供了将phpMussel用作交互式CLI模式应用:
61 |
62 | `composer require phpmussel/cli`
63 |
64 | 在phpMussel和PHPMailer之间建立桥梁,使phpMussel可以利用PHPMailer进行双因素身份验证,有关阻止的文件上传的电子邮件通知,等等:
65 |
66 | `composer require phpmussel/phpmailer`
67 |
68 | 为了使phpMussel能够检测到任何东西,您需要安装签名。没有特定的程序包。要安装签名,请参阅本文档的下一部分。
69 |
70 | 作为备选,如果您不想使用Composer,则可以从此处下载预打包的ZIP:
71 |
72 | https://github.com/phpMussel/Examples
73 |
74 | 预先打包的ZIP包含所有上述依赖关系,以及所有标准phpMussel签名文件,以及一些示例,这些示例说明了如何在实现中使用phpMussel。
75 |
76 | #### 2.1 安装签名
77 |
78 | phpMussel需要签名来检测特定的威胁。安装签名有二种主要方法:
79 |
80 | 1. 使用“SigTool”生成签名并手动安装。
81 | 2. 从“phpMussel/Signatures”或“phpMussel/Examples”下载签名并手动安装。
82 |
83 | ##### 2.1.0 使用“SigTool”生成签名并手动安装。
84 |
85 | *看到:[SigTool文档](https://github.com/phpMussel/SigTool#documentation).*
86 |
87 | *另请注意:SigTool仅处理来自ClamAV的签名。为了获得其他来源的签名(例如,专门为phpMussel编写的签名,其中包括检测phpMussel的测试样本所必需的签名),此方法将需要通过此处提到的其他方法之一进行补充。*
88 |
89 | ##### 2.1.1 从“phpMussel/Signatures”或“phpMussel/Examples”下载签名并手动安装。
90 |
91 | 首先,去[phpMussel/Signatures](https://github.com/phpMussel/Signatures)。存储库包含各种GZ压缩的签名文件。下载所需的文件,解压缩文件,并将它们复制到安装的签名目录。
92 |
93 | 作为备选,从[phpMussel/Examples](https://github.com/phpMussel/Examples)下载最新的ZIP。然后,您可以将签名从该存档复制/粘贴到您的安装中。
94 |
95 | ---
96 |
97 |
98 | ### 3. 如何使用
99 |
100 | #### 3.0 配置PHPMUSSEL
101 |
102 | 安装phpMussel之后,您将需要一个配置文件,以便对其进行配置。phpMussel配置文件可以格式化为INI或YML文件。如果您使用示例ZIP之一,则已经有两个示例配置文件可用,`phpmussel.ini`和`phpmussel.yml`。您可以根据需要选择其中一种,如果您想。如果您不是使用示例ZIP之一,则需要创建一个新文件。
103 |
104 | 如果您对phpMussel的标准配置感到满意,并且不想更改任何内容,则可以使用一个空文件作为您的配置文件。只需设置要更改的值即可。其他所有内容都将使用默认值。
105 |
106 | 您可以从前端配置页面配置所有内容,如果您想。但是,从v3开始,前端登录信息将存储在您的配置文件中。因此,要登录到前端,您需要设置一个帐户。然后,您可以使用它登录并配置其他所有内容。
107 |
108 | 以下摘录将使用用户名“admin”和密码“password”向前端添加一个新帐户。
109 |
110 | 对于INI文件:
111 |
112 | ```INI
113 | [user.admin]
114 | password='$2y$10$FPF5Im9MELEvF5AYuuRMSO.QKoYVpsiu1YU9aDClgrU57XtLof/dK'
115 | permissions='1'
116 | ```
117 |
118 | 对于YML文件:
119 |
120 | ```YAML
121 | user.admin:
122 | password: "$2y$10$FPF5Im9MELEvF5AYuuRMSO.QKoYVpsiu1YU9aDClgrU57XtLof/dK"
123 | permissions: 1
124 | ```
125 |
126 | 您可以根据需要命名配置即可(只要保留其扩展名,以便phpMussel知道其使用的格式)。您可以将其存储在任何位置中。您可以在实例化加载程序时通过提供其路径来告诉phpMussel在哪里找到您的配置文件。如果没有提供路径,phpMussel将尝试在vendor目录的父目录中找到它。
127 |
128 | 在某些环境(例如Apache)中,甚至可以在配置的前面放置一个点以隐藏它并阻止公共访问。
129 |
130 | 有关可用于phpMussel的各种配置指令的更多信息,请参阅本文档的配置部分。
131 |
132 | #### 3.1 PHPMUSSEL CORE
133 |
134 | 无论您如何使用phpMussel,几乎每个实施都至少包含以下内容:
135 |
136 | ```PHP
137 | scan();
184 | ```
185 |
186 | 可选地,phpMussel可以尝试修复上传的名称,以防万一出了问题,如果您想:
187 |
188 | ```PHP
189 | $Web->demojibakefier();
190 | ```
191 |
192 | 一个更完整的示例:
193 |
194 | ```PHP
195 | Events->addHandler('sendMail', new \phpMussel\PHPMailer\Linker($Loader));
206 |
207 | // Scans file uploads (execution terminates here if the scan finds anything).
208 | $Web->scan();
209 |
210 | // Fixes possible corrupted file upload names (Warning: modifies the content of $_FILES).
211 | $Web->demojibakefier();
212 |
213 | // Cleanup.
214 | unset($Web, $Scanner, $Loader);
215 |
216 | ?>
217 |
223 |
224 | ```
225 |
226 | *尝试上传文件`ascii_standard_testfile.txt`,仅出于测试phpMussel的目的而提供的良性样本:*
227 |
228 | 
229 |
230 | #### 3.3 CLI模式
231 |
232 | 要实例化CLI处理程序:
233 |
234 | ```PHP
235 | $CLI = new \phpMussel\CLI\CLI($Loader, $Scanner);
236 | ```
237 |
238 | 一个更完整的示例:
239 |
240 | ```PHP
241 | Events->addHandler('sendMail', new \phpMussel\PHPMailer\Linker($Loader));
282 |
283 | // Scans file uploads (execution terminates here if the scan finds anything).
284 | $Web->scan();
285 |
286 | // Fixes possible corrupted file upload names (Warning: modifies the content of $_FILES).
287 | $Web->demojibakefier();
288 |
289 | // Load the front-end.
290 | $FrontEnd->view();
291 |
292 | // Cleanup.
293 | unset($Web, $FrontEnd, $Scanner, $Loader);
294 | ```
295 |
296 | *屏幕截图:*
297 |
298 | 
299 |
300 | #### 3.5 扫描程序API
301 |
302 | 如果您想,还可以在其他程序和脚本中利用phpMussel扫描程序API。
303 |
304 | 一个更完整的示例:
305 |
306 | ```PHP
307 | // Path to vendor directory.
308 | $Vendor = __DIR__ . DIRECTORY_SEPARATOR . 'vendor';
309 |
310 | // Composer's autoloader.
311 | require $Vendor . DIRECTORY_SEPARATOR . 'autoload.php';
312 |
313 | // Location of the test files.
314 | $Samples = sprintf($Vendor . '%1$sphpmussel%1$score%1$stests%1$s_support%1$ssamples', DIRECTORY_SEPARATOR);
315 |
316 | $Loader = new \phpMussel\Core\Loader();
317 | $Scanner = new \phpMussel\Core\Scanner($Loader);
318 | $Loader->Events->addHandler('sendMail', new \phpMussel\PHPMailer\Linker($Loader));
319 |
320 | // Execute the scan.
321 | $Results = $Scanner->scan($Samples);
322 |
323 | // Cleanup.
324 | unset($Scanner, $Loader);
325 |
326 | var_dump($Results);
327 | ```
328 |
329 | 该示例要注意的重要部分是`scan()`方法。`scan()`方法接受两个参数:
330 |
331 | ```PHP
332 | public function scan(mixed $Files, int $Format = 0): mixed
333 | ```
334 |
335 | 第一个参数可以是字符串或数组,并告诉扫描程序应扫描的内容。它可以是指示特定文件或目录的字符串,也可以是此类字符串的数组以指定多个文件/目录。
336 |
337 | 当为字符串时,它应指向可以在何处找到数据。当作为阵列时,阵列键应指示要扫描的项目的原始名称,并且值应指向可以找到数据的位置。
338 |
339 | 第二个参数是整数,它告诉扫描程序应如何返回其扫描结果。
340 |
341 | 指定“1”以将扫描结果作为数组返回,每个元素将扫描项表示为整数。
342 |
343 | 这些整数具有以下含义:
344 |
345 | 结果 | 说明
346 | --:|:--
347 | -5 | 表明由于其他原因,扫描无法完成。
348 | -4 | 表明由于加密而无法扫描数据。
349 | -3 | 表明问题是遇到关于phpMussel签名文件。
350 | -2 | 表明损坏数据是检测中扫描和因此扫描失败完成。
351 | -1 | 表明扩展或插件需要通过PHP以经营扫描是失踪和因此扫描失败完成。
352 | 0 | 表明扫描目标不存在和因此没有任何事为扫描。
353 | 1 | 表明扫描目标是成功扫描和没有任何问题检测。
354 | 2 | 表明扫描目标是成功扫描和至少一些问题是检测。
355 |
356 | 指定2以将扫描结果作为布尔值返回。
357 |
358 | 结果 | 说明
359 | :-:|:--
360 | `true` | 检测到问题(扫描目标很危险)。
361 | `false` | 未检测到问题(扫描目标可能是安全的)。
362 |
363 | 指定3以数组形式返回扫描结果,每个扫描项目的每个元素均包含人类可读的文本。
364 |
365 | *示例输出:*
366 |
367 | ```
368 | array(3) {
369 | ["dcacac499064454218823fbabff7e09b5b011c0c877ee6f215f35bffb195b6e9:654:ascii_standard_testfile.txt"]=>
370 | string(73) "Detected phpMussel-Testfile.ASCII.Standard (ascii_standard_testfile.txt)!"
371 | ["c845b950f38399ae7fe4b3107cab5b46ac7c3e184dddfec97d4d164c00cb584a:491:coex_testfile.rtf"]=>
372 | string(53) "Detected phpMussel-Testfile.CoEx (coex_testfile.rtf)!"
373 | ["d45d5d9df433aefeacaece6162b835e6474d6fcb707d24971322ec429707c58f:185:encrypted.zip"]=>
374 | string(77) "Detected encrypted archive; Encrypted archives not permitted (encrypted.zip)!"
375 | }
376 | ```
377 |
378 | 指定4以将扫描结果作为人类可读文本字符串返回(像3,但内爆了)。
379 |
380 | *示例输出:*
381 |
382 | ```
383 | Detected phpMussel-Testfile.ASCII.Standard (ascii_standard_testfile.txt)! Detected phpMussel-Testfile.CoEx (coex_testfile.rtf)! Detected encrypted archive; Encrypted archives not permitted (encrypted.zip)!
384 | ```
385 |
386 | 指定其他任何值以返回格式化的文本(即,使用CLI时看到的扫描结果)。
387 |
388 | *示例输出:*
389 |
390 | ```
391 | string(1826) "Fri, 17 Jul 2020 18:50:47 +0800 Started.
392 | ─→ Checking "ascii_standard_testfile.txt".
393 | ──→ Detected phpMussel-Testfile.ASCII.Standard (ascii_standard_testfile.txt)!
394 | ─→ Checking "coex_testfile.rtf".
395 | ──→ Detected phpMussel-Testfile.CoEx (coex_testfile.rtf)!
396 | ─→ Checking "encrypted.zip".
397 | ──→ Detected encrypted archive; Encrypted archives not permitted (encrypted.zip)!
398 | ─→ Checking "exe_standard_testfile.exe".
399 | ──→ Filetype blacklisted (exe_standard_testfile.exe)!
400 | ─→ Checking "general_standard_testfile.txt".
401 | ──→ Detected phpMussel-Testfile.General.Standard (general_standard_testfile.txt)!
402 | ─→ Checking "graphics_standard_testfile.gif".
403 | ──→ Detected phpMussel-Testfile.Graphics.Standard (graphics_standard_testfile.gif)!
404 | ─→ Checking "hash_testfile_md5.txt".
405 | ──→ Detected phpMussel-Testfile.HASH.MD5 (hash_testfile_md5.txt)!
406 | ─→ Checking "hash_testfile_sha1.txt".
407 | ──→ Detected phpMussel-Testfile.HASH.SHA1 (hash_testfile_sha1.txt)!
408 | ─→ Checking "hash_testfile_sha256.txt".
409 | ──→ Detected phpMussel-Testfile.HASH.SHA256 (hash_testfile_sha256.txt)!
410 | ─→ Checking "hello.txt".
411 | ──→ No problems found.
412 | ─→ Checking "html_standard_testfile.html".
413 | ──→ Detected phpMussel-Testfile.HTML.Standard (html_standard_testfile.html)!
414 | ─→ Checking "ole_testfile.ole".
415 | ────→ Detected phpMussel-Testfile.OLE.Standard (ole_testfile.bin)!
416 | ─→ Checking "pdf_standard_testfile.pdf".
417 | ──→ Detected phpMussel-Testfile.PDF.Standard (pdf_standard_testfile.pdf)!
418 | ─→ Checking "pe_sectional_testfile.exe".
419 | ──→ Filetype blacklisted (pe_sectional_testfile.exe)!
420 | ─→ Checking "swf_standard_testfile.swf".
421 | ──→ Detected phpMussel-Testfile.SWF.Standard (swf_standard_testfile.swf)!
422 | Fri, 17 Jul 2020 18:50:50 +0800 Finished.
423 | "
424 | ```
425 |
426 | *也可以看看: [扫描时如何访问文件的具体细节?](#user-content-SCAN_DEBUGGING)*
427 |
428 | #### 3.6 2FA(双因素身份验证)
429 |
430 | 通过启用双因素身份验证,可以使前端更安全。当登录使用2FA的帐户时,会向与该帐户关联的电子邮件地址发送电子邮件。此电子邮件包含“2FA代码”,用户必须输入它(以及他们的用户名和密码),为了能够使用该帐户登录。这意味着获取帐户密码不足以让任何黑客或潜在攻击者能够帐户登录,因为他们还需要访问帐户的电子邮件地址才能接收和使用会话的2FA代码(从而使前端更安全)。
431 |
432 | 在安装PHPMailer后,您需要通过phpMussel配置页面或配置文件填充PHPMailer的配置指令。有关这些配置指令的更多信息包含在本文档的配置部分中。在填充PHPMailer配置指令后,将`enable_two_factor`设置为`true`。现在应启用双因素身份验证。
433 |
434 | 接下来,您需要让phpMussel知道在使用该帐户登录时将2FA代码发送到何处。为此,请使用电子邮件地址作为帐户的用户名(例如,`foo@bar.tld`),或者将电子邮件地址作为用户名的一部分包括在内,就像通常发送电子邮件一样(例如,`Foo Bar `)。
435 |
436 | ---
437 |
438 |
439 | ### 4. 扩展PHPMUSSEL
440 |
441 | phpMussel在设计时考虑了可扩展性。向phpMussel组织中的任何存储库拉请求和[贡献](https://github.com/phpMussel/.github/blob/master/CONTRIBUTING.md)总是欢迎的。如果需要,您也可以修改或扩展phpMussel以适合自己的需求(例如,用于特定于您的特定实现的修改或扩展,用于需要phpMussel的新插件和新Composer软件包,等等)。
442 |
443 | 从v3开始,所有phpMussel功能都作为类存在。这意味着在某些情况下,PHP提供的[对象继承](https://www.php.net/manual/zh/language.oop5.inheritance.php)机制可能是扩展phpMussel的简便且适当的方法。
444 |
445 | phpMussel还提供了自己的扩展机制。在v3之前,首选的机制是phpMussel的集成插件系统。从v3开始,首选的机制是事件编排程序。
446 |
447 | 用于扩展phpMussel和编写新插件的样板代码可在[样板库](https://github.com/phpMussel/plugin-boilerplates)中公开获得。还包括[所有当前支持的事件](https://github.com/phpMussel/plugin-boilerplates/tree/master/boilerplate-v3#currently-supported-events)的列表,以及有关如何使用样板代码的更详细的说明。
448 |
449 | v3样板代码的结构与phpMussel组织中各种phpMussel v3存储库的结构相同。这不是巧合。只要有可能,我建议您将v3样板代码用于可扩展性,并使用与phpMussel v3本身相似的设计原理。如果您选择公开您的新扩展程序或插件,您可以集成Composer支持,理论上其他人应该有可能以与phpMussel v3完全相同的方式来利用您的扩展程序或插件,只需将其与其他Composer依赖项一起使用,并在实现时应用任何必要的事件处理程序即可(当然,不要忘了在出版物中包含说明,以便其他人知道可能存在的任何必要事件处理程序,以及正确安装和使用出版物所必需的任何其他信息)。
450 |
451 | ---
452 |
453 |
454 | ### 5. 配置选项
455 |
456 | 以下是phpMussel接受的配置指令的列表,以及一个说明的他们的目的和功能。
457 |
458 | ```
459 | 配置 (v3)
460 | │
461 | ├───core
462 | │ scan_log [string]
463 | │ scan_log_serialized [string]
464 | │ error_log [string]
465 | │ outbound_request_log [string]
466 | │ truncate [string]
467 | │ log_rotation_limit [int]
468 | │ log_rotation_action [string]
469 | │ timezone [string]
470 | │ time_offset [int]
471 | │ time_format [string]
472 | │ ipaddr [string]
473 | │ delete_on_sight [bool]
474 | │ lang [string]
475 | │ lang_override [bool]
476 | │ scan_cache_expiry [int]
477 | │ maintenance_mode [bool]
478 | │ statistics [bool]
479 | │ hide_version [bool]
480 | │ disabled_channels [string]
481 | │ request_proxy [string]
482 | │ request_proxyauth [string]
483 | │ default_timeout [int]
484 | ├───signatures
485 | │ active [string]
486 | │ fail_silently [bool]
487 | │ fail_extensions_silently [bool]
488 | │ detect_adware [bool]
489 | │ detect_joke_hoax [bool]
490 | │ detect_pua_pup [bool]
491 | │ detect_packer_packed [bool]
492 | │ detect_shell [bool]
493 | │ detect_deface [bool]
494 | │ detect_encryption [bool]
495 | │ heuristic_threshold [int]
496 | ├───files
497 | │ filesize_limit [string]
498 | │ filesize_response [bool]
499 | │ filetype_whitelist [string]
500 | │ filetype_blacklist [string]
501 | │ filetype_greylist [string]
502 | │ check_archives [bool]
503 | │ filesize_archives [bool]
504 | │ filetype_archives [bool]
505 | │ max_recursion [int]
506 | │ block_encrypted_archives [bool]
507 | │ max_files_in_archives [int]
508 | │ chameleon_from_php [bool]
509 | │ can_contain_php_file_extensions [string]
510 | │ chameleon_from_exe [bool]
511 | │ chameleon_to_archive [bool]
512 | │ chameleon_to_doc [bool]
513 | │ chameleon_to_img [bool]
514 | │ chameleon_to_pdf [bool]
515 | │ archive_file_extensions [string]
516 | │ block_control_characters [bool]
517 | │ corrupted_exe [bool]
518 | │ decode_threshold [string]
519 | │ scannable_threshold [string]
520 | │ allow_leading_trailing_dots [bool]
521 | │ block_macros [bool]
522 | │ only_allow_images [bool]
523 | │ entropy_limit [float]
524 | │ entropy_filesize_limit [string]
525 | ├───quarantine
526 | │ quarantine_key [string]
527 | │ quarantine_max_filesize [string]
528 | │ quarantine_max_usage [string]
529 | │ quarantine_max_files [int]
530 | ├───virustotal
531 | │ vt_public_api_key [string]
532 | │ vt_suspicion_level [int]
533 | │ vt_weighting [int]
534 | │ vt_quota_rate [int]
535 | │ vt_quota_time [int]
536 | ├───urlscanner
537 | │ google_api_key [string]
538 | │ maximum_api_lookups [int]
539 | │ maximum_api_lookups_response [bool]
540 | │ cache_time [int]
541 | ├───legal
542 | │ pseudonymise_ip_addresses [bool]
543 | │ privacy_policy [string]
544 | ├───supplementary_cache_options
545 | │ prefix [string]
546 | │ enable_apcu [bool]
547 | │ enable_memcached [bool]
548 | │ enable_redis [bool]
549 | │ enable_pdo [bool]
550 | │ memcached_host [string]
551 | │ memcached_port [int]
552 | │ redis_host [string]
553 | │ redis_port [int]
554 | │ redis_timeout [float]
555 | │ redis_database_number [int]
556 | │ pdo_dsn [string]
557 | │ pdo_username [string]
558 | │ pdo_password [string]
559 | ├───frontend
560 | │ frontend_log [string]
561 | │ max_login_attempts [int]
562 | │ numbers [string]
563 | │ default_algo [string]
564 | │ theme [string]
565 | │ theme_mode [string]
566 | │ magnification [float]
567 | │ custom_header [string]
568 | │ custom_footer [string]
569 | ├───web
570 | │ uploads_log [string]
571 | │ forbid_on_block [bool]
572 | │ unsupported_media_type_header [bool]
573 | │ max_uploads [int]
574 | │ ignore_upload_errors [bool]
575 | │ theme [string]
576 | │ theme_mode [string]
577 | │ magnification [float]
578 | │ custom_header [string]
579 | │ custom_footer [string]
580 | └───phpmailer
581 | event_log [string]
582 | enable_two_factor [bool]
583 | enable_notifications [string]
584 | skip_auth_process [bool]
585 | host [string]
586 | port [int]
587 | smtp_secure [string]
588 | smtp_auth [bool]
589 | username [string]
590 | password [string]
591 | set_from_address [string]
592 | set_from_name [string]
593 | add_reply_to_address [string]
594 | add_reply_to_name [string]
595 | ```
596 |
597 | #### “core” (类别)
598 | 基本配置(任何不属于其他类别的核心配置)。
599 |
600 | ##### “scan_log” `[string]`
601 | - 文件为记录在所有扫描结果。指定一个文件名,或留空以关闭。
602 |
603 | 有用提示:您可以使用时间格式占位符将日期/时间信息附加到日志文件的名称。可用的时间格式占位符显示在`core➡time_format`处。
604 |
605 | ##### “scan_log_serialized” `[string]`
606 | - 文件为记录在所有扫描结果(它采用序列化格式)。指定一个文件名,或留空以关闭。
607 |
608 | 有用提示:您可以使用时间格式占位符将日期/时间信息附加到日志文件的名称。可用的时间格式占位符显示在`core➡time_format`处。
609 |
610 | ##### “error_log” `[string]`
611 | - 用于记录检测到的任何非致命错误的文件。指定一个文件名,或留空以禁用。
612 |
613 | 有用提示:您可以使用时间格式占位符将日期/时间信息附加到日志文件的名称。可用的时间格式占位符显示在`core➡time_format`处。
614 |
615 | ##### “outbound_request_log” `[string]`
616 | - 用于记录任何出站请求结果的文件。指定一个文件名,或留空以禁用。
617 |
618 | 有用提示:您可以使用时间格式占位符将日期/时间信息附加到日志文件的名称。可用的时间格式占位符显示在`core➡time_format`处。
619 |
620 | ##### “truncate” `[string]`
621 | - 截断日志文件当他们达到一定的大小吗?值是在B/KB/MB/GB/TB,是日志文件允许的最大大小直到它被截断。默认值为“0KB”将禁用截断(日志文件可以无限成长)。注意:适用于单个日志文件!日志文件大小不被算集体的。
622 |
623 | ##### “log_rotation_limit” `[int]`
624 | - 日志轮转限制了任何时候应该存在的日志文件的数量。当新的日志文件被创建时,如果日志文件的指定的最大数量已经超过,将执行指定的操作。您可以在此指定所需的限制。值为“0”将禁用日志轮转。
625 |
626 | ##### “log_rotation_action” `[string]`
627 | - 日志轮转限制了任何时候应该存在的日志文件的数量。当新的日志文件被创建时,如果日志文件的指定的最大数量已经超过,将执行指定的操作。您可以在此处指定所需的操作。
628 |
629 | ```
630 | log_rotation_action
631 | ├─Delete ("删除最旧的日志文件,直到不再超出限制。")
632 | └─Archive ("首先归档,然后删除最旧的日志文件,直到不再超出限制。")
633 | ```
634 |
635 | ##### “timezone” `[string]`
636 | - 这用于指定要使用的时区(例如,Africa/Cairo、America/New_York、Asia/Tokyo、Australia/Perth、Europe/Berlin、Pacific/Guam、等等)。指定“SYSTEM”使PHP自动为您处理。
637 |
638 | ```
639 | timezone
640 | ├─SYSTEM ("使用系统默认时区。")
641 | ├─UTC ("UTC")
642 | └─…其他
643 | ```
644 |
645 | ##### “time_offset” `[int]`
646 | - 时区偏移量(分钟)。
647 |
648 | ##### “time_format” `[string]`
649 | - phpMussel使用的日期符号格式。可根据要求增加附加选项。
650 |
651 | ```
652 | time_format
653 | ├─{Day}, {dd} {Mon} {yyyy} {hh}:{ii}:{ss} {tz} ("{Day}, {dd} {Mon} {yyyy} {hh}:{ii}:{ss} {tz}")
654 | ├─{Day}, {dd} {Mon} {yyyy} {hh}:{ii}:{ss} ("{Day}, {dd} {Mon} {yyyy} {hh}:{ii}:{ss}")
655 | ├─{Day}, {dd} {Mon} {yyyy} ("{Day}, {dd} {Mon} {yyyy}")
656 | ├─{yyyy}.{mm}.{dd} {hh}:{ii}:{ss} {tz} ("{yyyy}.{mm}.{dd} {hh}:{ii}:{ss} {tz}")
657 | ├─{yyyy}.{mm}.{dd} {hh}:{ii}:{ss} ("{yyyy}.{mm}.{dd} {hh}:{ii}:{ss}")
658 | ├─{yyyy}.{mm}.{dd} ("{yyyy}.{mm}.{dd}")
659 | ├─{yyyy}-{mm}-{dd} {hh}:{ii}:{ss} {tz} ("{yyyy}-{mm}-{dd} {hh}:{ii}:{ss} {tz}")
660 | ├─{yyyy}-{mm}-{dd} {hh}:{ii}:{ss} ("{yyyy}-{mm}-{dd} {hh}:{ii}:{ss}")
661 | ├─{yyyy}-{mm}-{dd} ("{yyyy}-{mm}-{dd}")
662 | ├─{yyyy}/{mm}/{dd} {hh}:{ii}:{ss} {tz} ("{yyyy}/{mm}/{dd} {hh}:{ii}:{ss} {tz}")
663 | ├─{yyyy}/{mm}/{dd} {hh}:{ii}:{ss} ("{yyyy}/{mm}/{dd} {hh}:{ii}:{ss}")
664 | ├─{yyyy}/{mm}/{dd} ("{yyyy}/{mm}/{dd}")
665 | ├─{dd}.{mm}.{yyyy} {hh}:{ii}:{ss} {tz} ("{dd}.{mm}.{yyyy} {hh}:{ii}:{ss} {tz}")
666 | ├─{dd}.{mm}.{yyyy} {hh}:{ii}:{ss} ("{dd}.{mm}.{yyyy} {hh}:{ii}:{ss}")
667 | ├─{dd}.{mm}.{yyyy} ("{dd}.{mm}.{yyyy}")
668 | ├─{dd}-{mm}-{yyyy} {hh}:{ii}:{ss} {tz} ("{dd}-{mm}-{yyyy} {hh}:{ii}:{ss} {tz}")
669 | ├─{dd}-{mm}-{yyyy} {hh}:{ii}:{ss} ("{dd}-{mm}-{yyyy} {hh}:{ii}:{ss}")
670 | ├─{dd}-{mm}-{yyyy} ("{dd}-{mm}-{yyyy}")
671 | ├─{dd}/{mm}/{yyyy} {hh}:{ii}:{ss} {tz} ("{dd}/{mm}/{yyyy} {hh}:{ii}:{ss} {tz}")
672 | ├─{dd}/{mm}/{yyyy} {hh}:{ii}:{ss} ("{dd}/{mm}/{yyyy} {hh}:{ii}:{ss}")
673 | ├─{dd}/{mm}/{yyyy} ("{dd}/{mm}/{yyyy}")
674 | ├─{mm}.{dd}.{yyyy} {hh}:{ii}:{ss} {tz} ("{mm}.{dd}.{yyyy} {hh}:{ii}:{ss} {tz}")
675 | ├─{mm}.{dd}.{yyyy} {hh}:{ii}:{ss} ("{mm}.{dd}.{yyyy} {hh}:{ii}:{ss}")
676 | ├─{mm}.{dd}.{yyyy} ("{mm}.{dd}.{yyyy}")
677 | ├─{mm}-{dd}-{yyyy} {hh}:{ii}:{ss} {tz} ("{mm}-{dd}-{yyyy} {hh}:{ii}:{ss} {tz}")
678 | ├─{mm}-{dd}-{yyyy} {hh}:{ii}:{ss} ("{mm}-{dd}-{yyyy} {hh}:{ii}:{ss}")
679 | ├─{mm}-{dd}-{yyyy} ("{mm}-{dd}-{yyyy}")
680 | ├─{mm}/{dd}/{yyyy} {hh}:{ii}:{ss} {tz} ("{mm}/{dd}/{yyyy} {hh}:{ii}:{ss} {tz}")
681 | ├─{mm}/{dd}/{yyyy} {hh}:{ii}:{ss} ("{mm}/{dd}/{yyyy} {hh}:{ii}:{ss}")
682 | ├─{mm}/{dd}/{yyyy} ("{mm}/{dd}/{yyyy}")
683 | ├─{yy}.{mm}.{dd} {hh}:{ii}:{ss} {tz} ("{yy}.{mm}.{dd} {hh}:{ii}:{ss} {tz}")
684 | ├─{yy}.{mm}.{dd} {hh}:{ii}:{ss} ("{yy}.{mm}.{dd} {hh}:{ii}:{ss}")
685 | ├─{yy}.{mm}.{dd} ("{yy}.{mm}.{dd}")
686 | ├─{yy}-{mm}-{dd} {hh}:{ii}:{ss} {tz} ("{yy}-{mm}-{dd} {hh}:{ii}:{ss} {tz}")
687 | ├─{yy}-{mm}-{dd} {hh}:{ii}:{ss} ("{yy}-{mm}-{dd} {hh}:{ii}:{ss}")
688 | ├─{yy}-{mm}-{dd} ("{yy}-{mm}-{dd}")
689 | ├─{yy}/{mm}/{dd} {hh}:{ii}:{ss} {tz} ("{yy}/{mm}/{dd} {hh}:{ii}:{ss} {tz}")
690 | ├─{yy}/{mm}/{dd} {hh}:{ii}:{ss} ("{yy}/{mm}/{dd} {hh}:{ii}:{ss}")
691 | ├─{yy}/{mm}/{dd} ("{yy}/{mm}/{dd}")
692 | ├─{dd}.{mm}.{yy} {hh}:{ii}:{ss} {tz} ("{dd}.{mm}.{yy} {hh}:{ii}:{ss} {tz}")
693 | ├─{dd}.{mm}.{yy} {hh}:{ii}:{ss} ("{dd}.{mm}.{yy} {hh}:{ii}:{ss}")
694 | ├─{dd}.{mm}.{yy} ("{dd}.{mm}.{yy}")
695 | ├─{dd}-{mm}-{yy} {hh}:{ii}:{ss} {tz} ("{dd}-{mm}-{yy} {hh}:{ii}:{ss} {tz}")
696 | ├─{dd}-{mm}-{yy} {hh}:{ii}:{ss} ("{dd}-{mm}-{yy} {hh}:{ii}:{ss}")
697 | ├─{dd}-{mm}-{yy} ("{dd}-{mm}-{yy}")
698 | ├─{dd}/{mm}/{yy} {hh}:{ii}:{ss} {tz} ("{dd}/{mm}/{yy} {hh}:{ii}:{ss} {tz}")
699 | ├─{dd}/{mm}/{yy} {hh}:{ii}:{ss} ("{dd}/{mm}/{yy} {hh}:{ii}:{ss}")
700 | ├─{dd}/{mm}/{yy} ("{dd}/{mm}/{yy}")
701 | ├─{mm}.{dd}.{yy} {hh}:{ii}:{ss} {tz} ("{mm}.{dd}.{yy} {hh}:{ii}:{ss} {tz}")
702 | ├─{mm}.{dd}.{yy} {hh}:{ii}:{ss} ("{mm}.{dd}.{yy} {hh}:{ii}:{ss}")
703 | ├─{mm}.{dd}.{yy} ("{mm}.{dd}.{yy}")
704 | ├─{mm}-{dd}-{yy} {hh}:{ii}:{ss} {tz} ("{mm}-{dd}-{yy} {hh}:{ii}:{ss} {tz}")
705 | ├─{mm}-{dd}-{yy} {hh}:{ii}:{ss} ("{mm}-{dd}-{yy} {hh}:{ii}:{ss}")
706 | ├─{mm}-{dd}-{yy} ("{mm}-{dd}-{yy}")
707 | ├─{mm}/{dd}/{yy} {hh}:{ii}:{ss} {tz} ("{mm}/{dd}/{yy} {hh}:{ii}:{ss} {tz}")
708 | ├─{mm}/{dd}/{yy} {hh}:{ii}:{ss} ("{mm}/{dd}/{yy} {hh}:{ii}:{ss}")
709 | ├─{mm}/{dd}/{yy} ("{mm}/{dd}/{yy}")
710 | ├─{yyyy}年{m}月{d}日 {hh}時{ii}分{ss}秒 ("{yyyy}年{m}月{d}日 {hh}時{ii}分{ss}秒")
711 | ├─{yyyy}年{m}月{d}日 {hh}:{ii}:{ss} {tz} ("{yyyy}年{m}月{d}日 {hh}:{ii}:{ss} {tz}")
712 | ├─{yyyy}年{m}月{d}日 ("{yyyy}年{m}月{d}日")
713 | ├─{yy}年{m}月{d}日 {hh}時{ii}分{ss}秒 ("{yy}年{m}月{d}日 {hh}時{ii}分{ss}秒")
714 | ├─{yy}年{m}月{d}日 {hh}:{ii}:{ss} {tz} ("{yy}年{m}月{d}日 {hh}:{ii}:{ss} {tz}")
715 | ├─{yy}年{m}月{d}日 ("{yy}年{m}月{d}日")
716 | ├─{yyyy}년 {m}월 {d}일 {hh}시 {ii}분 {ss}초 ("{yyyy}년 {m}월 {d}일 {hh}시 {ii}분 {ss}초")
717 | ├─{yyyy}년 {m}월 {d}일 {hh}:{ii}:{ss} {tz} ("{yyyy}년 {m}월 {d}일 {hh}:{ii}:{ss} {tz}")
718 | ├─{yyyy}년 {m}월 {d}일 ("{yyyy}년 {m}월 {d}일")
719 | ├─{yy}년 {m}월 {d}일 {hh}시 {ii}분 {ss}초 ("{yy}년 {m}월 {d}일 {hh}시 {ii}분 {ss}초")
720 | ├─{yy}년 {m}월 {d}일 {hh}:{ii}:{ss} {tz} ("{yy}년 {m}월 {d}일 {hh}:{ii}:{ss} {tz}")
721 | ├─{yy}년 {m}월 {d}일 ("{yy}년 {m}월 {d}일")
722 | ├─{yyyy}-{mm}-{dd}T{hh}:{ii}:{ss}{t:z} ("{yyyy}-{mm}-{dd}T{hh}:{ii}:{ss}{t:z}")
723 | ├─{d}. {m}. {yyyy} ("{d}. {m}. {yyyy}")
724 | └─…其他
725 | ```
726 |
727 | __*占位符 – 解释 – 基于2024-04-30T18:27:49+08:00的示例。*__
728 | `{yyyy}` – 年份 – 例如,2024。
729 | `{yy}` – 缩写年份 – 例如,24。
730 | `{Mon}` – 月份缩写名称(英文) – 例如,Apr。
731 | `{mm}` – 带前导零的月份 – 例如,04。
732 | `{m}` – 月份数 – 例如,4。
733 | `{Day}` – 当天缩写名称(英文) – 例如,Tue。
734 | `{dd}` – 带前导零的天数 – 例如,30。
735 | `{d}` – 天数 – 例如,30。
736 | `{hh}` – 带前导零的小时(使用24小时制) – 例如,18。
737 | `{h}` – 小时(使用24小时制) – 例如,18。
738 | `{ii}` – 带前导零的分钟 – 例如,27。
739 | `{i}` – 分钟 – 例如,27。
740 | `{ss}` – 带前导零的秒 – 例如,49。
741 | `{s}` – 秒 – 例如,49。
742 | `{tz}` – 时区(不带冒号) – 例如,+0800。
743 | `{t:z}` – 时区(带冒号) – 例如,+08:00。
744 |
745 | ##### “ipaddr” `[string]`
746 | - 在哪里可以找到连接请求IP地址? (对于Cloudflare等服务有用)。 标准 = REMOTE_ADDR。 警告:不要修改此除非您知道什么您做着!
747 |
748 | ```
749 | ipaddr
750 | ├─HTTP_INCAP_CLIENT_IP ("HTTP_INCAP_CLIENT_IP (Incapsula)")
751 | ├─HTTP_CF_CONNECTING_IP ("HTTP_CF_CONNECTING_IP (Cloudflare)")
752 | ├─CF-Connecting-IP ("CF-Connecting-IP (Cloudflare)")
753 | ├─HTTP_X_FORWARDED_FOR ("HTTP_X_FORWARDED_FOR (Cloudbric)")
754 | ├─X-Forwarded-For ("X-Forwarded-For (Squid)")
755 | ├─Forwarded ("Forwarded")
756 | ├─REMOTE_ADDR ("REMOTE_ADDR (标准)")
757 | └─…其他
758 | ```
759 |
760 | 也可以看看:
761 | - [NGINX Reverse Proxy](https://docs.nginx.com/nginx/admin-guide/web-server/reverse-proxy/)
762 | - [Squid configuration directive forwarded_for](http://www.squid-cache.org/Doc/config/forwarded_for/)
763 | - [Forwarded - HTTP \| MDN](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Forwarded)
764 |
765 | ##### “delete_on_sight” `[bool]`
766 | - 激活的这个指令将指示脚本马上删除任何扫描文件上传匹配任何检测标准,是否通过签名或任何事其他。文件已确定是清洁将会忽略。如果是存档,全存档将会删除,不管如果违规文件是只有一个的几个文件包含在存档。为文件上传扫描,按说,它不必要为您激活这个指令,因为按说,PHP将自动清洗内容的它的缓存当执行是完,意思它将按说删除任何文件上传从它向服务器如果不已移动,复制或删除。这个指令是添加这里为额外安全为任何人谁的PHP副本可能不始终表现在预期方式。False【假/负】:之后扫描,忽略文件【标准】,True【真/正】:之后扫描,如果不清洁,马上删除。
767 |
768 | ##### “lang” `[string]`
769 | - 指定标准phpMussel语言。
770 |
771 | ```
772 | lang
773 | ├─af ("Afrikaans")
774 | ├─ar ("العربية")
775 | ├─bg ("Български")
776 | ├─bn ("বাংলা")
777 | ├─bs ("Bosanski")
778 | ├─ca ("Català")
779 | ├─cs ("Čeština")
780 | ├─de ("Deutsch")
781 | ├─en ("English (AU/GB/NZ)")
782 | ├─en-CA ("English (CA)")
783 | ├─en-US ("English (US)")
784 | ├─es ("Español")
785 | ├─fa ("فارسی")
786 | ├─fr ("Français (FR)")
787 | ├─fr-CA ("Français (CA)")
788 | ├─gl ("Galego")
789 | ├─gu ("ગુજરાતી")
790 | ├─he ("עברית")
791 | ├─hi ("हिंदी")
792 | ├─hr ("Hrvatski")
793 | ├─id ("Bahasa Indonesia")
794 | ├─it ("Italiano")
795 | ├─ja ("日本語")
796 | ├─ko ("한국어")
797 | ├─lv ("Latviešu")
798 | ├─ml ("മലയാളം")
799 | ├─mr ("मराठी")
800 | ├─ms ("Bahasa Melayu")
801 | ├─nl ("Nederlandse")
802 | ├─no ("Norsk")
803 | ├─pa ("ਪੰਜਾਬੀ")
804 | ├─pl ("Polski")
805 | ├─pt-BR ("Português (Brasil)")
806 | ├─pt-PT ("Português (Europeu)")
807 | ├─ro ("Română")
808 | ├─ru ("Русский")
809 | ├─sv ("Svenska")
810 | ├─sr ("Српски")
811 | ├─ta ("தமிழ்")
812 | ├─th ("ภาษาไทย")
813 | ├─tr ("Türkçe")
814 | ├─uk ("Українська")
815 | ├─ur ("اردو")
816 | ├─vi ("Tiếng Việt")
817 | ├─zh-Hans ("中文(简体)")
818 | └─zh-Hant ("中文(傳統)")
819 | ```
820 |
821 | ##### “lang_override” `[bool]`
822 | - 尽可能根据HTTP_ACCEPT_LANGUAGE进行本地化?True(真)=进行本地化【标准】;False(假)=不要本地化。
823 |
824 | ##### “scan_cache_expiry” `[int]`
825 | - 多长时间应该phpMussel维持扫描结果?数值是秒数为维持扫描结果。标准是21600秒(6小时); 一个`0`数值将停止维持扫描结果。
826 |
827 | ##### “maintenance_mode” `[bool]`
828 | - 启用维护模式?True(真)=关闭;False(假)=不关闭【标准】。它停用一切以外前端。有时候在更新CMS,框架,等时有用。
829 |
830 | ##### “statistics” `[bool]`
831 | - 跟踪phpMussel使用情况统计?True(真)=跟踪;False(假)=不跟踪【标准】。
832 |
833 | ##### “hide_version” `[bool]`
834 | - 从日志和页面输出中隐藏版本信息吗?True(真)=关闭;False(假)=不关闭【标准】。
835 |
836 | ##### “disabled_channels” `[string]`
837 | - 这可用于防止phpMussel在发送请求时使用特定通道。
838 |
839 | ```
840 | disabled_channels
841 | ├─GitHub ("GitHub")
842 | ├─BitBucket ("BitBucket")
843 | ├─VirusTotal_HTTPS ("VirusTotal (HTTPS)")
844 | └─VirusTotal_HTTP ("VirusTotal (HTTP)")
845 | ```
846 |
847 | ##### “request_proxy” `[string]`
848 | - 如果您希望通过代理发送出站请求,请在此处指定该代理。如果您不想这,请将此处留空。
849 |
850 | ##### “request_proxyauth” `[string]`
851 | - 如果通过代理发送出站请求并且该代理需要用户名和密码,请在此处指定该用户名和密码(例如,`user:pass`)。如果您不想这,请将此处留空。
852 |
853 | ##### “default_timeout” `[int]`
854 | - 用于外部请求的默认超时? 标准 = 12秒。
855 |
856 | #### “signatures” (类别)
857 | 签名,签名文件,等的配置。
858 |
859 | ##### “active” `[string]`
860 | - 活性签名文件的列表,以逗号分隔。注意:首先必须安装签名文件,然后才能激活它们。为了使测试文件正常工作,必须安装并激活签名文件。
861 |
862 | ##### “fail_silently” `[bool]`
863 | - phpMussel应该报告当签名文件是失踪或损坏吗?如果`fail_silently`是关闭,失踪和损坏文件将会报告当扫描,和如果`fail_silently`是激活,失踪和损坏文件将会忽略,有扫描报告为那些文件哪里没有问题。这个应该按说被留下除非您遇到失败或有其他类似问题。False(假)=是关闭;True(真)=是激活【默认】。
864 |
865 | ##### “fail_extensions_silently” `[bool]`
866 | - phpMussel应该报告当扩展是失踪吗?如果`fail_extensions_silently`是关闭,失踪扩展将会报告当扫描,和如果`fail_extensions_silently`是激活,失踪扩展将会忽略,有扫描报告为那些文件哪里没有任何问题。关闭的这个指令可能的可以增加您的安全,但可能还导致一个增加的假阳性。False(假)=是关闭;True(真)=是激活【默认】。
867 |
868 | ##### “detect_adware” `[bool]`
869 | - phpMussel应该使用签名为广告软件检测吗?False(假)=不检查,True(真)=检查【默认】。
870 |
871 | ##### “detect_joke_hoax” `[bool]`
872 | - phpMussel应该使用签名为病毒/恶意软件笑话/恶作剧检测吗?False(假)=不检查,True(真)=检查【默认】。
873 |
874 | ##### “detect_pua_pup” `[bool]`
875 | - phpMussel应该使用签名为PUP/PUA(可能无用/非通缉程序/软件)检测吗?False(假)=不检查,True(真)=检查【默认】。
876 |
877 | ##### “detect_packer_packed” `[bool]`
878 | - phpMussel应该使用签名为打包机和打包数据检测吗?False(假)=不检查,True(真)=检查【默认】。
879 |
880 | ##### “detect_shell” `[bool]`
881 | - phpMussel应该使用签名为webshell脚本检测吗?False(假)=不检查,True(真)=检查【默认】。
882 |
883 | ##### “detect_deface” `[bool]`
884 | - phpMussel应该使用签名为污损和污损软件检测吗?False(假)=不检查,True(真)=检查【默认】。
885 |
886 | ##### “detect_encryption” `[bool]`
887 | - phpMussel应该检测并阻止加密的文件吗?False(假)=不检查,True(真)=检查【默认】。
888 |
889 | ##### “heuristic_threshold” `[int]`
890 | - 有某些签名的phpMussel意味为确定可疑和可能恶意文件零件被上传有不在他们自己确定那些文件被上传特别是作为恶意。这个“threshold”数值告诉phpMussel什么是最大总重量的可疑和潜在恶意文件零件被上传允许之前那些文件是被识别作为恶意。定义的重量在这个上下文是总数值的可疑和可能恶意文件零件确定。作为默认,这个数值将会设置作为3。一个较低的值通常将结果在一个更高的发生的假阳性但一个更高的发生的恶意文件被确定,而一个更高的数值将通常结果在一个较低的发生的假阳性但一个较低的数值的恶意文件被确定。它是通常最好忽略这个数值除非您遇到关联问题。
891 |
892 | #### “files” (类别)
893 | 在扫描过程中如何处理文件。
894 |
895 | ##### “filesize_limit” `[string]`
896 | - 文件大小限在KB。65536 = 64MB【默认】,0 = 没有限(始终灰名单),任何正数值接受。这个可以有用当您的PHP配置限内存量一个进程可以占据或如果您的PHP配置限文件大小的上传。
897 |
898 | ##### “filesize_response” `[bool]`
899 | - 如何处理文件超过文件大小限(如果存在)。False(假)=白名单;True(真)=黑名单【默认】。
900 |
901 | ##### “filetype_whitelist” `[string]`
902 | - 白名单:
903 |
904 | __这是如何工作的。__ 如果您的系统只允许具体文件类型被上传,或如果您的系统明确地否认某些文件类型,指定那些文件类型在白名单,黑名单和灰名单可以增加扫描执行速度通过允许脚本跳过某些文件类型。格式是CSV(逗号分隔变量)。
__进程的逻辑顺序。__ 如果文件类型已白名单,不扫描和不受阻文件,和不匹配文件对照黑名单或灰名单。如果文件类型已黑名单,不扫描文件但阻止它无论如何,和不匹配文件对照灰名单。如果灰名单是空,或如果灰名单不空和文件类型已灰名单,扫描文件像正常和确定如果阻止它基于扫描结果,但如果灰名单不空和文件类型不灰名单,过程文件仿佛已黑名单,因此不扫描它但阻止它无论如何。
905 |
906 | ##### “filetype_blacklist” `[string]`
907 | - 黑名单:
908 |
909 | __这是如何工作的。__ 如果您的系统只允许具体文件类型被上传,或如果您的系统明确地否认某些文件类型,指定那些文件类型在白名单,黑名单和灰名单可以增加扫描执行速度通过允许脚本跳过某些文件类型。格式是CSV(逗号分隔变量)。
__进程的逻辑顺序。__ 如果文件类型已白名单,不扫描和不受阻文件,和不匹配文件对照黑名单或灰名单。如果文件类型已黑名单,不扫描文件但阻止它无论如何,和不匹配文件对照灰名单。如果灰名单是空,或如果灰名单不空和文件类型已灰名单,扫描文件像正常和确定如果阻止它基于扫描结果,但如果灰名单不空和文件类型不灰名单,过程文件仿佛已黑名单,因此不扫描它但阻止它无论如何。
910 |
911 | ##### “filetype_greylist” `[string]`
912 | - 灰名单:
913 |
914 | __这是如何工作的。__ 如果您的系统只允许具体文件类型被上传,或如果您的系统明确地否认某些文件类型,指定那些文件类型在白名单,黑名单和灰名单可以增加扫描执行速度通过允许脚本跳过某些文件类型。格式是CSV(逗号分隔变量)。
__进程的逻辑顺序。__ 如果文件类型已白名单,不扫描和不受阻文件,和不匹配文件对照黑名单或灰名单。如果文件类型已黑名单,不扫描文件但阻止它无论如何,和不匹配文件对照灰名单。如果灰名单是空,或如果灰名单不空和文件类型已灰名单,扫描文件像正常和确定如果阻止它基于扫描结果,但如果灰名单不空和文件类型不灰名单,过程文件仿佛已黑名单,因此不扫描它但阻止它无论如何。
915 |
916 | ##### “check_archives” `[bool]`
917 | - 尝试匹配存档内容吗?False(假)=不匹配;True(真)=匹配【默认】。 已支持:Zip(需要libzip),Tar,Rar(需要rar扩展名)。
918 |
919 | ##### “filesize_archives” `[bool]`
920 | - 继承文件大小黑名单/白名单在存档内容吗?False(假)=不继承(刚灰名单一切);True(真)=继承【默认】。
921 |
922 | ##### “filetype_archives” `[bool]`
923 | - 继承文件类型黑名单/白名单在存档内容吗?False(假)=不继承(刚灰名单一切)【默认】;True(真)=继承。
924 |
925 | ##### “max_recursion” `[int]`
926 | - 最大存档递归深度限。标准=3。
927 |
928 | ##### “block_encrypted_archives” `[bool]`
929 | - 检测和受阻加密的存档吗?因为phpMussel是不能够扫描加密的存档内容,它是可能存档加密可能的可以使用通过一个攻击者作为一种手段尝试绕过phpMussel,杀毒扫描程序和其他这样的保护。指示phpMussel受阻任何存档它发现被加密可能的可以帮助减少任何风险有关联这些可能性。False(假)=不受阻;True(真)=受阻【默认】。
930 |
931 | ##### “max_files_in_archives” `[int]`
932 | - 在中止扫描之前从档案中扫描的最大文件数。标准=0(没有最大文件数)。
933 |
934 | ##### “chameleon_from_php” `[bool]`
935 | - 寻找PHP头在文件是不PHP文件也不认可存档文件。False(假)=是关闭;True(真)=是激活。
936 |
937 | ##### “can_contain_php_file_extensions” `[string]`
938 | - 允许包含PHP代码的文件扩展名列表,以逗号分隔。如果启用了PHP变色龙攻击检测,包含PHP代码的文件,其扩展名不在此列表中,将被检测为PHP变色龙攻击。
939 |
940 | ##### “chameleon_from_exe” `[bool]`
941 | - 寻找可执行头在文件是不可执行文件也不认可存档文件和寻找可执行文件谁的头是不正确。False(假)=是关闭;True(真)=是激活。
942 |
943 | ##### “chameleon_to_archive” `[bool]`
944 | - 检测在存档和压缩文件中的错误标头。已支持:BZ/BZIP2,GZ/GZIP,LZF,RAR,ZIP。False(假)=是关闭;True(真)=是激活。
945 |
946 | ##### “chameleon_to_doc” `[bool]`
947 | - 寻找办公文档谁的头是不正确(已支持:DOC,DOT,PPS,PPT,XLA,XLS,WIZ)。False(假)=是关闭;True(真)=是激活。
948 |
949 | ##### “chameleon_to_img” `[bool]`
950 | - 寻找图像谁的头是不正确(已支持:BMP,DIB,PNG,GIF,JPEG,JPG,XCF,PSD,PDD,WEBP)。False(假)=是关闭;True(真)=是激活。
951 |
952 | ##### “chameleon_to_pdf” `[bool]`
953 | - 寻找PDF文件谁的头是不正确。False(假)=是关闭;True(真)=是激活。
954 |
955 | ##### “archive_file_extensions” `[string]`
956 | - 认可存档文件扩展(格式是CSV;应该只添加或去掉当问题发生;不必要的去掉可能的可以导致假阳性出现为存档文件,而不必要的增加将实质上白名单任何事您增加从专用攻击检测;修改有慎重;还请注这个无影响在什么存档可以和不能被分析在内容级)。这个名单,作为是作为标准,名单那些格式使用最常见的横过多数的系统和CMS,但有意是不全面。
957 |
958 | ##### “block_control_characters” `[bool]`
959 | - 受阻任何文件包含任何控制字符吗(以外换行符)?如果您只上传纯文本,您可以激活这个指令以提供某些另外保护在您的系统。然而,如果您上传任何事以外纯文本,激活这个可能结果在假阳性。False(假)=不受阻【默认】;True(真)=受阻。
960 |
961 | ##### “corrupted_exe” `[bool]`
962 | - 损坏文件和处理错误。False(假)=忽略;True(真)=受阻【默认】。检测和受阻潜在的损坏移植可执行【PE】文件吗?时常(但不始终),当某些零件的一个移植可执行【PE】文件是损坏或不能被正确处理,它可以建议建议的一个病毒感染。过程使用通过最杀毒程序以检测病毒在PE文件需要处理那些文件在某些方式,哪里,如果程序员的一个病毒是意识的,将特别尝试防止,以允许他们的病毒留不检测。
963 |
964 | ##### “decode_threshold” `[string]`
965 | - 在原始数据中解码命令的长度限制(如果有任何引人注目性能问题当扫描)。 标准 = 512KB。零或空值将关闭门槛(去除任何这样的限基于文件大小)。
966 |
967 | ##### “scannable_threshold” `[string]`
968 | - 原始数据读取和扫描的最大长度(如果有任何引人注目性能问题当扫描)。 标准 = 32MB。 零或空值将关闭门槛。按说,这个数值应不会少于平均文件大小的文件上传您想和期待收到您的服务器或网站,应不会多于`filesize_limit`指令,和应不会多于大致五分之一的总允许内存分配获授PHP通过"php.ini"配置文件。这个指令存在为尝试防止phpMussel从用的太多内存(这个将防止它从能够顺利扫描文件以上的一个特别文件大小)。
969 |
970 | ##### “allow_leading_trailing_dots” `[bool]`
971 | - 允许文件名中的前导和尾随点吗?这有时可用于隐藏文件,或欺骗某些系统允许目录遍历。False(假)=不允许【默认】;True(真)=允许。
972 |
973 | ##### “block_macros” `[bool]`
974 | - 尝试阻止任何包含宏的文件吗?某些文档和电子表格类型可能包含可执行的宏,因此提供了危险的潜在恶意软件向量。False(假)=不阻止【默认】;True(真)=阻止。
975 |
976 | ##### “only_allow_images” `[bool]`
977 | - 设置为true时,扫描程序遇到的任何非图像文件将被立即标记,而不会被扫描。在某些情况下,这可能有助于减少完成扫描所需的时间。默认情况下设置为false。
978 |
979 | ##### “entropy_limit” `[float]`
980 | - 使用规范化数据的签名的熵限制(默认为7.7)。在此上下文中,熵被定义为被扫描文件内容的香农熵。当熵限制和熵文件大小限制都超出时,为了降低误报的风险,一些使用标准化数据的签名将被忽略。
981 |
982 | ##### “entropy_filesize_limit” `[string]`
983 | - 使用规范化数据的签名的熵文件大小限制(默认为256KB)。当熵限制和熵文件大小限制都超出时,为了降低误报的风险,一些使用标准化数据的签名将被忽略。
984 |
985 | #### “quarantine” (类别)
986 | 隔离配置。
987 |
988 | ##### “quarantine_key” `[string]`
989 | - phpMussel能够隔离被阻止的文件上传,如果这个是某物您想。普通用户的phpMussel简单地想保护他们的网站或宿主环境无任何兴趣在深深分析任何尝试文件上传应该离开这个功能关闭,但任何用户有兴趣在更深分析的尝试文件上传为目的恶意软件研究或为类似这样事情应该激活这个功能。检疫的尝试文件上传可以有时还助攻在调试假阳性,如果这个是某物经常发生为您。以关闭检疫功能,简单地离开`quarantine_key`指令空白,或抹去内容的这个指令如果它不已空白。以激活隔离功能,输入一些值在这个指令。`quarantine_key`是一个重要安全功能的隔离功能需要以预防检疫功能从成为利用通过潜在攻击者和以预防任何潜在执行的数据存储在检疫。`quarantine_key`应该被处理在同样方法作为您的密码:更长是更好,和紧紧保护它。为获得最佳效果,在结合使用`delete_on_sight`。
990 |
991 | ##### “quarantine_max_filesize” `[string]`
992 | - 最大允许文件大小为文件在检疫。文件大于这个指定数值将不成为检疫。这个指令是重要为使它更难为任何潜在攻击者洪水您的检疫用非通缉数据潜在的造成过度数据用法在您的虚拟主机服务。 标准 = 2MB。
993 |
994 | ##### “quarantine_max_usage” `[string]`
995 | - 最大内存使用允许为检疫。如果总内存已用通过隔离到达这个数值,最老检疫文件将会删除直到总内存已用不再到达这个数值。这个指令是重要为使它更难为任何潜在攻击者洪水您的检疫用非通缉数据潜在的造成过度数据用法在您的虚拟主机服务。 标准 = 64MB。
996 |
997 | ##### “quarantine_max_files” `[int]`
998 | - 隔离中可以存在的最大文件数量。新文件添加到隔离时,如果超过此数量,则旧文件将被删除,直到剩余的文件不再超过此数量。 标准 = 100。
999 |
1000 | #### “virustotal” (类别)
1001 | Virus Total整合的配置。
1002 |
1003 | ##### “vt_public_api_key” `[string]`
1004 | - 可选的,phpMussel可以扫描文件使用【Virus Total API】作为一个方法提供一个显着的改善保护级别针对病毒,木马,恶意软件和其他威胁。作为默认,扫描文件使用【Virus Total API】是关闭。以激活它,一个API密钥从VirusTotal是需要。因为的显着好处这个可以提供为您,它是某物我很推荐激活。请注意,然而,以使用的【Virus Total API】,您必须同意他们的服务条款和您必须坚持所有方针按照说明通过VirusTotal阅读材料!您是不允许使用这个积分功能除非:您已阅读和您同意服务条款的VirusTotal和它的API。您已阅读和您了解至少序言的VirusTotal公共API阅读材料(一切之后“VirusTotal Public API v2.0”但之前“Contents”)。
1005 |
1006 | 也可以看看:
1007 | - [Terms of Service](https://www.virustotal.com/en/about/terms-of-service/)
1008 | - [Getting started](https://developers.virustotal.com/reference)
1009 |
1010 | ##### “vt_suspicion_level” `[int]`
1011 | - 作为标准,phpMussel将限制什么文件它扫描通过使用【Virus Total API】为那些文件它考虑作为“可疑”。您可以可选调整这个局限性通过修改的`vt_suspicion_level`指令数值。
1012 |
1013 | ```
1014 | vt_suspicion_level
1015 | ├─0 (仅扫描具有启发式权重的文件。): 仅当文件产生启发式权重时才会扫描文件。启发式权重可能来自暗示感染但不能保证感染的签名。当怀疑有道理但没有得到证实时,查询可以作为第二意见。
1016 | ├─1 (扫描具启发式权重的文件、可执行文件、和可能包含可执行数据的文件。): 此类文件包括Windows PE文件、Linux
1017 | │ ELF文件、Mach-O文件、DOCX文件、ZIP文件、等等。
1018 | └─2 (扫描所有文件。)
1019 | ```
1020 |
1021 | ##### “vt_weighting” `[int]`
1022 | - phpMussel应使用扫描结果使用【Virus Total API】作为检测或作为检测重量吗?这个指令存在,因为,虽说扫描一个文件使用多AV引擎(例如怎么样VirusTotal做) 应结果有一个增加检测率(和因此在一个更恶意文件被抓),它可以还结果有更假阳性,和因此,为某些情况,扫描结果可能被更好使用作为一个置信得分而不是作为一个明确结论。如果一个数值的`0`是使用,扫描结果使用【Virus Total API】将会适用作为检测,和因此,如果任何AV引擎使用通过VirusTotal标志文件被扫描作为恶意,phpMussel将考虑文件作为恶意。如果任何其他数值是使用,扫描结果使用【Virus Total API】将会适用作为检测重量,和因此,数的AV引擎使用通过VirusTotal标志文件被扫描作为恶意将服务作为一个置信得分(或检测重量) 为如果文件被扫描应会考虑恶意通过phpMussel(数值使用将代表最低限度的置信得分或重量需要以被考虑恶意)。一个数值的`0`是使用作为标准。
1023 |
1024 | ##### “vt_quota_rate” `[int]`
1025 | - 根据【Virus Total API】阅读材料,它是限于最大的`4`请求的任何类型在任何`1`分钟大体时间。如果您经营一个“honeyclient”,蜜罐或任何其他自动化将会提供资源为VirusTotal和不只取回报告您是有权一个更高请求率配额。作为标准,phpMussel将严格的坚持这些限制,但因为可能性的这些率配额被增加,这些二指令是提供为您指示phpMussel为什么限它应坚持。除非您是指示这样做,它是不推荐为您增加这些数值,但,如果您遇到问题相关的到达您的率配额,减少这些数值可能有时帮助您解析这些问题。您的率限是决定作为`vt_quota_rate`请求的任何类型在任何`vt_quota_time`分钟大体时间。
1026 |
1027 | ##### “vt_quota_time” `[int]`
1028 | - (见上面的说明)。
1029 |
1030 | #### “urlscanner” (类别)
1031 | URL扫描程序的配置。
1032 |
1033 | ##### “google_api_key” `[string]`
1034 | - 激活Google Safe Browsing API当API密钥是设置。
1035 |
1036 | 也可以看看:
1037 | - [Google API Console](https://console.developers.google.com/)
1038 |
1039 | ##### “maximum_api_lookups” `[int]`
1040 | - 最大数值API请求来执行每个扫描迭代。额外API请求将增加的总要求完成时间每扫描迭代,所以,您可能想来规定一个限以加快全扫描过程。当设置`0`,没有最大数值将会应用的。设置`10`作为默认。
1041 |
1042 | ##### “maximum_api_lookups_response” `[bool]`
1043 | - 该什么办如果最大数值API请求已超过?False(假)=没做任何事(继续处理)【默认】;True(真)=标志/受阻文件。
1044 |
1045 | ##### “cache_time” `[int]`
1046 | - 多长时间(以秒为单位)应API结果被缓存?标准是3600秒(1小时)。
1047 |
1048 | #### “legal” (类别)
1049 | 法律要求的配置。
1050 |
1051 | ##### “pseudonymise_ip_addresses” `[bool]`
1052 | - 编写日志文件时使用假名的IP地址吗?True(真)=使用假名【标准】;False(假)=不使用假名。
1053 |
1054 | ##### “privacy_policy” `[string]`
1055 | - 要显示在任何生成的页面的页脚中的相关隐私政策的地址。指定一个URL,或留空以禁用。
1056 |
1057 | #### “supplementary_cache_options” (类别)
1058 | 补充缓存选项。注意:更改这些值可能会使您注销。
1059 |
1060 | ##### “prefix” `[string]`
1061 | - 该值将附加到所有缓存条目的键的开头。 标准 = “phpMussel_”。当同一服务器上存在多个安装时,这对于将它们的缓存彼此分开非常有用。
1062 |
1063 | ##### “enable_apcu” `[bool]`
1064 | - 指定是否尝试使用APCu进行缓存。 标准 = True。
1065 |
1066 | ##### “enable_memcached” `[bool]`
1067 | - 指定是否尝试使用Memcached进行缓存。 标准 = False。
1068 |
1069 | ##### “enable_redis” `[bool]`
1070 | - 指定是否尝试使用Redis进行缓存。 标准 = False。
1071 |
1072 | ##### “enable_pdo” `[bool]`
1073 | - 指定是否尝试使用PDO进行缓存。 标准 = False。
1074 |
1075 | ##### “memcached_host” `[string]`
1076 | - Memcached 主机值。 标准 = localhost。
1077 |
1078 | ##### “memcached_port” `[int]`
1079 | - Memcached 端口值。 标准 = “11211”。
1080 |
1081 | ##### “redis_host” `[string]`
1082 | - Redis 主机值。 标准 = localhost。
1083 |
1084 | ##### “redis_port” `[int]`
1085 | - Redis 端口值。 标准 = “6379”。
1086 |
1087 | ##### “redis_timeout” `[float]`
1088 | - Redis 超时值。 标准 = “2.5”。
1089 |
1090 | ##### “redis_database_number” `[int]`
1091 | - Redis 数据库编号。 标准 = “0”。 注意:不能在 Redis Cluster 中使用 0 以外的值。
1092 |
1093 | ##### “pdo_dsn” `[string]`
1094 | - PDO DSN值。 标准 = “mysql:dbname=phpmussel;host=localhost;port=3306”。
1095 |
1096 | __常问问题。__ *“PDO DSN”是什么?如何能PDO与phpMussel一起使用?*
1097 |
1098 | ##### “pdo_username” `[string]`
1099 | - PDO 用户名。
1100 |
1101 | ##### “pdo_password” `[string]`
1102 | - PDO 密码。
1103 |
1104 | #### “frontend” (类别)
1105 | 前端的配置。
1106 |
1107 | ##### “frontend_log” `[string]`
1108 | - 前端登录尝试的录音文件。指定一个文件名,或留空以禁用。
1109 |
1110 | 有用提示:您可以使用时间格式占位符将日期/时间信息附加到日志文件的名称。可用的时间格式占位符显示在`core➡time_format`处。
1111 |
1112 | ##### “max_login_attempts” `[int]`
1113 | - 最大前端登录尝试次数。 标准 = 5。
1114 |
1115 | ##### “numbers” `[string]`
1116 | - 您如何喜欢显示数字?选择最适合示例。
1117 |
1118 | ```
1119 | numbers
1120 | ├─Arabic-1 ("١٢٣٤٥٦٧٫٨٩")
1121 | ├─Arabic-2 ("١٬٢٣٤٬٥٦٧٫٨٩")
1122 | ├─Arabic-3 ("۱٬۲۳۴٬۵۶۷٫۸۹")
1123 | ├─Arabic-4 ("۱۲٬۳۴٬۵۶۷٫۸۹")
1124 | ├─Armenian ("Ճ̅Ի̅Գ̅ՏՇԿԷ")
1125 | ├─Base-12 ("4b6547.a8")
1126 | ├─Base-16 ("12d687.e3")
1127 | ├─Bengali-1 ("১২,৩৪,৫৬৭.৮৯")
1128 | ├─Burmese-1 ("၁၂၃၄၅၆၇.၈၉")
1129 | ├─China-1 ("123,4567.89")
1130 | ├─Chinese-Simplified ("一百二十三万四千五百六十七点八九")
1131 | ├─Chinese-Simplified-Financial ("壹佰贰拾叁萬肆仟伍佰陆拾柒点捌玖")
1132 | ├─Chinese-Traditional ("一百二十三萬四千五百六十七點八九")
1133 | ├─Chinese-Traditional-Financial ("壹佰貳拾叄萬肆仟伍佰陸拾柒點捌玖")
1134 | ├─Fullwidth ("1234567.89")
1135 | ├─Geez ("፻፳፫፼፵፭፻፷፯")
1136 | ├─Hebrew ("א׳׳ב׳קג׳יד׳ךסז")
1137 | ├─India-1 ("12,34,567.89")
1138 | ├─India-2 ("१२,३४,५६७.८९")
1139 | ├─India-3 ("૧૨,૩૪,૫૬૭.૮૯")
1140 | ├─India-4 ("੧੨,੩੪,੫੬੭.੮੯")
1141 | ├─India-5 ("೧೨,೩೪,೫೬೭.೮೯")
1142 | ├─India-6 ("౧౨,౩౪,౫౬౭.౮౯")
1143 | ├─Japanese ("百万二十万三万四千五百六十七・八九分")
1144 | ├─Javanese ("꧑꧒꧓꧔꧕꧖꧗.꧘꧙")
1145 | ├─Khmer-1 ("១.២៣៤.៥៦៧,៨៩")
1146 | ├─Lao-1 ("໑໒໓໔໕໖໗.໘໙")
1147 | ├─Latin-1 ("1,234,567.89")
1148 | ├─Latin-2 ("1 234 567.89")
1149 | ├─Latin-3 ("1.234.567,89")
1150 | ├─Latin-4 ("1 234 567,89")
1151 | ├─Latin-5 ("1,234,567·89")
1152 | ├─Mayan ("𝋧𝋮𝋦𝋨𝋧.𝋱𝋰")
1153 | ├─Mongolian ("᠑᠒᠓᠔᠕᠖᠗.᠘᠙")
1154 | ├─NoSep-1 ("1234567.89")
1155 | ├─NoSep-2 ("1234567,89")
1156 | ├─Odia ("୧୨୩୪୫୬୭.୮୯")
1157 | ├─Roman ("M̅C̅C̅X̅X̅X̅I̅V̅DLXVII")
1158 | ├─SDN-Dwiggins ("4E6,547;X8")
1159 | ├─SDN-Pitman ("4↋6,547;↊8")
1160 | ├─Tamil ("௲௲௨௱௲௩௰௲௪௲௫௱௬௰௭")
1161 | ├─Thai-1 ("๑,๒๓๔,๕๖๗.๘๙")
1162 | ├─Thai-2 ("๑๒๓๔๕๖๗.๘๙")
1163 | └─Tibetan ("༡༢༣༤༥༦༧.༨༩")
1164 | ```
1165 |
1166 | ##### “default_algo” `[string]`
1167 | - 定义要用于所有未来密码和会话的算法。
1168 |
1169 | ```
1170 | default_algo
1171 | ├─PASSWORD_DEFAULT ("PASSWORD_DEFAULT")
1172 | ├─PASSWORD_BCRYPT ("PASSWORD_BCRYPT")
1173 | ├─PASSWORD_ARGON2I ("PASSWORD_ARGON2I")
1174 | └─PASSWORD_ARGON2ID ("PASSWORD_ARGON2ID (PHP >= 7.3.0)")
1175 | ```
1176 |
1177 | ##### “theme” `[string]`
1178 | - 用于前端的主题。
1179 |
1180 | ```
1181 | theme
1182 | ├─default ("Default")
1183 | ├─bluemetal ("Blue Metal")
1184 | ├─fullmoon ("Full Moon")
1185 | ├─moss ("Moss")
1186 | ├─primer ("Primer")
1187 | ├─primerdark ("Primer Dark")
1188 | ├─rbi ("Red-Blue Inverted")
1189 | ├─slate ("Slate")
1190 | └─…其他
1191 | ```
1192 |
1193 | ##### “theme_mode” `[string]`
1194 | - 用于前端的主题模式。
1195 |
1196 | ```
1197 | theme_mode
1198 | ├─normal ("普通的")
1199 | └─inverted ("倒置的")
1200 | ```
1201 |
1202 | ##### “magnification” `[float]`
1203 | - 字型放大。 标准 = 1。
1204 |
1205 | ##### “custom_header” `[string]`
1206 | - 在所有前端页面的开头作为HTML插入。如果您想在所有此类页面中包含网站徽标、个性化标题、脚本、或类似,这可能会很有用。
1207 |
1208 | ##### “custom_footer” `[string]`
1209 | - 在所有前端页面的末尾作为HTML插入。如果您想在所有此类页面中包含法律声明、联系链接、业务信息、或类似,这可能会很有用。
1210 |
1211 | #### “web” (类别)
1212 | 上传处理程序的配置。
1213 |
1214 | ##### “uploads_log” `[string]`
1215 | - 应该记录所有阻止的上传的位置。指定一个文件名,或留空以关闭。
1216 |
1217 | 有用提示:您可以使用时间格式占位符将日期/时间信息附加到日志文件的名称。可用的时间格式占位符显示在`core➡time_format`处。
1218 |
1219 | ##### “forbid_on_block” `[bool]`
1220 | - phpMussel应该发送`403`头随着文件上传受阻信息,或坚持标准`200 OK`?False(假)=发送`200`;True(真)=发送`403`【标准】。
1221 |
1222 | ##### “unsupported_media_type_header” `[bool]`
1223 | - 当上传因列入黑名单的文件类型而被阻止时,phpMussel是否应该发送415标头?如果为true(真),此设置将取代`forbid_on_block`。False(假)=不发送【标准】;True(真)=发送。
1224 |
1225 | ##### “max_uploads” `[int]`
1226 | - 最大允许数值的文件为扫描当文件上传扫描之前中止扫描和告诉用户他们是上传太多在同一时间!提供保护针对一个理论攻击哪里一个攻击者尝试DDoS您的系统或CMS通过超载phpMussel以减速PHP进程到一个停止。推荐:10。您可能想增加或减少这个数值,根据速度的您的硬件。注意这个数值不交待为或包括存档内容。
1227 |
1228 | ##### “ignore_upload_errors” `[bool]`
1229 | - 这个指令按说应会关闭除非它是需要为对功能的phpMussel在您的具体系统。按说,当是关闭,当phpMussel检测存在元素在`$_FILES`数组,它将尝试引发一个扫描的文件代表通过那些元素,和,如果他们是空或空白,phpMussel将回报一个错误信息。这个是正确行为为phpMussel。然而,为某些CMS,空元素在`$_FILES`可以发生因之的自然的行为的那些CMS,或错误可能会报告当没有任何,在这种情况,正常行为为phpMussel将会使干扰为正常行为的那些CMS。如果这样的一个情况发生为您,激活这个指令将指示phpMussel不尝试引发扫描为这样的空元素,忽略他们当发现和不回报任何关联错误信息,从而允许延续的页面请求。False(假)=不忽略;True(真)=忽略。
1230 |
1231 | ##### “theme” `[string]`
1232 | - 用于阻止事件的主题。
1233 |
1234 | ```
1235 | theme
1236 | ├─default ("Default")
1237 | ├─bluemetal ("Blue Metal")
1238 | ├─fullmoon ("Full Moon")
1239 | ├─moss ("Moss")
1240 | ├─primer ("Primer")
1241 | ├─primerdark ("Primer Dark")
1242 | ├─rbi ("Red-Blue Inverted")
1243 | ├─slate ("Slate")
1244 | └─…其他
1245 | ```
1246 |
1247 | ##### “theme_mode” `[string]`
1248 | - 用于阻止事件的主题模式。
1249 |
1250 | ```
1251 | theme_mode
1252 | ├─normal ("普通的")
1253 | └─inverted ("倒置的")
1254 | ```
1255 |
1256 | ##### “magnification” `[float]`
1257 | - 字型放大。标准 = 1。
1258 |
1259 | ##### “custom_header” `[string]`
1260 | - 在所有“上传是否认”页面的开头作为HTML插入。如果您想在所有此类页面中包含网站徽标、个性化标题、脚本、或类似,这可能会很有用。
1261 |
1262 | ##### “custom_footer” `[string]`
1263 | - 在所有“上传是否认”页面的末尾作为HTML插入。如果您想在所有此类页面中包含法律声明、联系链接、业务信息、或类似,这可能会很有用。
1264 |
1265 | #### “phpmailer” (类别)
1266 | PHPMailer的配置(用于双因素身份验证和电子邮件通知)。
1267 |
1268 | ##### “event_log” `[string]`
1269 | - 用于记录与PHPMailer相关的所有事件的文件。指定一个文件名,或留空以禁用。
1270 |
1271 | 有用提示:您可以使用时间格式占位符将日期/时间信息附加到日志文件的名称。可用的时间格式占位符显示在`core➡time_format`处。
1272 |
1273 | ##### “enable_two_factor” `[bool]`
1274 | - 该指令确定是否将2FA用于前端帐户。
1275 |
1276 | ##### “enable_notifications” `[string]`
1277 | - 如果要在阻止上传时通过电子邮件收到通知,请在此处指定收件人电子邮件地址。
1278 |
1279 | ##### “skip_auth_process” `[bool]`
1280 | - 将此指令设置为`true`会指示PHPMailer跳过通过SMTP发送电子邮件时通常会发生的正常身份验证过程。应该避免这种情况,因为跳过此过程可能会将出站电子邮件暴露给MITM攻击,但在此过程阻止PHPMailer连接到SMTP服务器的情况下可能是必要的。
1281 |
1282 | ##### “host” `[string]`
1283 | - 用于出站电子邮件的SMTP主机。
1284 |
1285 | ##### “port” `[int]`
1286 | - 用于出站电子邮件的端口号。标准=587。
1287 |
1288 | ##### “smtp_secure” `[string]`
1289 | - 通过SMTP发送电子邮件时使用的协议(TLS或SSL)。
1290 |
1291 | ```
1292 | smtp_secure
1293 | ├─default ("-")
1294 | ├─tls ("TLS")
1295 | └─ssl ("SSL")
1296 | ```
1297 |
1298 | ##### “smtp_auth” `[bool]`
1299 | - 此指令确定是否对SMTP会话进行身份验证(通常应该保持不变)。
1300 |
1301 | ##### “username” `[string]`
1302 | - 通过SMTP发送电子邮件时使用的用户名。
1303 |
1304 | ##### “password” `[string]`
1305 | - 通过SMTP发送电子邮件时使用的密码。
1306 |
1307 | ##### “set_from_address” `[string]`
1308 | - 通过SMTP发送电子邮件时引用的发件人地址。
1309 |
1310 | ##### “set_from_name” `[string]`
1311 | - 通过SMTP发送电子邮件时引用的发件人姓名。
1312 |
1313 | ##### “add_reply_to_address” `[string]`
1314 | - 通过SMTP发送电子邮件时引用的回复地址。
1315 |
1316 | ##### “add_reply_to_name” `[string]`
1317 | - 通过SMTP发送电子邮件时引用的回复姓名。
1318 |
1319 | ---
1320 |
1321 |
1322 | ### 6. 签名格式
1323 |
1324 | *也可以看看:*
1325 | - *[什么是“签名”?](#user-content-WHAT_IS_A_SIGNATURE)*
1326 |
1327 | phpMussel签名文件前9个字节(`[x0-x8]`)是`phpMussel`。它作为一个“魔术数字”【magic number】,将其标识为签名文件(这有助于防止phpMussel意外地尝试使用文件不是签名文件)。下一个字节`[x9]`标识签名文件的类型。这一点必须知道以便能够正确解释签名文件。以下类型的签名文件被认可:
1328 |
1329 | 类型 | 字节 | 说明
1330 | ---|---|---
1331 | `General_Command_Detections` | `0?` | 为CSV(逗号分隔值)签名文件。值(签名)是在文件中查找的十六进制编码字符串。这里的签名没有任何名称或其他详细信息(只有要检测的字符串)。
1332 | `Filename` | `1?` | 为文件名签名。
1333 | `Hash` | `2?` | 为哈希签名。
1334 | `Standard` | `3?` | 为与文件内容直接工作的签名文件。
1335 | `Standard_RegEx` | `4?` | 为与文件内容直接工作的签名文件。签名可以包含正则表达式。
1336 | `Normalised` | `5?` | 为用于ANSI标准化文件内容的签名文件。
1337 | `Normalised_RegEx` | `6?` | 为用于ANSI标准化文件内容的签名文件。签名可以包含正则表达式。
1338 | `HTML` | `7?` | 为用于HTML标准化文件内容的签名文件。
1339 | `HTML_RegEx` | `8?` | 为用于HTML标准化文件内容的签名文件。签名可以包含正则表达式。
1340 | `PE_Extended` | `9?` | 为使用PE元数据的签名文件(但不PE部分元数据)。
1341 | `PE_Sectional` | `A?` | 为使用PE部分元数据的签名文件。
1342 | `Complex_Extended` | `B?` | 为使用各种规则的签名文件,基于由phpMussel生成的扩展元数据。
1343 | `URL_Scanner` | `C?` | 为使用URL的签名文件。
1344 |
1345 | 下一个字节`[x10]`是一个换行符`[0A]`,并结束phpMussel签名文件头。
1346 |
1347 | 之后的每个非空行都是签名或规则。每个签名或规则占用一行。支持的签名格式如下所述。
1348 |
1349 | #### *文件名签名*
1350 | 所有文件名签名跟随格式:
1351 |
1352 | `NAME:FNRX`
1353 |
1354 | `NAME`是名援引为签名和`FNRX`是正则表达式匹配文件名(未编码)为。
1355 |
1356 | #### *哈希签名*
1357 | 所有哈希签名跟随格式:
1358 |
1359 | `HASH:FILESIZE:NAME`
1360 |
1361 | `HASH`是全文件的哈希(通常是MD5),`FILESIZE`是总文件大小和`NAME`是名援引为签名。
1362 |
1363 | #### *移植可执行【PE】部分签名*
1364 | 所有移植可执行【PE】部分签名跟随格式:
1365 |
1366 | `SIZE:HASH:NAME`
1367 |
1368 | `HASH`是一个MD5哈希的一个部分的一个移植可执行【PE】文件,`SIZE`是总大小的该部分和`NAME`是名援引为签名。
1369 |
1370 | #### *移植可执行【PE】扩展签名*
1371 | 所有移植可执行【PE】扩展签名跟随格式:
1372 |
1373 | `$VAR:HASH:SIZE:NAME`
1374 |
1375 | `$VAR`是移植可执行【PE】变量名匹配为,`HASH`是一个MD5哈希的该变量,`SIZE`是总大小的该变量和`NAME`是名援引为签名。
1376 |
1377 | #### *复杂扩展签名*
1378 | 复杂扩展签名是宁不同从其他可能phpMussel签名类型,在某种意义上说,什么他们匹配针对是指定通过这些签名他们自己和他们可以匹配针对多重标准。多重标准是分隔通过【;】和匹配类型和匹配数据的每多重标准是分隔通过【:】以确保格式为这些签名往往看起来有点像:
1379 |
1380 | `$变量1:某些数据;$变量2:某些数据;签名等等`
1381 |
1382 | #### *一切其他*
1383 | 所有其他签名跟随格式:
1384 |
1385 | `NAME:HEX:FROM:TO`
1386 |
1387 | `NAME`是名援引为签名和`HEX`是一个十六进制编码分割的文件意味被匹配通过有关签名。`FROM`和`TO`是可选参数,说明从哪里和向哪里在源数据匹配针对。
1388 |
1389 | #### *正则表达式/REGEX*
1390 | 任何形式的正则表达式了解和正确地处理通过PHP应还会正确地了解和处理通过phpMussel和它的签名。然而,我将建议采取极端谨慎当写作新正则表达式为基础的签名,因为,如果您不完全肯定什么您被做,可以有很不规则和/或意外结果。看一眼的phpMussel源代码如果您不完全肯定的上下文其中正则表达式语句被处理。还,记得,所有语句(除外为文件名,存档元数据和MD5语句)必须是十六进制编码(和除外为语句句法,还,当然)!
1391 |
1392 | ---
1393 |
1394 |
1395 | ### 7. 已知的兼容问题
1396 |
1397 | #### 杀毒软件兼容性
1398 |
1399 | 有时phpMussel和其他防病毒解决方案之间存在兼容性问题。因此,大约每隔几个月,我对照Virus Total检查了最新版本的phpMussel代码库,为了看那里是否报告了任何问题。报告了问题时,我会在文档中在此处列出报告的问题。
1400 |
1401 | 当我最近检查(2022年5月12日)时,没有任何问题的报告。
1402 |
1403 | 我不检查签名文件,文档或其他外围内容。当其他防病毒解决方案检测到签名文件时,它们总是会引起一些误报(假阳性)。因此,我强烈建议,如果您打算在已经存在另一种防病毒解决方案的计算机上安装phpMussel,将phpMussel签名文件列入白名单。
1404 |
1405 | *也可以看看:[兼容性图表](https://maikuolan.github.io/Compatibility-Charts/)。*
1406 |
1407 | ---
1408 |
1409 |
1410 | ### 8. 常见问题(FAQ)
1411 |
1412 | - [什么是“签名”?](#user-content-WHAT_IS_A_SIGNATURE)
1413 | - [什么是“假阳性”?](#user-content-WHAT_IS_A_FALSE_POSITIVE)
1414 | - [什么是签名更新频率?](#user-content-SIGNATURE_UPDATE_FREQUENCY)
1415 | - [我在使用phpMussel时遇到问题和我不知道该怎么办!请帮忙!](#user-content-ENCOUNTERED_PROBLEM_WHAT_TO_DO)
1416 | - [我想使用phpMussel v3与早于7.2.0的PHP版本;您能帮我吗?](#user-content-MINIMUM_PHP_VERSION_V3)
1417 | - [我可以使用单个phpMussel安装来保护多个域吗?](#user-content-PROTECT_MULTIPLE_DOMAINS)
1418 | - [我不想浪费时间安装这个和确保它在我的网站上功能正常;我可以雇用您这样做吗?](#user-content-PAY_YOU_TO_DO_IT)
1419 | - [我可以聘请您或这个项目的任何开发者私人工作吗?](#user-content-HIRE_FOR_PRIVATE_WORK)
1420 | - [我需要专家修改,的定制,等等;您能帮我吗?](#user-content-SPECIALIST_MODIFICATIONS)
1421 | - [我是开发人员,网站设计师,或程序员。我可以接受还是提供与这个项目有关的工作?](#user-content-ACCEPT_OR_OFFER_WORK)
1422 | - [我想为这个项目做出贡献;我可以这样做吗?](#user-content-WANT_TO_CONTRIBUTE)
1423 | - [扫描时如何访问文件的具体细节?](#user-content-SCAN_DEBUGGING)
1424 | - [黑名单 – 白名单 – 灰名单 – 他们是什么,我如何使用它们?](#user-content-BLACK_WHITE_GREY)
1425 | - [“PDO DSN”是什么?如何能PDO与phpMussel一起使用?](#user-content-HOW_TO_USE_PDO)
1426 | - [我的上传工具是异步的(例如,使用ajax,ajaj,json,等等)。当上传阻止时,我看不到任何特殊消息或警告。发生了什么?](#user-content-AJAX_AJAJ_JSON)
1427 | - [phpMussel可以检测EICAR吗?](#user-content-DETECT_EICAR)
1428 |
1429 | #### 什么是“签名”?
1430 |
1431 | 在phpMussel的上下文中,“签名”是用于识别我们正在寻找的特定内容的数据,它通常采取一些非常小,不同,无害的一些更大和有害的东西的形式(例如,它可以识别病毒,木马,等等)。也可以是文件校验和,哈希或其他类似的标识符。通常包括一个标签和一些其他数据,以帮助提供额外的上下文,可以由phpMussel使用它来确定遇到我们正在寻找的最佳方法。
1432 |
1433 | #### 什么是“假阳性”?
1434 |
1435 | 术语“假阳性”(*或者:“假阳性错误”;“虚惊”*;英语:*false positive*; *false positive error*; *false alarm*),很简单地描述,和在一个广义上下文,被用来当测试一个因子,作为参考的测试结果,当结果是阳性(即:因子被确定为“阳性”,或“真”),但预计将为(或者应该是)阴性(即:因子,在现实中,是“阴性”,或“假”)。一个“假阳性”可被认为是同样的“哭狼” (其中,因子被测试是是否有狼靠近牛群,因子是“假”由于该有没有狼靠近牛群,和因子是报告为“阳性”由牧羊人通过叫喊“狼,狼”),或类似在医学检测情况,当患者被诊断有一些疾病,当在现实中,他们没有疾病。
1436 |
1437 | 一些相关术语是“真阳性”,“真阴性”和“假阴性”。一个“真阳性”指的是当测试结果和真实因子状态都是“真”(或“阳性”),和一个“真阴性”指的是当测试结果和真实因子状态都是“假”(或“阴性”);一个“真阳性”或“真阴性”被认为是一个“正确的推理”。对立面“假阳性”是一个“假阴性”;一个“假阴性”指的是当测试结果是“阴性”(即:因子被确定为“阴性”,或“假”),但预计将为(或者应该是)阳性(即:因子,在现实中,是“阳性”,或“真”)。
1438 |
1439 | 在phpMussel的上下文,这些术语指的是phpMussel的签名和他们阻止的文件。当phpMussel阻止一个文件由于恶劣的,过时的,或不正确的签名,但不应该这样做,或当它这样做为错误的原因,我们将此事件作为一个“假阳性”。当phpMussel未能阻止文件该应该已被阻止,由于不可预见的威胁,缺少签名或不足签名,我们将此事件作为一个“检测错过”(同样的“假阴性”)。
1440 |
1441 | 这可以通过下表来概括:
1442 |
1443 | | phpMussel不应该阻止文件 | phpMussel应该阻止文件
1444 | ---|---|---
1445 | phpMussel不会阻止文件 | 真阴性(正确的推理) | 检测错过(同样的“假阴性”)
1446 | phpMussel会阻止文件 | __假阳性__ | 真阳性(正确的推理)
1447 |
1448 | #### 什么是签名更新频率?
1449 |
1450 | 更新频率根据相关的签名文件而有所不同。所有的phpMussel签名文件的维护者通常尽量保持他们的签名为最新,但是因为我们所有人都有各种其他承诺,和因为我们的生活超越了项目,和因为我们不得到经济补偿/付款为我们的项目的努力,无法保证精确的更新时间表。通常,签名被更新每当有足够的时间。帮助总是感谢,如果你愿意提供任何。
1451 |
1452 | #### 我在使用phpMussel时遇到问题和我不知道该怎么办!请帮忙!
1453 |
1454 | - 您使用软件的最新版本吗?您使用签名文件的最新版本吗?如果这两个问题的答案是不,尝试首先更新一切,然后检查问题是否仍然存在。如果它仍然存在,继续阅读。
1455 | - 您检查过所有的文档吗?如果没有做,请这样做。如果文档不能解决问题,继续阅读。
1456 | - 您检查过[issues页面](https://github.com/phpMussel/phpMussel/issues)吗?检查是否已经提到了问题。如果已经提到了,请检查是否提供了任何建议,想法或解决方案。按照需要尝试解决问题。
1457 | - 如果问题仍然存在,请通过在issues页面上创建新issue寻求帮助。
1458 |
1459 | #### 我想使用phpMussel v3与早于7.2.0的PHP版本;您能帮我吗?
1460 |
1461 | 不能。PHP≥7.2是phpMussel v3的最低要求。
1462 |
1463 | *也可以看看:[兼容性图表](https://maikuolan.github.io/Compatibility-Charts/)。*
1464 |
1465 | #### 我可以使用单个phpMussel安装来保护多个域吗?
1466 |
1467 | 可以。
1468 |
1469 | #### 我不想浪费时间安装这个和确保它在我的网站上功能正常;我可以雇用您这样做吗?
1470 |
1471 | 也许。这是根据具体情况考虑的。告诉我们您需要什么,您提供什么,和我们会告诉您是否可以帮忙。
1472 |
1473 | #### 我可以聘请您或这个项目的任何开发者私人工作吗?
1474 |
1475 | *参考上面。*
1476 |
1477 | #### 我需要专家修改,的定制,等等;您能帮我吗?
1478 |
1479 | *参考上面。*
1480 |
1481 | #### 我是开发人员,网站设计师,或程序员。我可以接受还是提供与这个项目有关的工作?
1482 |
1483 | 您可以。我们的许可证并不禁止这一点。
1484 |
1485 | #### 我想为这个项目做出贡献;我可以这样做吗?
1486 |
1487 | 您可以。对项目的贡献是欢迎。有关详细信息,请参阅“CONTRIBUTING.md”。
1488 |
1489 | #### 扫描时如何访问文件的具体细节?
1490 |
1491 | 在启动扫描之前,请分配一个数组以用于此目的。
1492 |
1493 | 在下面的例子中,`$Foo` 是分配以用于此目的。扫描 `/文件/路径/...` 后,关于 `/文件/路径/...` 所包含的文件的信息将包含在 `$Foo` 中。
1494 |
1495 | ```PHP
1496 | setScanDebugArray($Foo);
1501 |
1502 | $Results = $Scanner->scan('/文件/路径/...');
1503 |
1504 | var_dump($Foo);
1505 | ```
1506 |
1507 | 数组是多维的。元素表示扫描的每个文件。子元素表示这些文件的详细信息。子要素如下:
1508 |
1509 | - Filename (`string`)
1510 | - FromCache (`bool`)
1511 | - Depth (`int`)
1512 | - Size (`int`)
1513 | - MD5 (`string`)
1514 | - SHA1 (`string`)
1515 | - SHA256 (`string`)
1516 | - CRC32B (`string`)
1517 | - 2CC (`string`)
1518 | - 4CC (`string`)
1519 | - ScanPhase (`string`)
1520 | - Container (`string`)
1521 | - † FileSwitch (`string`)
1522 | - † Is_ELF (`bool`)
1523 | - † Is_Graphics (`bool`)
1524 | - † Is_HTML (`bool`)
1525 | - † Is_Email (`bool`)
1526 | - † Is_MachO (`bool`)
1527 | - † Is_PDF (`bool`)
1528 | - † Is_SWF (`bool`)
1529 | - † Is_PE (`bool`)
1530 | - † Is_Not_HTML (`bool`)
1531 | - † Is_Not_PHP (`bool`)
1532 | - ‡ NumOfSections (`int`)
1533 | - ‡ PEFileDescription (`string`)
1534 | - ‡ PEFileVersion (`string`)
1535 | - ‡ PEProductName (`string`)
1536 | - ‡ PEProductVersion (`string`)
1537 | - ‡ PECopyright (`string`)
1538 | - ‡ PEOriginalFilename (`string`)
1539 | - ‡ PECompanyName (`string`)
1540 | - Results (`int`)
1541 | - Output (`string`)
1542 |
1543 | *† - 在缓存结果中没有提供 (仅在新的扫描结果中提供)。*
1544 |
1545 | *‡ - 仅在扫描PE文件时提供。*
1546 |
1547 | 如果您想,可以通过使用以下命令来破坏此数组:
1548 |
1549 | ```PHP
1550 | $Scanner->destroyScanDebugArray($Foo);
1551 | ```
1552 |
1553 | #### 黑名单 – 白名单 – 灰名单 – 他们是什么,我如何使用它们?
1554 |
1555 | 这些术语在不同的上下文中表达不同的含义。在phpMussel中,有三个使用这些术语的上下文:文件大小响应,文件类型响应,和签名灰名单。
1556 |
1557 | 为了以最低的处理成本达到理想的效果,phpMussel在实际扫描文件之前可以检查一些简单的事情,如文件的大小,名称和扩展名。例如;如果文件太大,或者其扩展名表示在我们的网站上我们不想要的文件类型,我们可以立即标记文件,并且不需要扫描它。
1558 |
1559 | 文件大小响应是phpMussel在文件超出指定限制时响应的方式。没有涉及实际列表,但根据文件的大小,文件可能会在黑名单,白名单或灰名单中被有效考虑了。存在两种不同的可选配置指令来分别指定限制和期望的响应。
1560 |
1561 | 文件类型响应是phpMussel在文件扩展名时响应的方式。存在三种不同的可选配置指令,用于明确指定哪些扩展应在黑名单,白名单和灰名单中位于。如果文件的扩展名分别与指定的扩展名匹配,则可以在黑名单,白名单或灰名单中该文件有效地考虑了。
1562 |
1563 | 在这两种上下文中,在白名单上意味着它不应该被扫描或标记;在黑名单上意味着它应该被标记(因此不需要扫描它);和在灰名单上意味着需要进一步的分析来确定是否我们应该标记它(即,它应该被扫描)。
1564 |
1565 | 签名灰名单是基本上应该忽略的签名列表(这在文档中已经简要地提到了)。当灰名单上的签名被触发时,phpMussel继续通过其签名工作,并且对于在灰名单上的签名不要采取任何特殊行动。没有签名黑名单,因为隐含的行为无论和触发签名的正常的行为是一样的,并且没有签名白名单,因为考虑到phpMussel的正常的工作方式以及它的已有的功能,隐含的行为不会有意义。
1566 |
1567 | 如果您需要解决由特定签名造成的问题,并且不想禁用或卸载整个签名文件,则签名灰名单很有用。
1568 |
1569 | #### “PDO DSN”是什么?如何能PDO与phpMussel一起使用?
1570 |
1571 | “PDO” 是 “[PHP Data Objects](https://www.php.net/manual/zh/intro.pdo.php)” 的首字母缩写(它的意思是“PHP数据对象”)。它为PHP提供了一个接口,使其能够连接到各种PHP应用程序通常使用的某些数据库系统。
1572 |
1573 | “DSN” 是 “[data source name](https://en.wikipedia.org/wiki/Data_source_name)” 的首字母缩写(它的意思是“数据源名称”)。“PDO DSN”向PDO描述了它应如何连接到数据库。
1574 |
1575 | phpMussel可以将PDO用于缓存。为了使其正常工作,您需要相应地配置phpMussel,从而启用PDO,需要为phpMussel创建一个新数据库以供使用(如果您尚未想到要供phpMussel使用的数据库),并需要按照以下结构在数据库中创建一个新表。
1576 |
1577 | 当数据库连接成功时,但是必要的表不存在,表自动创建将尝试。但是,此行为尚未经过广泛测试,因此无法保证成功。
1578 |
1579 | 当然,这仅在您确实希望phpMussel使用PDO时适用。如果您对phpMussel使用平面文件缓存(按照其标准配置)或提供的任何其他各种缓存选项感到足够满意,则无需费心设置数据库,数据库表,等等。
1580 |
1581 | 下面描述的结构使用“phpmussel”作为其数据库名称,但是您可以使用任何想要的数据库名称,只要在DSN配置中名称被复制。
1582 |
1583 | ```
1584 | ╔══════════════════════════════════════════════╗
1585 | ║ DATABASE "phpmussel" ║
1586 | ║ │╔═══════════════════════════════════════════╩═════╗
1587 | ║ └╫─TABLE "Cache" (UTF-8) ║
1588 | ║ ╠═╪═FIELD══CHARSET═DATATYPE═════KEY══NULL═DEFAULT═╣
1589 | ║ ║ ├─"Key"──UTF-8───VARCHAR(128)─PRI──×────× ║
1590 | ║ ║ ├─"Data"─UTF-8───TEXT─────────×────×────× ║
1591 | ╚══╣ └─"Time"─×───────INT(>=10)────×────×────× ║
1592 | ╚═════════════════════════════════════════════════╝
1593 | ```
1594 |
1595 | phpMussel的`pdo_dsn`应配置如下。
1596 |
1597 | ```
1598 | 取决于所使用的数据库驱动程序......
1599 | ├─4d (警告:实验性,未经测试,不建议!)
1600 | │ │
1601 | │ │ ╔═══════╗
1602 | │ └─4D:host=localhost;charset=UTF-8
1603 | │ ╚╤══════╝
1604 | │ └要查找数据库的主机。
1605 | ├─cubrid
1606 | │ │
1607 | │ │ ╔═══════╗ ╔═══╗ ╔═════╗
1608 | │ └─cubrid:host=localhost;port=33000;dbname=example
1609 | │ ╚╤══════╝ ╚╤══╝ ╚╤════╝
1610 | │ │ │ └要使用的数据库的名称。
1611 | │ │ │
1612 | │ │ └连接的主机端口号。
1613 | │ │
1614 | │ └要查找数据库的主机。
1615 | ├─dblib
1616 | │ │
1617 | │ │ ╔═══╗ ╔═══════╗ ╔═════╗
1618 | │ └─dblib:host=localhost;dbname=example
1619 | │ ╚╤══╝ ╚╤══════╝ ╚╤════╝
1620 | │ │ │ └要使用的数据库的名称。
1621 | │ │ │
1622 | │ │ └要查找数据库的主机。
1623 | │ │
1624 | │ └可能的值: “mssql”, “sybase”, “dblib”。
1625 | ├─firebird
1626 | │ │
1627 | │ │ ╔═══════════════════╗
1628 | │ └─firebird:dbname=/path/to/database.fdb
1629 | │ ╚╤══════════════════╝
1630 | │ ├可以是本地数据库文件的路径。
1631 | │ │
1632 | │ ├可以连接主机和端口号。
1633 | │ │
1634 | │ └如果要使用此功能,请参阅Firebird文档。
1635 | ├─ibm
1636 | │ │
1637 | │ │ ╔═════╗
1638 | │ └─ibm:DSN=example
1639 | │ ╚╤════╝
1640 | │ └要连接的在目录中数据库。
1641 | ├─informix
1642 | │ │
1643 | │ │ ╔═════╗
1644 | │ └─informix:DSN=example
1645 | │ ╚╤════╝
1646 | │ └要连接的在目录中数据库。
1647 | ├─mysql (最推荐!)
1648 | │ │
1649 | │ │ ╔═════╗ ╔═══════╗ ╔══╗
1650 | │ └─mysql:dbname=example;host=localhost;port=3306
1651 | │ ╚╤════╝ ╚╤══════╝ ╚╤═╝
1652 | │ │ │ └连接的主机端口号。
1653 | │ │ │
1654 | │ │ └要查找数据库的主机。
1655 | │ │
1656 | │ └要使用的数据库的名称。
1657 | ├─oci
1658 | │ │
1659 | │ │ ╔═════╗
1660 | │ └─oci:dbname=example
1661 | │ ╚╤════╝
1662 | │ ├可以参考特定的在目录中数据库。
1663 | │ │
1664 | │ ├可以连接主机和端口号。
1665 | │ │
1666 | │ └如果要使用此功能,请参阅Oracle文档。
1667 | ├─odbc
1668 | │ │
1669 | │ │ ╔═════╗
1670 | │ └─odbc:example
1671 | │ ╚╤════╝
1672 | │ ├可以参考特定的在目录中数据库。
1673 | │ │
1674 | │ ├可以连接主机和端口号。
1675 | │ │
1676 | │ └如果要使用此功能,请参阅ODBC/DB2文档。
1677 | ├─pgsql
1678 | │ │
1679 | │ │ ╔═══════╗ ╔══╗ ╔═════╗
1680 | │ └─pgsql:host=localhost;port=5432;dbname=example
1681 | │ ╚╤══════╝ ╚╤═╝ ╚╤════╝
1682 | │ │ │ └要使用的数据库的名称。
1683 | │ │ │
1684 | │ │ └连接的主机端口号。
1685 | │ │
1686 | │ └要查找数据库的主机。
1687 | ├─sqlite
1688 | │ │
1689 | │ │ ╔════════╗
1690 | │ └─sqlite:example.db
1691 | │ ╚╤═══════╝
1692 | │ └要使用的本地数据库文件的路径。
1693 | └─sqlsrv
1694 | │
1695 | │ ╔═══════╗ ╔══╗ ╔═════╗
1696 | └─sqlsrv:Server=localhost,1521;Database=example
1697 | ╚╤══════╝ ╚╤═╝ ╚╤════╝
1698 | │ │ └要使用的数据库的名称。
1699 | │ │
1700 | │ └连接的主机端口号。
1701 | │
1702 | └要查找数据库的主机。
1703 | ```
1704 |
1705 | 如果不确定如何构造DSN,请尝试先查看它是否按原样工作,而不进行任何更改。
1706 |
1707 | 请注意, `pdo_username` 和 `pdo_password` 应与您为数据库选择的用户名和密码相同。
1708 |
1709 | #### 我的上传工具是异步的(例如,使用ajax,ajaj,json,等等)。当上传阻止时,我看不到任何特殊消息或警告。发生了什么?
1710 |
1711 | 这很正常。phpMussel的标准“上传是否认”页面作为HTML。对于典型的同步请求应该足够了,但是如果您的上传工具需要一些不同的东西,可能还不够。如果您的上传工具是异步的,或者希望异步提供上传状态,为了使phpMussel能够满足您的上传工具的需求,您可以尝试做一些事情。
1712 |
1713 | 1. 创建自定义输出模板以提供HTML以外的东西。
1714 | 2. 创建自定义插件以完全绕过标准的“上传是否认”页面并在上传被阻止时让上传处理程序执行其他操作(上传处理程序提供了一些插件挂钩,可能有用)。
1715 | 3. 完全禁用上传处理程序,而是只从您的上传工具中调用phpMussel API。
1716 |
1717 | #### phpMussel可以检测EICAR吗?
1718 |
1719 | 可以。用于检测EICAR的签名包含在“phpMussel标准正则表达式签名文件”中(`phpmussel_regex.db`)。只要安装并激活了该签名文件,phpMussel就应该能够检测到EICAR。由于ClamAV数据库还包含许多专门用于检测EICAR的签名,因此ClamAV可以轻松检测EICAR,但是由于phpMussel仅利用了ClamAV提供的全部签名中的一部分,因此它们本身可能不足以使phpMussel检测EICAR。检测它的能力还可能取决于您的确切配置。
1720 |
1721 | ---
1722 |
1723 |
1724 | ### 9. 法律信息
1725 |
1726 | #### 9.0 章节前言
1727 |
1728 | 本文档章节描述了有关该软件包的使用和实施的可能法律考虑事项,并提供一些基本的相关信息。这对于一些用户来说可能很重要,作为确保遵守其运营所在国家可能存在的任何法律要求的一种手段。一些用户可能需要根据这些信息调整他们的网站政策。
1729 |
1730 | 首先,请认识到我(软件包作者)不是律师或合格的法律专业人员。因此,我无法提供法律建议。此外,在某些情况下,不同国家和地区的具体法律要求可能会有所不同。这些不同的法律要求有时可能会相互矛盾(例如:支持[隐私权](https://zh.wikipedia.org/wiki/%E9%9A%90%E7%A7%81%E6%9D%83)和[被遺忘權](https://zh.wikipedia.org/wiki/%E8%A2%AB%E9%81%BA%E5%BF%98%E6%AC%8A)的国家,与支持扩展数据保留的国家相比)。还要考虑到对软件包的访问不限于特定的国家或辖区,因此,软件包用户群很可能在地理上多样化。这些观点认为,我无法说明在所有方面对所有用户“符合法律”意味着什么。不过,我希望这里的信息能够帮助您自己决定您必须做些什么为了在软件包的上下文中符合法律。如果您对此处的信息有任何疑问或担忧,或者您需要从法律角度提供更多帮助和建议,我会建议咨询合格的法律专业人员。
1731 |
1732 | #### 9.1 法律责任
1733 |
1734 | 此软件包不提供任何担保(这已由包许可证提及)。这包括(但不限于)所有责任范围。为了您的方便,该软件包已提供给您。希望它会有用,它会为你带来一些好处。但是,使用或实施该软件包是您自己的选择。您不是被迫使用或实施该软件包,但是当您这样做时,您需要对该决定负责。我,和其他软件包贡献者,对于您的决定的后果不承担法律责任,无论是直接的,间接的,暗示的,还是其他方式。
1735 |
1736 | #### 9.2 第三方
1737 |
1738 | 取决于其确切的配置和实施,在某些情况下,该软件包可能与第三方进行通信和共享信息。在某些情况下,某些辖区可能会将此信息定义为“[个人身份信息](https://zh.wikipedia.org/wiki/%E5%80%8B%E4%BA%BA%E5%8F%AF%E8%AD%98%E5%88%A5%E8%B3%87%E8%A8%8A)”(PII)。
1739 |
1740 | 这些信息如何被这些第三方使用,是受这些第三方制定的各种政策的约束,并且超出了本文档的范围。但是,在所有这些情况下,与这些第三方共享信息可能被禁用。在所有这些情况下,如果您选择启用它,则有责任研究您可能遇到的任何问题(如果您担心这些第三方的隐私,安全,和PII使用情况)。如果存在任何疑问,或者您对PII方面的这些第三方的行为不满意,最好禁用与这些第三方分享的所有信息。
1741 |
1742 | 为了透明的目的,共享信息的类型,以及与谁共享,如下所述。
1743 |
1744 | ##### 9.2.1 URL扫描程序
1745 |
1746 | 上文件上传中找到的URL可能会与Google安全浏览API共享,取决于软件包的具体配置方式。Google安全浏览API的使用需要API密钥,因此默认情况下是禁用。
1747 |
1748 | *相关配置指令:*
1749 | - `urlscanner` -> `google_api_key`
1750 |
1751 | ##### 9.2.2 VIRUS TOTAL
1752 |
1753 | 当phpMussel扫描文件上传时,这些文件的哈希值可能会与Virus Total API共享,具体取决于软件包的配置方式。有计划在未来的某个时候能够共享整个文件,但目前该软件包不支持该功能。Virus Total API的使用需要API密钥,因此默认情况下是禁用。
1754 |
1755 | 与Virus Total共享的信息(包括文件和相关文件元数据)也可能与其合作伙伴,关联公司以及其他各方共享用于研究目的。这在他们的隐私政策中有更详细的描述。
1756 |
1757 | *看到: [Privacy Policy – VirusTotal](https://support.virustotal.com/hc/en-us/articles/115002168385-Privacy-Policy).*
1758 |
1759 | *相关配置指令:*
1760 | - `virustotal` -> `vt_public_api_key`
1761 |
1762 | #### 9.3 日志记录
1763 |
1764 | 由于多种原因,日志记录是phpMussel的重要组成部分。当没有日志记录时,可能难以诊断和假阳性,可能很难确定phpMussel在某些情况下的表现如何,而且可能很难确定其不足之处,以及可能需要更改哪些配置或签名,以使其继续按预期运行。无论如何,一些用户可能不想要记录,并且它仍然是完全可选的。在phpMussel中,默认情况下日志记录是禁用。要启用它,必须相应地配置phpMussel。
1765 |
1766 | 另外,如果日志记录在法律上是允许的,并且在法律允许的范围内(例如,可记录的信息类型,多长时间,在什么情况下),可以变化,具体取决于管辖区域和phpMussel的实施上下文(例如,如果您是个人或公司实体经营,如果您在商业或非商业基础上运营,等等)。因此,仔细阅读本节可能对您有用。
1767 |
1768 | phpMussel可以执行多种类型的日志记录。不同类型的日志记录涉及不同类型的信息,出于各种原因。
1769 |
1770 | ##### 9.3.0 扫描日志
1771 |
1772 | 当在程序包配置中启用时,phpMussel保存文件扫描日志。此类日志记录有两种不同的格式:
1773 | - 人类可读的日志文件。
1774 | - 序列化日志文件。
1775 |
1776 | 人类可读日志文件的条目通常看起来像这样(作为示例):
1777 |
1778 | ```
1779 | Sun, 19 Jul 2020 13:33:31 +0800 开始。
1780 | → 正在检查“ascii_standard_testfile.txt”。
1781 | ─→ 检测phpMussel-Testfile.ASCII.Standard(ascii_standard_testfile.txt)!
1782 | Sun, 19 Jul 2020 13:33:31 +0800 完了。
1783 | ```
1784 |
1785 | 扫描日志条目通常包括以下信息:
1786 | - 扫描文件的日期和时间。
1787 | - 扫描的文件的名称。
1788 | - 文件中检测到的内容(如果检测到任何内容)。
1789 |
1790 | *相关配置指令:*
1791 | - `general` -> `scan_log`
1792 | - `general` -> `scan_log_serialized`
1793 |
1794 | 当这些指令保留为空时,此类日志记录将保持禁用状态。
1795 |
1796 | ##### 9.3.1 上传日志
1797 |
1798 | 在程序包配置中启用时,phpMussel会保留已阻止的上传日志。
1799 |
1800 | *日志条目示例:*
1801 |
1802 | ```
1803 | 日期: Sun, 19 Jul 2020 13:33:31 +0800
1804 | IP地址: 127.0.0.x
1805 | == 扫描结果(为什么标记) ==
1806 | 检测phpMussel-Testfile.ASCII.Standard(ascii_standard_testfile.txt)!
1807 | == 哈希签名重建 ==
1808 | dcacac499064454218823fbabff7e09b5b011c0c877ee6f215f35bffb195b6e9:654:ascii_standard_testfile.txt
1809 | 隔离为“1595142388-2e017ea9ac1478e45dc15794a1fc18c0.qfu”。
1810 | ```
1811 |
1812 | 这些日志条目通常包括以下信息:
1813 | - 上传被阻止的日期和时间。
1814 | - 上传源自的IP地址。
1815 | - 文件被阻止的原因(检测到的内容)。
1816 | - 被阻止文件的名称。
1817 | - 被阻止文件的大小和校验和。
1818 | - 是否文件被隔离,以及内部名称是什么。
1819 |
1820 | *相关配置指令:*
1821 | - `web` -> `uploads_log`
1822 |
1823 | ##### 9.3.2 前端日志记录
1824 |
1825 | 此类日志记录涉及前端登录尝试,仅在用户尝试登录前端时才会发生(假设启用了前端访问)。
1826 |
1827 | 前端日志条目包含尝试登录的用户的IP地址,尝试发生的日期和时间以及的结果(登录成功或失败)。前端日志条目通常看起来像这样(作为示例):
1828 |
1829 | ```
1830 | x.x.x.x - Day, dd Mon 20xx hh:ii:ss +0000 - "admin" - 已登录。
1831 | ```
1832 |
1833 | *相关配置指令:*
1834 | - `general` -> `frontend_log`
1835 |
1836 | ##### 9.3.3 日志轮换
1837 |
1838 | 您可能希望在一段时间后清除日志,或者可能被要求依法执行(即,您在法律上允许保留日志的时间可能受法律限制)。您可以通过在程序包配置指定的日志文件名中包含日期/时间标记(例如,`{yyyy}-{mm}-{dd}.log`),然后启用日志轮换来实现此目的(日志轮换允许您在超出指定限制时对日志文件执行某些操作)。
1839 |
1840 | 例如:如果法律要求我在30天后删除日志,我可以在我的日志文件的名称中指定`{dd}.log`(`{dd}`代表天),将`log_rotation_limit`的值设置为30,并将`log_rotation_action`的值设置为`Delete`。
1841 |
1842 | 相反,如果您需要长时间保留日志,你可以选择完全不使用日志轮换,或者你可以将`log_rotation_action`的值设置为`Archive`,以压缩日志文件,从而减少它们占用的磁盘空间总量。
1843 |
1844 | *相关配置指令:*
1845 | - `general` -> `log_rotation_limit`
1846 | - `general` -> `log_rotation_action`
1847 |
1848 | ##### 9.3.4 日志截断
1849 |
1850 | 如果这是您想要做的事情,也可以在超过特定大小时截断个别日志文件。
1851 |
1852 | *相关配置指令:*
1853 | - `general` -> `truncate`
1854 |
1855 | ##### 9.3.5 IP地址“PSEUDONYMISATION”
1856 |
1857 | 首先,如果您不熟悉这个术语,“pseudonymisation”是指处理个人数据,使其不能在没有补充信息的情况下被识别为属于任何特定的“数据主体”,并规定这些补充信息分开保存,采取技术和组织措施以确保个人数据不能被识别给任何自然人。
1858 |
1859 | 以下资源可以帮助更详细地解释它:
1860 | - [[trust-hub.com] What is pseudonymisation?](https://www.trust-hub.com/news/what-is-pseudonymisation/)
1861 | - [[Wikipedia] Pseudonymization](https://en.wikipedia.org/wiki/Pseudonymization)
1862 |
1863 | 在某些情况下,您可能在法律上要求对收集,处理,或存储的任何PII进行“pseudonymise”或“anonymise”。虽然这个概念已经存在了相当长的一段时间,但GDPR/DSGVO提到,并特别鼓励“pseudonymisation”。
1864 |
1865 | 当记录它们时,phpMussel可以对IP地址进行pseudonymise,如果这是您想做的事情。当这个情况发生时,IPv4地址的最后八位字节,以及IPv6地址的第二部分之后的所有内容,将由“x”表示(有效地将IPv4地址四舍五入到它的第24个子网因素的初始地址,和将IPv6地址四舍五入到它的第32个子网因素的初始地址)。
1866 |
1867 | *相关配置指令:*
1868 | - `legal` -> `pseudonymise_ip_addresses`
1869 |
1870 | ##### 9.3.6 统计
1871 |
1872 | phpMussel可选择跟踪统计信息,例如自特定时间以来扫描和阻止的文件总数。默认情况下此功能是禁用,但可以通过程序包配置启用此功能。所跟踪的信息类型不应视为PII。
1873 |
1874 | *相关配置指令:*
1875 | - `general` -> `statistics`
1876 |
1877 | ##### 9.3.7 加密
1878 |
1879 | phpMussel不[加密](https://zh.wikipedia.org/wiki/%E5%8A%A0%E5%AF%86)其缓存或任何日志信息。可能会在将来引入缓存和日志加密,但目前没有任何具体的计划。如果您担心未经授权的第三方获取可能包含PII或敏感信息(如缓存或日志)的phpMussel部分的访问权限,我建议不要将phpMussel安装在可公开访问的位置(例如,在标准`public_html`或等效目录之外【可用于大多数标准网络服务器】安装phpMussel),也我建议对安装目录强制执行适当的限制权限。如果这还不足以解决您的疑虑,应该配置phpMussel为不会首先收集或记录引起您关注的信息类型(例如,通过禁用日志记录)。
1880 |
1881 | #### 9.4 COOKIE
1882 |
1883 | 当用户成功登录前端时,phpMussel设置cookie以便能够在后续请求中的记住用户(即,cookie用于向登录会话验证用户身份)。在登录页面上,cookie警告显着显示,警告用户如果他们参与相关操作将设置cookie。 Cookie不会在代码库中的任何其他位置设置。
1884 |
1885 | #### 9.5 市场营销和广告
1886 |
1887 | phpMussel不收集或处理任何信息用于营销或广告目的,既不销售也不从任何收集或记录的信息中获利。phpMussel不是商业企业,也不涉及任何商业利益,因此做这些事情没有任何意义。自项目开始以来就一直如此,今天仍然如此。此外,做这些事情会对整个项目的精神和预期目的产生反作用,并且只要我继续维护项目,永远不会发生。
1888 |
1889 | #### 9.6 隐私政策
1890 |
1891 | 在某些情况下,您可能需要依法在您网站的所有页面和部分上清楚地显示您的隐私政策链接。这可能为了确保用户充分了解您的隐私惯例,收集的个人身份信息类型以及您打算如何使用它的是很重要。为了能够在phpMussel的“上传是否认”页面上包含这样的链接,提供了配置指令来指定隐私策略的URL。
1892 |
1893 | *相关配置指令:*
1894 | - `legal` -> `privacy_policy`
1895 |
1896 | #### 9.7 GDPR/DSGVO
1897 |
1898 | “通用数据保护条例”(GDPR)是欧盟法规,自2018年5月25日起生效。该法规的主要目标是向欧盟公民和居民提供有关其个人数据的控制权,并统一欧盟内有关隐私和个人数据的法规。
1899 |
1900 | 该法规包含有关处理任何欧盟“数据主体”(任何已识别或可识别的自然人)的“[个人身份信息](https://zh.wikipedia.org/wiki/%E5%80%8B%E4%BA%BA%E5%8F%AF%E8%AD%98%E5%88%A5%E8%B3%87%E8%A8%8A)”(PII)的具体规定。为了符合条例,“企业”(按照法规的定义),和任何相关的系统和流程必须默认实现“隐私设计”,必须使用尽可能高的隐私设置,必须对任何存储或处理的信息实施必要的保护措施(数据的 pseudonymisation 或完整 anonymisation ),必须明确无误地声明他们收集的数据类型,他们如何处理数据,出于何种原因,他们保留多长时间,以及他们是否与任何第三方分享这些数据,与第三方共享的数据类型,为什么,等等。
1901 |
1902 | 只有按照条例有合法依据才能处理数据。一般而言,这意味着为了在合法基础上处理数据主体的数据,必须遵守法律义务,或者仅在从数据主体获得明确,明智,明确的同意之后才进行处理。
1903 |
1904 | 因为条例的各个方面可能会及时演变,并为了避免过时信息的传播,从权威来源中学习可能会更好的,而不是简单地在包文档中包含相关信息(这个信息可能最终会过时)。
1905 |
1906 | 一些推荐的资源用于了解更多信息:
1907 | - [关于欧盟GDPR隐私合规,中国数字营销人不得不知的9大问题](http://www.adexchanger.cn/top_news/28813.html)
1908 | - [史上最严的隐私条例出台,2018年开始执行](https://zhuanlan.zhihu.com/p/20865602)
1909 | - [《欧盟数据保护条例》对中国企业的影响 —- 以阿里巴巴集团为例](https://spiegeler.com/%E3%80%8A%E6%AC%A7%E7%9B%9F%E6%95%B0%E6%8D%AE%E4%BF%9D%E6%8A%A4%E6%9D%A1%E4%BE%8B%E3%80%8B%E5%AF%B9%E4%B8%AD%E5%9B%BD%E4%BC%81%E4%B8%9A%E7%9A%84%E5%BD%B1%E5%93%8D-%E4%BB%A5%E9%98%BF%E9%87%8C/)
1910 | - [歐盟個人資料保護法 GDPR 即將上路!與電商賣家息息相關的 Google Analytics 資料保留政策,你瞭解了嗎?](https://shopline.hk/blog/google-analytics-gdpr/)
1911 | - [歐盟一般資料保護規範](https://zh.wikipedia.org/wiki/%E6%AD%90%E7%9B%9F%E4%B8%80%E8%88%AC%E8%B3%87%E6%96%99%E4%BF%9D%E8%AD%B7%E8%A6%8F%E7%AF%84)
1912 | - [REGULATION (EU) 2016/679 OF THE EUROPEAN PARLIAMENT AND OF THE COUNCIL](https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=celex:32016R0679)
1913 |
1914 | ---
1915 |
1916 |
1917 | 最后更新:2025年10月9日。
1918 |
--------------------------------------------------------------------------------
/readme.zh-Hant.md:
--------------------------------------------------------------------------------
1 | ## phpMussel v3 中文(傳統)文檔。
2 |
3 | ### 內容
4 | - 1. [前言](#user-content-SECTION1)
5 | - 2. [如何安裝](#user-content-SECTION2)
6 | - 3. [如何使用](#user-content-SECTION3)
7 | - 4. [擴展PHPMUSSEL](#user-content-SECTION4)
8 | - 5. [配置選項](#user-content-SECTION5)
9 | - 6. [簽名格式](#user-content-SECTION6)
10 | - 7. [已知的兼容問題](#user-content-SECTION7)
11 | - 8. [常見問題(FAQ)](#user-content-SECTION8)
12 | - 9. [法律信息](#user-content-SECTION9)
13 |
14 | *Regarding translations: My native language is English. Because this is a free and open-source hobby project which generates zero income, and translatable content is likely to change as the features and functionality supported by the project changes, it doesn't make sense for me to spend money for translations. Because I'm the sole author/developer/maintainer for the project and I'm not a ployglot, any translations I produce are very likely to contain errors. Sorry, but realistically, that won't ever change. If you find any such errors/typos/mistakes/etc, your assistance to correct them would be very much appreciated. Pull requests are invited and encouraged. Otherwise, if you find these errors too much to handle, just stick with the original English source. If a translation is irredeemably incomprehensible, let me know which, and I can delete it. If you're not sure how to perform pull requests, ask. I can help.*
15 |
16 | ---
17 |
18 |
19 | ### 1. 前言
20 |
21 | 感謝使用phpMussel,這是一個根據ClamAV的簽名和其他簽名在上傳完成後來自動檢測木馬/病毒/惡意軟件和其他可能威脅到您系統安全的檔案的PHP腳本。
22 |
23 | [PHPMUSSEL](https://phpmussel.github.io/) COPYRIGHT 2013 和走向未來 GNU/GPLv2 由 [Caleb M (Maikuolan)](https://github.com/Maikuolan)。
24 |
25 | 本腳本是基於GNU通用許可V2.0版許可協議發布的,您可以在許可協議的允許範圍內自行修改和發布,但請遵守GNU通用許可協議。使用腳本的過程中,作者不提供任何擔保和任何隱含擔保。更多的細節請參見GNU通用公共許可證,下的`LICENSE.txt`檔案也可從訪問:
26 | - 。
27 | - 。
28 |
29 | 謝謝[ClamAV](https://www.clamav.net/)為本腳本提供檔案簽名庫訪問許可。沒有它,這個腳本很可能不會存在,或者其價值有限。
30 |
31 | 謝謝GitHub和Bitbucket為項目託管,還有謝謝這些組織為提供一些簽名:[PhishTank](https://www.phishtank.com/),[NLNetLabs](https://nlnetlabs.nl/),[Malware.Expert](https://malware.expert/),等人。
32 |
33 | ---
34 |
35 |
36 | ### 2. 如何安裝
37 |
38 | #### 2.0 與COMPOSER安裝
39 |
40 | 推薦的安裝phpMussel v3的方法是通過Composer。
41 |
42 | 為了方便起見,您可以通過舊的主要phpMussel存儲庫安裝最常用的phpMussel依賴項:
43 |
44 | `composer require phpmussel/phpmussel`
45 |
46 | 作為備選,您可以單獨選擇所需的依賴項。您很可能只需要特定的依賴項,而不需要所有。
47 |
48 | 為了使用phpMussel做任何事情,您需要phpMussel核心代碼庫:
49 |
50 | `composer require phpmussel/core`
51 |
52 | 提供phpMussel的前端管理工具:
53 |
54 | `composer require phpmussel/frontend`
55 |
56 | 為您的網站提供自動檔案上傳掃描:
57 |
58 | `composer require phpmussel/web`
59 |
60 | 提供了將phpMussel用作交互式CLI模式應用:
61 |
62 | `composer require phpmussel/cli`
63 |
64 | 在phpMussel和PHPMailer之間建立橋樑,使phpMussel可以利用PHPMailer進行雙因素身份驗證,有關阻止的檔案上傳的電子郵件通知,等等:
65 |
66 | `composer require phpmussel/phpmailer`
67 |
68 | 為了使phpMussel能夠檢測到任何東西,您需要安裝簽名。沒有特定的程序包。要安裝簽名,請參閱本文檔的下一部分。
69 |
70 | 作為備選,如果您不想使用Composer,則可以從此處下載預打包的ZIP:
71 |
72 | https://github.com/phpMussel/Examples
73 |
74 | 預先打包的ZIP包含所有上述依賴關係,以及所有標準phpMussel簽名檔案,以及一些示例,這些示例說明瞭如何在實現中使用phpMussel。
75 |
76 | #### 2.1 安裝簽名
77 |
78 | phpMussel需要簽名來檢測特定的威脅。安裝簽名有二種主要方法:
79 |
80 | 1. 使用『SigTool』生成簽名並手動安裝。
81 | 2. 從『phpMussel/Signatures』或『phpMussel/Examples』下載簽名並手動安裝。
82 |
83 | ##### 2.1.0 使用『SigTool』生成簽名並手動安裝。
84 |
85 | *看到:[SigTool文檔](https://github.com/phpMussel/SigTool#documentation).*
86 |
87 | *另請注意:SigTool僅處理來自ClamAV的簽名。為了獲得其他來源的簽名(例如,專門為phpMussel編寫的簽名,其中包括檢測phpMussel的測試樣本所必需的簽名),此方法將需要通過此處提到的其他方法之一進行補充。*
88 |
89 | ##### 2.1.1 從『phpMussel/Signatures』或『phpMussel/Examples』下載簽名並手動安裝。
90 |
91 | 首先,去[phpMussel/Signatures](https://github.com/phpMussel/Signatures)。存儲庫包含各種GZ壓縮的簽名檔案。下載所需的檔案,解壓縮檔案,並將它們複製到安裝的簽名目錄。
92 |
93 | 作為備選,從[phpMussel/Examples](https://github.com/phpMussel/Examples)下載最新的ZIP。然後,您可以將簽名從該存檔複製/粘貼到您的安裝中。
94 |
95 | ---
96 |
97 |
98 | ### 3. 如何使用
99 |
100 | #### 3.0 配置PHPMUSSEL
101 |
102 | 安裝phpMussel之後,您將需要一個配置文件,以便對其進行配置。phpMussel配置文件可以格式化為INI或YML文件。如果您使用示例ZIP之一,則已經有兩個示例配置文件可用,`phpmussel.ini`和`phpmussel.yml`。您可以根據需要選擇其中一種,如果您想。如果您不是使用示例ZIP之一,則需要創建一個新文件。
103 |
104 | 如果您對phpMussel的標準配置感到滿意,並且不想更改任何內容,則可以使用一個空文件作為您的配置文件。只需設置要更改的值即可。其他所有內容都將使用默認值。
105 |
106 | 您可以從前端配置頁面配置所有內容,如果您想。但是,從v3開始,前端登錄信息將存儲在您的配置文件中。因此,要登錄到前端,您需要設置一個帳戶。然後,您可以使用它登錄並配置其他所有內容。
107 |
108 | 以下摘錄將使用使用者名稱『admin』和密碼『password』向前端添加一個新帳戶。
109 |
110 | 對於INI文件:
111 |
112 | ```INI
113 | [user.admin]
114 | password='$2y$10$FPF5Im9MELEvF5AYuuRMSO.QKoYVpsiu1YU9aDClgrU57XtLof/dK'
115 | permissions='1'
116 | ```
117 |
118 | 對於YML文件:
119 |
120 | ```YAML
121 | user.admin:
122 | password: "$2y$10$FPF5Im9MELEvF5AYuuRMSO.QKoYVpsiu1YU9aDClgrU57XtLof/dK"
123 | permissions: 1
124 | ```
125 |
126 | 您可以根據需要命名配置即可(只要保留其擴展名,以便phpMussel知道其使用的格式)。您可以將其存儲在任何位置中。您可以在實例化加載程序時通過提供其路徑來告訴phpMussel在哪裡找到您的配置文件。如果沒有提供路徑,phpMussel將嘗試在vendor目錄的父目錄中找到它。
127 |
128 | 在某些環境(例如Apache)中,甚至可以在配置的前面放置一個點以隱藏它並阻止公共訪問。
129 |
130 | 有關可用於phpMussel的各種配置指令的更多信息,請參閱本文檔的配置部分。
131 |
132 | #### 3.1 PHPMUSSEL CORE
133 |
134 | 無論您如何使用phpMussel,幾乎每個實施都至少包含以下內容:
135 |
136 | ```PHP
137 | scan();
184 | ```
185 |
186 | 可選地,phpMussel可以嘗試修復上傳的名稱,以防萬一出了問題,如果您想:
187 |
188 | ```PHP
189 | $Web->demojibakefier();
190 | ```
191 |
192 | 一個更完整的示例:
193 |
194 | ```PHP
195 | Events->addHandler('sendMail', new \phpMussel\PHPMailer\Linker($Loader));
206 |
207 | // Scans file uploads (execution terminates here if the scan finds anything).
208 | $Web->scan();
209 |
210 | // Fixes possible corrupted file upload names (Warning: modifies the content of $_FILES).
211 | $Web->demojibakefier();
212 |
213 | // Cleanup.
214 | unset($Web, $Scanner, $Loader);
215 |
216 | ?>
217 |
223 |
224 | ```
225 |
226 | *嘗試上傳文件`ascii_standard_testfile.txt`,僅出於測試phpMussel的目的而提供的良性樣本:*
227 |
228 | 
229 |
230 | #### 3.3 CLI模式
231 |
232 | 要實例化CLI處理程序:
233 |
234 | ```PHP
235 | $CLI = new \phpMussel\CLI\CLI($Loader, $Scanner);
236 | ```
237 |
238 | 一個更完整的示例:
239 |
240 | ```PHP
241 | Events->addHandler('sendMail', new \phpMussel\PHPMailer\Linker($Loader));
282 |
283 | // Scans file uploads (execution terminates here if the scan finds anything).
284 | $Web->scan();
285 |
286 | // Fixes possible corrupted file upload names (Warning: modifies the content of $_FILES).
287 | $Web->demojibakefier();
288 |
289 | // Load the front-end.
290 | $FrontEnd->view();
291 |
292 | // Cleanup.
293 | unset($Web, $FrontEnd, $Scanner, $Loader);
294 | ```
295 |
296 | *屏幕截圖:*
297 |
298 | 
299 |
300 | #### 3.5 掃描程序API
301 |
302 | 如果您想,還可以在其他程序和腳本中利用phpMussel掃描程序API。
303 |
304 | 一個更完整的示例:
305 |
306 | ```PHP
307 | // Path to vendor directory.
308 | $Vendor = __DIR__ . DIRECTORY_SEPARATOR . 'vendor';
309 |
310 | // Composer's autoloader.
311 | require $Vendor . DIRECTORY_SEPARATOR . 'autoload.php';
312 |
313 | // Location of the test files.
314 | $Samples = sprintf($Vendor . '%1$sphpmussel%1$score%1$stests%1$s_support%1$ssamples', DIRECTORY_SEPARATOR);
315 |
316 | $Loader = new \phpMussel\Core\Loader();
317 | $Scanner = new \phpMussel\Core\Scanner($Loader);
318 | $Loader->Events->addHandler('sendMail', new \phpMussel\PHPMailer\Linker($Loader));
319 |
320 | // Execute the scan.
321 | $Results = $Scanner->scan($Samples);
322 |
323 | // Cleanup.
324 | unset($Scanner, $Loader);
325 |
326 | var_dump($Results);
327 | ```
328 |
329 | 該示例要注意的重要部分是`scan()`方法。`scan()`方法接受兩個參數:
330 |
331 | ```PHP
332 | public function scan(mixed $Files, int $Format = 0): mixed
333 | ```
334 |
335 | 第一個參數可以是字符串或數組,並告訴掃描程序應掃描的內容。它可以是指示特定文件或目錄的字符串,也可以是此類字符串的數組以指定多個文件/目錄。
336 |
337 | 當為字符串時,它應指向可以在何處找到數據。當作為陣列時,陣列鍵應指示要掃描的項目的原始名稱,並且值應指向可以找到數據的位置。
338 |
339 | 第二個參數是整數,它告訴掃描程序應如何返回其掃描結果。
340 |
341 | 指定『1』以將掃描結果作為數組返回,每個元素將掃描項表示為整數。
342 |
343 | 這些整數具有以下含義:
344 |
345 | 結果 | 說明
346 | --:|:--
347 | -5 | 表明由於其他原因,掃描無法完成。
348 | -4 | 表明由於加密而無法掃描數據。
349 | -3 | 表明問題是遇到關於phpMussel簽名檔案。
350 | -2 | 表明損壞數據是檢測中掃描和因此掃描失敗完成。
351 | -1 | 表明擴展或插件需要通過PHP以經營掃描是失踪和因此掃描失敗完成。
352 | 0 | 表明掃描目標不存在和因此沒有任何事為掃描。
353 | 1 | 表明掃描目標是成功掃描和沒有任何問題檢測。
354 | 2 | 表明掃描目標是成功掃描和至少一些問題是檢測。
355 |
356 | 指定2以將掃描結果作為布爾值返回。
357 |
358 | 結果 | 說明
359 | :-:|:--
360 | `true` | 檢測到問題(掃描目標很危險)。
361 | `false` | 未檢測到問題(掃描目標可能是安全的)。
362 |
363 | 指定3以數組形式返回掃描結果,每個掃描項目的每個元素均包含人類可讀的文本。
364 |
365 | *示例輸出:*
366 |
367 | ```
368 | array(3) {
369 | ["dcacac499064454218823fbabff7e09b5b011c0c877ee6f215f35bffb195b6e9:654:ascii_standard_testfile.txt"]=>
370 | string(73) "Detected phpMussel-Testfile.ASCII.Standard (ascii_standard_testfile.txt)!"
371 | ["c845b950f38399ae7fe4b3107cab5b46ac7c3e184dddfec97d4d164c00cb584a:491:coex_testfile.rtf"]=>
372 | string(53) "Detected phpMussel-Testfile.CoEx (coex_testfile.rtf)!"
373 | ["d45d5d9df433aefeacaece6162b835e6474d6fcb707d24971322ec429707c58f:185:encrypted.zip"]=>
374 | string(77) "Detected encrypted archive; Encrypted archives not permitted (encrypted.zip)!"
375 | }
376 | ```
377 |
378 | 指定4以將掃描結果作為人類可讀文本字符串返回(像3,但內爆了)。
379 |
380 | *示例輸出:*
381 |
382 | ```
383 | Detected phpMussel-Testfile.ASCII.Standard (ascii_standard_testfile.txt)! Detected phpMussel-Testfile.CoEx (coex_testfile.rtf)! Detected encrypted archive; Encrypted archives not permitted (encrypted.zip)!
384 | ```
385 |
386 | 指定其他任何值以返回格式化的文本(即,使用CLI時看到的掃描結果)。
387 |
388 | *示例輸出:*
389 |
390 | ```
391 | string(1826) "Fri, 17 Jul 2020 18:50:47 +0800 Started.
392 | ─→ Checking "ascii_standard_testfile.txt".
393 | ──→ Detected phpMussel-Testfile.ASCII.Standard (ascii_standard_testfile.txt)!
394 | ─→ Checking "coex_testfile.rtf".
395 | ──→ Detected phpMussel-Testfile.CoEx (coex_testfile.rtf)!
396 | ─→ Checking "encrypted.zip".
397 | ──→ Detected encrypted archive; Encrypted archives not permitted (encrypted.zip)!
398 | ─→ Checking "exe_standard_testfile.exe".
399 | ──→ Filetype blacklisted (exe_standard_testfile.exe)!
400 | ─→ Checking "general_standard_testfile.txt".
401 | ──→ Detected phpMussel-Testfile.General.Standard (general_standard_testfile.txt)!
402 | ─→ Checking "graphics_standard_testfile.gif".
403 | ──→ Detected phpMussel-Testfile.Graphics.Standard (graphics_standard_testfile.gif)!
404 | ─→ Checking "hash_testfile_md5.txt".
405 | ──→ Detected phpMussel-Testfile.HASH.MD5 (hash_testfile_md5.txt)!
406 | ─→ Checking "hash_testfile_sha1.txt".
407 | ──→ Detected phpMussel-Testfile.HASH.SHA1 (hash_testfile_sha1.txt)!
408 | ─→ Checking "hash_testfile_sha256.txt".
409 | ──→ Detected phpMussel-Testfile.HASH.SHA256 (hash_testfile_sha256.txt)!
410 | ─→ Checking "hello.txt".
411 | ──→ No problems found.
412 | ─→ Checking "html_standard_testfile.html".
413 | ──→ Detected phpMussel-Testfile.HTML.Standard (html_standard_testfile.html)!
414 | ─→ Checking "ole_testfile.ole".
415 | ────→ Detected phpMussel-Testfile.OLE.Standard (ole_testfile.bin)!
416 | ─→ Checking "pdf_standard_testfile.pdf".
417 | ──→ Detected phpMussel-Testfile.PDF.Standard (pdf_standard_testfile.pdf)!
418 | ─→ Checking "pe_sectional_testfile.exe".
419 | ──→ Filetype blacklisted (pe_sectional_testfile.exe)!
420 | ─→ Checking "swf_standard_testfile.swf".
421 | ──→ Detected phpMussel-Testfile.SWF.Standard (swf_standard_testfile.swf)!
422 | Fri, 17 Jul 2020 18:50:50 +0800 Finished.
423 | "
424 | ```
425 |
426 | *也可以看看: [掃描時如何訪問文件的具體細節?](#user-content-SCAN_DEBUGGING)*
427 |
428 | #### 3.6 2FA(雙因素身份驗證)
429 |
430 | 通過啟用雙因素身份驗證,可以使前端更安全。當登錄使用2FA的帳戶時,會向與該帳戶關聯的電子郵件地址發送電子郵件。此電子郵件包含『2FA代碼』,用戶必須輸入它(以及他們的使用者名稱和密碼),為了能夠使用該帳戶登錄。這意味著獲取帳戶密碼不足以讓任何黑客或潛在攻擊者能夠帳戶登錄,因為他們還需要訪問帳戶的電子郵件地址才能接收和使用會話的2FA代碼(從而使前端更安全)。
431 |
432 | 在安裝PHPMailer後,您需要通過phpMussel配置頁面或配置文件填充PHPMailer的配置指令。有關這些配置指令的更多信息包含在本文檔的配置部分中。在填充PHPMailer配置指令後,將`enable_two_factor`設置為`true`。現在應啟用雙因素身份驗證。
433 |
434 | 接下來,您需要讓phpMussel知道在使用該帳戶登錄時將2FA代碼發送到何處。為此,請使用電子郵件地址作為帳戶的使用者名稱(例如,`foo@bar.tld`),或者將電子郵件地址作為使用者名稱的一部分包括在內,就像通常發送電子郵件一樣(例如,`Foo Bar `)。
435 |
436 | ---
437 |
438 |
439 | ### 4. 擴展PHPMUSSEL
440 |
441 | phpMussel在設計時考慮了可擴展性。向phpMussel組織中的任何存儲庫拉請求和[貢獻](https://github.com/phpMussel/.github/blob/master/CONTRIBUTING.md)總是歡迎的。如果需要,您也可以修改或擴展phpMussel以適合自己的需求(例如,用於特定於您的特定實現的修改或擴展,用於需要phpMussel的新插件和新Composer軟件包,等等)。
442 |
443 | 從v3開始,所有phpMussel功能都作為類存在。這意味著在某些情況下,PHP提供的[對象繼承](https://www.php.net/manual/zh/language.oop5.inheritance.php)機制可能是擴展phpMussel的簡便且適當的方法。
444 |
445 | phpMussel還提供了自己的擴展機制。在v3之前,首選的機制是phpMussel的集成插件系統。從v3開始,首選的機制是事件編排程序。
446 |
447 | 用於擴展phpMussel和編寫新插件的樣板代碼可在[樣板庫](https://github.com/phpMussel/plugin-boilerplates)中公開獲得。還包括[所有當前支持的事件](https://github.com/phpMussel/plugin-boilerplates/tree/master/boilerplate-v3#currently-supported-events)的列表,以及有關如何使用樣板代碼的更詳細的說明。
448 |
449 | v3樣板代碼的結構與phpMussel組織中各種phpMussel v3存儲庫的結構相同。這不是巧合。只要有可能,我建議您將v3樣板代碼用於可擴展性,並使用與phpMussel v3本身相似的設計原理。如果您選擇公開您的新擴展程序或插件,您可以集成Composer支持,理論上其他人應該有可能以與phpMussel v3完全相同的方式來利用您的擴展程序或插件,只需將其與其他Composer依賴項一起使用,並在實現時應用任何必要的事件處理程序即可(當然,不要忘了在出版物中包含說明,以便其他人知道可能存在的任何必要事件處理程序,以及正確安裝和使用出版物所必需的任何其他信息)。
450 |
451 | ---
452 |
453 |
454 | ### 5. 配置選項
455 |
456 | 以下是phpMussel接受的配置指令的列表,以及一個說明的他們的目的和功能。
457 |
458 | ```
459 | 配置 (v3)
460 | │
461 | ├───core
462 | │ scan_log [string]
463 | │ scan_log_serialized [string]
464 | │ error_log [string]
465 | │ outbound_request_log [string]
466 | │ truncate [string]
467 | │ log_rotation_limit [int]
468 | │ log_rotation_action [string]
469 | │ timezone [string]
470 | │ time_offset [int]
471 | │ time_format [string]
472 | │ ipaddr [string]
473 | │ delete_on_sight [bool]
474 | │ lang [string]
475 | │ lang_override [bool]
476 | │ scan_cache_expiry [int]
477 | │ maintenance_mode [bool]
478 | │ statistics [bool]
479 | │ hide_version [bool]
480 | │ disabled_channels [string]
481 | │ request_proxy [string]
482 | │ request_proxyauth [string]
483 | │ default_timeout [int]
484 | ├───signatures
485 | │ active [string]
486 | │ fail_silently [bool]
487 | │ fail_extensions_silently [bool]
488 | │ detect_adware [bool]
489 | │ detect_joke_hoax [bool]
490 | │ detect_pua_pup [bool]
491 | │ detect_packer_packed [bool]
492 | │ detect_shell [bool]
493 | │ detect_deface [bool]
494 | │ detect_encryption [bool]
495 | │ heuristic_threshold [int]
496 | ├───files
497 | │ filesize_limit [string]
498 | │ filesize_response [bool]
499 | │ filetype_whitelist [string]
500 | │ filetype_blacklist [string]
501 | │ filetype_greylist [string]
502 | │ check_archives [bool]
503 | │ filesize_archives [bool]
504 | │ filetype_archives [bool]
505 | │ max_recursion [int]
506 | │ block_encrypted_archives [bool]
507 | │ max_files_in_archives [int]
508 | │ chameleon_from_php [bool]
509 | │ can_contain_php_file_extensions [string]
510 | │ chameleon_from_exe [bool]
511 | │ chameleon_to_archive [bool]
512 | │ chameleon_to_doc [bool]
513 | │ chameleon_to_img [bool]
514 | │ chameleon_to_pdf [bool]
515 | │ archive_file_extensions [string]
516 | │ block_control_characters [bool]
517 | │ corrupted_exe [bool]
518 | │ decode_threshold [string]
519 | │ scannable_threshold [string]
520 | │ allow_leading_trailing_dots [bool]
521 | │ block_macros [bool]
522 | │ only_allow_images [bool]
523 | │ entropy_limit [float]
524 | │ entropy_filesize_limit [string]
525 | ├───quarantine
526 | │ quarantine_key [string]
527 | │ quarantine_max_filesize [string]
528 | │ quarantine_max_usage [string]
529 | │ quarantine_max_files [int]
530 | ├───virustotal
531 | │ vt_public_api_key [string]
532 | │ vt_suspicion_level [int]
533 | │ vt_weighting [int]
534 | │ vt_quota_rate [int]
535 | │ vt_quota_time [int]
536 | ├───urlscanner
537 | │ google_api_key [string]
538 | │ maximum_api_lookups [int]
539 | │ maximum_api_lookups_response [bool]
540 | │ cache_time [int]
541 | ├───legal
542 | │ pseudonymise_ip_addresses [bool]
543 | │ privacy_policy [string]
544 | ├───supplementary_cache_options
545 | │ prefix [string]
546 | │ enable_apcu [bool]
547 | │ enable_memcached [bool]
548 | │ enable_redis [bool]
549 | │ enable_pdo [bool]
550 | │ memcached_host [string]
551 | │ memcached_port [int]
552 | │ redis_host [string]
553 | │ redis_port [int]
554 | │ redis_timeout [float]
555 | │ redis_database_number [int]
556 | │ pdo_dsn [string]
557 | │ pdo_username [string]
558 | │ pdo_password [string]
559 | ├───frontend
560 | │ frontend_log [string]
561 | │ max_login_attempts [int]
562 | │ numbers [string]
563 | │ default_algo [string]
564 | │ theme [string]
565 | │ theme_mode [string]
566 | │ magnification [float]
567 | │ custom_header [string]
568 | │ custom_footer [string]
569 | ├───web
570 | │ uploads_log [string]
571 | │ forbid_on_block [bool]
572 | │ unsupported_media_type_header [bool]
573 | │ max_uploads [int]
574 | │ ignore_upload_errors [bool]
575 | │ theme [string]
576 | │ theme_mode [string]
577 | │ magnification [float]
578 | │ custom_header [string]
579 | │ custom_footer [string]
580 | └───phpmailer
581 | event_log [string]
582 | enable_two_factor [bool]
583 | enable_notifications [string]
584 | skip_auth_process [bool]
585 | host [string]
586 | port [int]
587 | smtp_secure [string]
588 | smtp_auth [bool]
589 | username [string]
590 | password [string]
591 | set_from_address [string]
592 | set_from_name [string]
593 | add_reply_to_address [string]
594 | add_reply_to_name [string]
595 | ```
596 |
597 | #### 『core』 (類別)
598 | 基本配置(任何不屬於其他類別的核心配置)。
599 |
600 | ##### 『scan_log』 `[string]`
601 | - 文件為記錄在所有掃描結果。指定一個檔案名稱,或留空以關閉。
602 |
603 | 有用的提示:您可以使用時間格式佔位符將日期/時間資訊附加到日誌檔案的名稱。可用的時間格式佔位符顯示在`core➡time_format`處。
604 |
605 | ##### 『scan_log_serialized』 `[string]`
606 | - 文件為記錄在所有掃描結果(它採用序列化格式)。指定一個檔案名稱,或留空以關閉。
607 |
608 | 有用的提示:您可以使用時間格式佔位符將日期/時間資訊附加到日誌檔案的名稱。可用的時間格式佔位符顯示在`core➡time_format`處。
609 |
610 | ##### 『error_log』 `[string]`
611 | - 用於記錄檢測到的任何非致命錯誤的文件。指定一個檔案名稱,或留空以禁用。
612 |
613 | 有用的提示:您可以使用時間格式佔位符將日期/時間資訊附加到日誌檔案的名稱。可用的時間格式佔位符顯示在`core➡time_format`處。
614 |
615 | ##### 『outbound_request_log』 `[string]`
616 | - 用於記錄任何出站請求結果的文件。指定一個檔案名稱,或留空以禁用。
617 |
618 | 有用的提示:您可以使用時間格式佔位符將日期/時間資訊附加到日誌檔案的名稱。可用的時間格式佔位符顯示在`core➡time_format`處。
619 |
620 | ##### 『truncate』 `[string]`
621 | - 截斷日誌文件當他們達到一定的大小嗎?值是在B/KB/MB/GB/TB,是日誌文件允許的最大大小直到它被截斷。默認值為『0KB』將禁用截斷(日誌文件可以無限成長)。注意:適用於單個日誌文件!日誌文件大小不被算集體的。
622 |
623 | ##### 『log_rotation_limit』 `[int]`
624 | - 日誌輪轉限制了任何時候應該存在的日誌文件的數量。當新的日誌文件被創建時,如果日誌文件的指定的最大數量已經超過,將執行指定的操作。您可以在此指定所需的限制。值為『0』將禁用日誌輪轉。
625 |
626 | ##### 『log_rotation_action』 `[string]`
627 | - 日誌輪轉限制了任何時候應該存在的日誌文件的數量。當新的日誌文件被創建時,如果日誌文件的指定的最大數量已經超過,將執行指定的操作。您可以在此處指定所需的操作。
628 |
629 | ```
630 | log_rotation_action
631 | ├─Delete ("刪除最舊的日誌文件,直到不再超出限制。")
632 | └─Archive ("首先歸檔,然後刪除最舊的日誌文件,直到不再超出限制。")
633 | ```
634 |
635 | ##### 『timezone』 `[string]`
636 | - 這用於指定要使用的時區(例如,Africa/Cairo、America/New_York、Asia/Tokyo、Australia/Perth、Europe/Berlin、Pacific/Guam、等等)。指定『SYSTEM』使PHP自動為您處理。
637 |
638 | ```
639 | timezone
640 | ├─SYSTEM ("使用系統默認時區。")
641 | ├─UTC ("UTC")
642 | └─…其他
643 | ```
644 |
645 | ##### 『time_offset』 `[int]`
646 | - 時區偏移量(分鐘)。
647 |
648 | ##### 『time_format』 `[string]`
649 | - phpMussel使用的日期符號格式。可根據要求增加附加選項。
650 |
651 | ```
652 | time_format
653 | ├─{Day}, {dd} {Mon} {yyyy} {hh}:{ii}:{ss} {tz} ("{Day}, {dd} {Mon} {yyyy} {hh}:{ii}:{ss} {tz}")
654 | ├─{Day}, {dd} {Mon} {yyyy} {hh}:{ii}:{ss} ("{Day}, {dd} {Mon} {yyyy} {hh}:{ii}:{ss}")
655 | ├─{Day}, {dd} {Mon} {yyyy} ("{Day}, {dd} {Mon} {yyyy}")
656 | ├─{yyyy}.{mm}.{dd} {hh}:{ii}:{ss} {tz} ("{yyyy}.{mm}.{dd} {hh}:{ii}:{ss} {tz}")
657 | ├─{yyyy}.{mm}.{dd} {hh}:{ii}:{ss} ("{yyyy}.{mm}.{dd} {hh}:{ii}:{ss}")
658 | ├─{yyyy}.{mm}.{dd} ("{yyyy}.{mm}.{dd}")
659 | ├─{yyyy}-{mm}-{dd} {hh}:{ii}:{ss} {tz} ("{yyyy}-{mm}-{dd} {hh}:{ii}:{ss} {tz}")
660 | ├─{yyyy}-{mm}-{dd} {hh}:{ii}:{ss} ("{yyyy}-{mm}-{dd} {hh}:{ii}:{ss}")
661 | ├─{yyyy}-{mm}-{dd} ("{yyyy}-{mm}-{dd}")
662 | ├─{yyyy}/{mm}/{dd} {hh}:{ii}:{ss} {tz} ("{yyyy}/{mm}/{dd} {hh}:{ii}:{ss} {tz}")
663 | ├─{yyyy}/{mm}/{dd} {hh}:{ii}:{ss} ("{yyyy}/{mm}/{dd} {hh}:{ii}:{ss}")
664 | ├─{yyyy}/{mm}/{dd} ("{yyyy}/{mm}/{dd}")
665 | ├─{dd}.{mm}.{yyyy} {hh}:{ii}:{ss} {tz} ("{dd}.{mm}.{yyyy} {hh}:{ii}:{ss} {tz}")
666 | ├─{dd}.{mm}.{yyyy} {hh}:{ii}:{ss} ("{dd}.{mm}.{yyyy} {hh}:{ii}:{ss}")
667 | ├─{dd}.{mm}.{yyyy} ("{dd}.{mm}.{yyyy}")
668 | ├─{dd}-{mm}-{yyyy} {hh}:{ii}:{ss} {tz} ("{dd}-{mm}-{yyyy} {hh}:{ii}:{ss} {tz}")
669 | ├─{dd}-{mm}-{yyyy} {hh}:{ii}:{ss} ("{dd}-{mm}-{yyyy} {hh}:{ii}:{ss}")
670 | ├─{dd}-{mm}-{yyyy} ("{dd}-{mm}-{yyyy}")
671 | ├─{dd}/{mm}/{yyyy} {hh}:{ii}:{ss} {tz} ("{dd}/{mm}/{yyyy} {hh}:{ii}:{ss} {tz}")
672 | ├─{dd}/{mm}/{yyyy} {hh}:{ii}:{ss} ("{dd}/{mm}/{yyyy} {hh}:{ii}:{ss}")
673 | ├─{dd}/{mm}/{yyyy} ("{dd}/{mm}/{yyyy}")
674 | ├─{mm}.{dd}.{yyyy} {hh}:{ii}:{ss} {tz} ("{mm}.{dd}.{yyyy} {hh}:{ii}:{ss} {tz}")
675 | ├─{mm}.{dd}.{yyyy} {hh}:{ii}:{ss} ("{mm}.{dd}.{yyyy} {hh}:{ii}:{ss}")
676 | ├─{mm}.{dd}.{yyyy} ("{mm}.{dd}.{yyyy}")
677 | ├─{mm}-{dd}-{yyyy} {hh}:{ii}:{ss} {tz} ("{mm}-{dd}-{yyyy} {hh}:{ii}:{ss} {tz}")
678 | ├─{mm}-{dd}-{yyyy} {hh}:{ii}:{ss} ("{mm}-{dd}-{yyyy} {hh}:{ii}:{ss}")
679 | ├─{mm}-{dd}-{yyyy} ("{mm}-{dd}-{yyyy}")
680 | ├─{mm}/{dd}/{yyyy} {hh}:{ii}:{ss} {tz} ("{mm}/{dd}/{yyyy} {hh}:{ii}:{ss} {tz}")
681 | ├─{mm}/{dd}/{yyyy} {hh}:{ii}:{ss} ("{mm}/{dd}/{yyyy} {hh}:{ii}:{ss}")
682 | ├─{mm}/{dd}/{yyyy} ("{mm}/{dd}/{yyyy}")
683 | ├─{yy}.{mm}.{dd} {hh}:{ii}:{ss} {tz} ("{yy}.{mm}.{dd} {hh}:{ii}:{ss} {tz}")
684 | ├─{yy}.{mm}.{dd} {hh}:{ii}:{ss} ("{yy}.{mm}.{dd} {hh}:{ii}:{ss}")
685 | ├─{yy}.{mm}.{dd} ("{yy}.{mm}.{dd}")
686 | ├─{yy}-{mm}-{dd} {hh}:{ii}:{ss} {tz} ("{yy}-{mm}-{dd} {hh}:{ii}:{ss} {tz}")
687 | ├─{yy}-{mm}-{dd} {hh}:{ii}:{ss} ("{yy}-{mm}-{dd} {hh}:{ii}:{ss}")
688 | ├─{yy}-{mm}-{dd} ("{yy}-{mm}-{dd}")
689 | ├─{yy}/{mm}/{dd} {hh}:{ii}:{ss} {tz} ("{yy}/{mm}/{dd} {hh}:{ii}:{ss} {tz}")
690 | ├─{yy}/{mm}/{dd} {hh}:{ii}:{ss} ("{yy}/{mm}/{dd} {hh}:{ii}:{ss}")
691 | ├─{yy}/{mm}/{dd} ("{yy}/{mm}/{dd}")
692 | ├─{dd}.{mm}.{yy} {hh}:{ii}:{ss} {tz} ("{dd}.{mm}.{yy} {hh}:{ii}:{ss} {tz}")
693 | ├─{dd}.{mm}.{yy} {hh}:{ii}:{ss} ("{dd}.{mm}.{yy} {hh}:{ii}:{ss}")
694 | ├─{dd}.{mm}.{yy} ("{dd}.{mm}.{yy}")
695 | ├─{dd}-{mm}-{yy} {hh}:{ii}:{ss} {tz} ("{dd}-{mm}-{yy} {hh}:{ii}:{ss} {tz}")
696 | ├─{dd}-{mm}-{yy} {hh}:{ii}:{ss} ("{dd}-{mm}-{yy} {hh}:{ii}:{ss}")
697 | ├─{dd}-{mm}-{yy} ("{dd}-{mm}-{yy}")
698 | ├─{dd}/{mm}/{yy} {hh}:{ii}:{ss} {tz} ("{dd}/{mm}/{yy} {hh}:{ii}:{ss} {tz}")
699 | ├─{dd}/{mm}/{yy} {hh}:{ii}:{ss} ("{dd}/{mm}/{yy} {hh}:{ii}:{ss}")
700 | ├─{dd}/{mm}/{yy} ("{dd}/{mm}/{yy}")
701 | ├─{mm}.{dd}.{yy} {hh}:{ii}:{ss} {tz} ("{mm}.{dd}.{yy} {hh}:{ii}:{ss} {tz}")
702 | ├─{mm}.{dd}.{yy} {hh}:{ii}:{ss} ("{mm}.{dd}.{yy} {hh}:{ii}:{ss}")
703 | ├─{mm}.{dd}.{yy} ("{mm}.{dd}.{yy}")
704 | ├─{mm}-{dd}-{yy} {hh}:{ii}:{ss} {tz} ("{mm}-{dd}-{yy} {hh}:{ii}:{ss} {tz}")
705 | ├─{mm}-{dd}-{yy} {hh}:{ii}:{ss} ("{mm}-{dd}-{yy} {hh}:{ii}:{ss}")
706 | ├─{mm}-{dd}-{yy} ("{mm}-{dd}-{yy}")
707 | ├─{mm}/{dd}/{yy} {hh}:{ii}:{ss} {tz} ("{mm}/{dd}/{yy} {hh}:{ii}:{ss} {tz}")
708 | ├─{mm}/{dd}/{yy} {hh}:{ii}:{ss} ("{mm}/{dd}/{yy} {hh}:{ii}:{ss}")
709 | ├─{mm}/{dd}/{yy} ("{mm}/{dd}/{yy}")
710 | ├─{yyyy}年{m}月{d}日 {hh}時{ii}分{ss}秒 ("{yyyy}年{m}月{d}日 {hh}時{ii}分{ss}秒")
711 | ├─{yyyy}年{m}月{d}日 {hh}:{ii}:{ss} {tz} ("{yyyy}年{m}月{d}日 {hh}:{ii}:{ss} {tz}")
712 | ├─{yyyy}年{m}月{d}日 ("{yyyy}年{m}月{d}日")
713 | ├─{yy}年{m}月{d}日 {hh}時{ii}分{ss}秒 ("{yy}年{m}月{d}日 {hh}時{ii}分{ss}秒")
714 | ├─{yy}年{m}月{d}日 {hh}:{ii}:{ss} {tz} ("{yy}年{m}月{d}日 {hh}:{ii}:{ss} {tz}")
715 | ├─{yy}年{m}月{d}日 ("{yy}年{m}月{d}日")
716 | ├─{yyyy}년 {m}월 {d}일 {hh}시 {ii}분 {ss}초 ("{yyyy}년 {m}월 {d}일 {hh}시 {ii}분 {ss}초")
717 | ├─{yyyy}년 {m}월 {d}일 {hh}:{ii}:{ss} {tz} ("{yyyy}년 {m}월 {d}일 {hh}:{ii}:{ss} {tz}")
718 | ├─{yyyy}년 {m}월 {d}일 ("{yyyy}년 {m}월 {d}일")
719 | ├─{yy}년 {m}월 {d}일 {hh}시 {ii}분 {ss}초 ("{yy}년 {m}월 {d}일 {hh}시 {ii}분 {ss}초")
720 | ├─{yy}년 {m}월 {d}일 {hh}:{ii}:{ss} {tz} ("{yy}년 {m}월 {d}일 {hh}:{ii}:{ss} {tz}")
721 | ├─{yy}년 {m}월 {d}일 ("{yy}년 {m}월 {d}일")
722 | ├─{yyyy}-{mm}-{dd}T{hh}:{ii}:{ss}{t:z} ("{yyyy}-{mm}-{dd}T{hh}:{ii}:{ss}{t:z}")
723 | ├─{d}. {m}. {yyyy} ("{d}. {m}. {yyyy}")
724 | └─…其他
725 | ```
726 |
727 | __*佔位符 – 解釋 – 基於2024-04-30T18:27:49+08:00的範例。*__
728 | `{yyyy}` – 年份 – 例如,2024。
729 | `{yy}` – 縮寫年份 – 例如,24。
730 | `{Mon}` – 月份的縮寫名稱(英文) – 例如,Apr。
731 | `{mm}` – 帶前導零的月份 – 例如,04。
732 | `{m}` – 月數 – 例如,4。
733 | `{Day}` – 當天的縮寫名稱(英文) – 例如,Tue。
734 | `{dd}` – 帶前導零的天數 – 例如,30。
735 | `{d}` – 天數 – 例如,30。
736 | `{hh}` – 帶前導零的小時(使用24小時制) – 例如,18。
737 | `{h}` – 小時(使用24小時制) – 例如,18。
738 | `{ii}` – 帶前導零的分鐘 – 例如,27。
739 | `{i}` – 分鐘 – 例如,27。
740 | `{ss}` – 帶前導零的秒 – 例如,49。
741 | `{s}` – 秒 – 例如,49。
742 | `{tz}` – 時區(不含冒號) – 例如,+0800。
743 | `{t:z}` – 時區(附冒號) – 例如,+08:00。
744 |
745 | ##### 『ipaddr』 `[string]`
746 | - 在哪裡可以找到連接請求IP位址? (對於Cloudflare等服務有用)。 標準 = REMOTE_ADDR。 警告:不要修改此除非您知道什麼您做著!
747 |
748 | ```
749 | ipaddr
750 | ├─HTTP_INCAP_CLIENT_IP ("HTTP_INCAP_CLIENT_IP (Incapsula)")
751 | ├─HTTP_CF_CONNECTING_IP ("HTTP_CF_CONNECTING_IP (Cloudflare)")
752 | ├─CF-Connecting-IP ("CF-Connecting-IP (Cloudflare)")
753 | ├─HTTP_X_FORWARDED_FOR ("HTTP_X_FORWARDED_FOR (Cloudbric)")
754 | ├─X-Forwarded-For ("X-Forwarded-For (Squid)")
755 | ├─Forwarded ("Forwarded")
756 | ├─REMOTE_ADDR ("REMOTE_ADDR (標準)")
757 | └─…其他
758 | ```
759 |
760 | 也可以看看:
761 | - [NGINX Reverse Proxy](https://docs.nginx.com/nginx/admin-guide/web-server/reverse-proxy/)
762 | - [Squid configuration directive forwarded_for](http://www.squid-cache.org/Doc/config/forwarded_for/)
763 | - [Forwarded - HTTP \| MDN](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Forwarded)
764 |
765 | ##### 『delete_on_sight』 `[bool]`
766 | - 激活的這個指令將指示腳本馬上刪除任何掃描文件上傳匹配任何檢測標準,是否通過簽名或任何事其他。文件已確定是清潔將會忽略。如果是存檔,全存檔將會刪除,不管如果違規文件是只有一個的幾個文件包含在存檔。為文件上傳掃描,按說,它不必要為您激活這個指令,因為按說,PHP將自動清洗內容的它的緩存當執行是完,意思它將按說刪除任何文件上傳從它向服務器如果不已移動,複製或刪除。這個指令是添加這里為額外安全為任何人誰的PHP副本可能不始終表現在預期方式。False【假/負】:之後掃描,忽略文件【標準】,True【真/正】:之後掃描,如果不清潔,馬上刪除。
767 |
768 | ##### 『lang』 `[string]`
769 | - 指定標準phpMussel語言。
770 |
771 | ```
772 | lang
773 | ├─af ("Afrikaans")
774 | ├─ar ("العربية")
775 | ├─bg ("Български")
776 | ├─bn ("বাংলা")
777 | ├─bs ("Bosanski")
778 | ├─ca ("Català")
779 | ├─cs ("Čeština")
780 | ├─de ("Deutsch")
781 | ├─en ("English (AU/GB/NZ)")
782 | ├─en-CA ("English (CA)")
783 | ├─en-US ("English (US)")
784 | ├─es ("Español")
785 | ├─fa ("فارسی")
786 | ├─fr ("Français (FR)")
787 | ├─fr-CA ("Français (CA)")
788 | ├─gl ("Galego")
789 | ├─gu ("ગુજરાતી")
790 | ├─he ("עברית")
791 | ├─hi ("हिंदी")
792 | ├─hr ("Hrvatski")
793 | ├─id ("Bahasa Indonesia")
794 | ├─it ("Italiano")
795 | ├─ja ("日本語")
796 | ├─ko ("한국어")
797 | ├─lv ("Latviešu")
798 | ├─ml ("മലയാളം")
799 | ├─mr ("मराठी")
800 | ├─ms ("Bahasa Melayu")
801 | ├─nl ("Nederlandse")
802 | ├─no ("Norsk")
803 | ├─pa ("ਪੰਜਾਬੀ")
804 | ├─pl ("Polski")
805 | ├─pt-BR ("Português (Brasil)")
806 | ├─pt-PT ("Português (Europeu)")
807 | ├─ro ("Română")
808 | ├─ru ("Русский")
809 | ├─sv ("Svenska")
810 | ├─sr ("Српски")
811 | ├─ta ("தமிழ்")
812 | ├─th ("ภาษาไทย")
813 | ├─tr ("Türkçe")
814 | ├─uk ("Українська")
815 | ├─ur ("اردو")
816 | ├─vi ("Tiếng Việt")
817 | ├─zh-Hans ("中文(简体)")
818 | └─zh-Hant ("中文(傳統)")
819 | ```
820 |
821 | ##### 『lang_override』 `[bool]`
822 | - 盡可能根據HTTP_ACCEPT_LANGUAGE進行本地化?True(真)=進行本地化【標準】;False(假)=不要本地化。
823 |
824 | ##### 『scan_cache_expiry』 `[int]`
825 | - 多長時間應該phpMussel維持掃描結果?數值是秒數為維持掃描結果。標準是21600秒(6小時); 一個`0`數值將停止維持掃描結果。
826 |
827 | ##### 『maintenance_mode』 `[bool]`
828 | - 啟用維護模式?True(真)=關閉;False(假)=不關閉【標準】。它停用一切以外前端。有時候在更新CMS,框架,等時有用。
829 |
830 | ##### 『statistics』 `[bool]`
831 | - 跟踪phpMussel使用情況統計?True(真)=跟踪;False(假)=不跟踪【標準】。
832 |
833 | ##### 『hide_version』 `[bool]`
834 | - 從日誌和頁面輸出中隱藏版本信息嗎?True(真)=關閉;False(假)=不關閉【標準】。
835 |
836 | ##### 『disabled_channels』 `[string]`
837 | - 這可用於防止phpMussel在發送請求時使用特定通道。
838 |
839 | ```
840 | disabled_channels
841 | ├─GitHub ("GitHub")
842 | ├─BitBucket ("BitBucket")
843 | ├─VirusTotal_HTTPS ("VirusTotal (HTTPS)")
844 | └─VirusTotal_HTTP ("VirusTotal (HTTP)")
845 | ```
846 |
847 | ##### 『request_proxy』 `[string]`
848 | - 如果您希望透過代理發送出站請求,請在此處指定該代理。如果您不想這,請將此處留空。
849 |
850 | ##### 『request_proxyauth』 `[string]`
851 | - 如果透過代理發送出站請求且該代理需要使用者名稱和密碼,請在此處指定該使用者名稱和密碼(例如,`user:pass`)。如果您不想這,請將此處留空。
852 |
853 | ##### 『default_timeout』 `[int]`
854 | - 用於外部請求的默認超時? 標準 = 12秒。
855 |
856 | #### 『signatures』 (類別)
857 | 簽名,簽名檔案,等的配置。
858 |
859 | ##### 『active』 `[string]`
860 | - 活性簽名檔案的列表,以逗號分隔。注意:首先必須安裝簽名檔案,然後才能激活它們。為了使測試文件正常工作,必須安裝並激活簽名檔案。
861 |
862 | ##### 『fail_silently』 `[bool]`
863 | - phpMussel應該報告當簽名檔案是失踪或損壞嗎?如果`fail_silently`是關閉,失踪和損壞文件將會報告當掃描,和如果`fail_silently`是激活,失踪和損壞文件將會忽略,有掃描報告為那些文件哪裡沒有問題。這個應該按說被留下除非您遇到失敗或有其他類似問題。False(假)=是關閉;True(真)=是激活【默認】。
864 |
865 | ##### 『fail_extensions_silently』 `[bool]`
866 | - phpMussel應該報告當擴展是失踪嗎?如果`fail_extensions_silently`是關閉,失踪擴展將會報告當掃描,和如果`fail_extensions_silently`是激活,失踪擴展將會忽略,有掃描報告為那些文件哪裡沒有任何問題。關閉的這個指令可能的可以增加您的安全,但可能還導致一個增加的假陽性。False(假)=是關閉;True(真)=是激活【默認】。
867 |
868 | ##### 『detect_adware』 `[bool]`
869 | - phpMussel應該使用簽名為廣告軟件檢測嗎?False(假)=不檢查,True(真)=檢查【默認】。
870 |
871 | ##### 『detect_joke_hoax』 `[bool]`
872 | - phpMussel應該使用簽名為病毒/惡意軟體笑話/惡作劇檢測嗎?False(假)=不檢查,True(真)=檢查【默認】。
873 |
874 | ##### 『detect_pua_pup』 `[bool]`
875 | - phpMussel應該使用簽名為PUP/PUA(可能無用/非通緝程序/軟件)檢測嗎?False(假)=不檢查,True(真)=檢查【默認】。
876 |
877 | ##### 『detect_packer_packed』 `[bool]`
878 | - phpMussel應該使用簽名為打包機和打包數據檢測嗎?False(假)=不檢查,True(真)=檢查【默認】。
879 |
880 | ##### 『detect_shell』 `[bool]`
881 | - phpMussel應該使用簽名為webshell腳本檢測嗎?False(假)=不檢查,True(真)=檢查【默認】。
882 |
883 | ##### 『detect_deface』 `[bool]`
884 | - phpMussel應該使用簽名為污損的污損軟件檢測嗎?False(假)=不檢查,True(真)=檢查【默認】。
885 |
886 | ##### 『detect_encryption』 `[bool]`
887 | - phpMussel應該檢測並阻止加密的文件嗎?False(假)=不檢查,True(真)=檢查【默認】。
888 |
889 | ##### 『heuristic_threshold』 `[int]`
890 | - 有某些簽名的phpMussel意味為確定可疑和可能惡意文件零件被上傳有不在他們自己確定那些文件被上傳特別是作為惡意。這個『threshold』數值告訴phpMussel什麼是最大總重量的可疑和潛在惡意文件零件被上傳允許之前那些文件是被識別作為惡意。定義的重量在這個上下文是總數值的可疑和可能惡意文件零件確定。作為默認,這個數值將會設置作為3。一個較低的值通常將結果在一個更高的發生的假陽性但一個更高的發生的惡意文件被確定,而一個更高的數值將通常結果在一個較低的發生的假陽性但一個較低的數值的惡意文件被確定。它是通常最好忽略這個數值除非您遇到關聯問題。
891 |
892 | #### 『files』 (類別)
893 | 在掃描過程中如何處理文件。
894 |
895 | ##### 『filesize_limit』 `[string]`
896 | - 文件大小限在KB。65536 = 64MB【默認】,0 = 沒有限(始終灰名單),任何正數值接受。這個可以有用當您的PHP配置限內存量一個進程可以佔據或如果您的PHP配置限文件大小的上傳。
897 |
898 | ##### 『filesize_response』 `[bool]`
899 | - 如何處理文件超過文件大小限(如果存在)。False(假)=白名單;True(真)=黑名單【默認】。
900 |
901 | ##### 『filetype_whitelist』 `[string]`
902 | - 白名單:
903 |
904 | __這是如何工作的。__ 如果您的系統只允許具體文件類型被上傳,或如果您的系統明確地否認某些文件類型,指定那些文件類型在白名單,黑名單和灰名單可以增加掃描執行速度通過允許腳本跳過某些文件類型。格式是CSV(逗號分隔變量)。
__進程的邏輯順序。__ 如果文件類型已白名單,不掃描和不受阻文件,和不匹配文件對照黑名單或灰名單。如果文件類型已黑名單,不掃描文件但阻止它無論如何,和不匹配文件對照灰名單。如果灰名單是空,或如果灰名單不空和文件類型已灰名單,掃描文件像正常和確定如果阻止它基於掃描結果,但如果灰名單不空和文件類型不灰名單,過程文件彷彿已黑名單,因此不掃描它但阻止它無論如何。
905 |
906 | ##### 『filetype_blacklist』 `[string]`
907 | - 黑名單:
908 |
909 | __這是如何工作的。__ 如果您的系統只允許具體文件類型被上傳,或如果您的系統明確地否認某些文件類型,指定那些文件類型在白名單,黑名單和灰名單可以增加掃描執行速度通過允許腳本跳過某些文件類型。格式是CSV(逗號分隔變量)。
__進程的邏輯順序。__ 如果文件類型已白名單,不掃描和不受阻文件,和不匹配文件對照黑名單或灰名單。如果文件類型已黑名單,不掃描文件但阻止它無論如何,和不匹配文件對照灰名單。如果灰名單是空,或如果灰名單不空和文件類型已灰名單,掃描文件像正常和確定如果阻止它基於掃描結果,但如果灰名單不空和文件類型不灰名單,過程文件彷彿已黑名單,因此不掃描它但阻止它無論如何。
910 |
911 | ##### 『filetype_greylist』 `[string]`
912 | - 灰名單:
913 |
914 | __這是如何工作的。__ 如果您的系統只允許具體文件類型被上傳,或如果您的系統明確地否認某些文件類型,指定那些文件類型在白名單,黑名單和灰名單可以增加掃描執行速度通過允許腳本跳過某些文件類型。格式是CSV(逗號分隔變量)。
__進程的邏輯順序。__ 如果文件類型已白名單,不掃描和不受阻文件,和不匹配文件對照黑名單或灰名單。如果文件類型已黑名單,不掃描文件但阻止它無論如何,和不匹配文件對照灰名單。如果灰名單是空,或如果灰名單不空和文件類型已灰名單,掃描文件像正常和確定如果阻止它基於掃描結果,但如果灰名單不空和文件類型不灰名單,過程文件彷彿已黑名單,因此不掃描它但阻止它無論如何。
915 |
916 | ##### 『check_archives』 `[bool]`
917 | - 嘗試匹配存檔內容嗎?False(假)=不匹配;True(真)=匹配【默認】。 已支持:Zip(需要libzip),Tar,Rar(需要rar擴展名)。
918 |
919 | ##### 『filesize_archives』 `[bool]`
920 | - 繼承文件大小黑名單/白名單在存檔內容嗎?False(假)=不繼承(剛灰名單一切);True(真)=繼承【默認】。
921 |
922 | ##### 『filetype_archives』 `[bool]`
923 | - 繼承文件類型黑名單/白名單在存檔內容嗎?False(假)=不繼承(剛灰名單一切)【默認】;True(真)=繼承。
924 |
925 | ##### 『max_recursion』 `[int]`
926 | - 最大存檔遞歸深度限。標準=3。
927 |
928 | ##### 『block_encrypted_archives』 `[bool]`
929 | - 檢測和受阻加密的存檔嗎?因為phpMussel是不能夠掃描加密的存檔內容,它是可能存檔加密可能的可以使用通過一個攻擊者作為一種手段嘗試繞過phpMussel,殺毒掃描程序和其他這樣的保護。指示phpMussel受阻任何存檔它發現被加密可能的可以幫助減少任何風險有關聯這些可能性。False(假)=不受阻;True(真)=受阻【默認】。
930 |
931 | ##### 『max_files_in_archives』 `[int]`
932 | - 在中止掃描之前從檔案中掃描的最大文件數。標準=0(沒有最大文件數)。
933 |
934 | ##### 『chameleon_from_php』 `[bool]`
935 | - 尋找PHP頭在文件是不PHP文件也不認可存檔文件。False(假)=是關閉;True(真)=是激活。
936 |
937 | ##### 『can_contain_php_file_extensions』 `[string]`
938 | - 允許包含PHP代碼的文件擴展名列表,以逗號分隔。如果啟用了PHP變色龍攻擊檢測,包含PHP代碼的文件,其擴展名不在此列表中,將被檢測為PHP變色龍攻擊。
939 |
940 | ##### 『chameleon_from_exe』 `[bool]`
941 | - 尋找可執行頭在文件是不可執行文件也不認可存檔文件和尋找可執行文件誰的頭是不正確。False(假)=是關閉;True(真)=是激活。
942 |
943 | ##### 『chameleon_to_archive』 `[bool]`
944 | - 檢測在存檔和壓縮文件中的錯誤標頭。已支持:BZ/BZIP2,GZ/GZIP,LZF,RAR,ZIP。False(假)=是關閉;True(真)=是激活。
945 |
946 | ##### 『chameleon_to_doc』 `[bool]`
947 | - 尋找辦公文檔誰的頭是不正確(已支持:DOC,DOT,PPS,PPT,XLA,XLS,WIZ)。False(假)=是關閉;True(真)=是激活。
948 |
949 | ##### 『chameleon_to_img』 `[bool]`
950 | - 尋找圖像誰的頭是不正確(已支持:BMP,DIB,PNG,GIF,JPEG,JPG,XCF,PSD,PDD,WEBP)。False(假)=是關閉;True(真)=是激活。
951 |
952 | ##### 『chameleon_to_pdf』 `[bool]`
953 | - 尋找PDF文件誰的頭是不正確。False(假)=是關閉;True(真)=是激活。
954 |
955 | ##### 『archive_file_extensions』 `[string]`
956 | - 認可存檔文件擴展(格式是CSV;應該只添加或去掉當問題發生;不必要的去掉可能的可以導致假陽性出現為存檔文件,而不必要的增加將實質上白名單任何事您增加從專用攻擊檢測;修改有慎重;還請注這個無影響在什麼存檔可以和不能被分析在內容級)。這個名單,作為是作為標準,名單那些格式使用最常見的橫過多數的系統和CMS,但有意是不全面。
957 |
958 | ##### 『block_control_characters』 `[bool]`
959 | - 受阻任何文件包含任何控製字符嗎(以外換行符)?如果您只上傳純文本,您可以激活這個指令以提供某些另外保護在您的系統。然而,如果您上傳任何事以外純文本,激活這個可能結果在假陽性。False(假)=不受阻【默認】;True(真)=受阻。
960 |
961 | ##### 『corrupted_exe』 `[bool]`
962 | - 損壞文件和處理錯誤。False(假)=忽略;True(真)=受阻【默認】。檢測和受阻潛在的損壞移植可執行【PE】文件嗎?時常(但不始終),當某些零件的一個移植可執行【PE】文件是損壞或不能被正確處理,它可以建議建議的一個病毒感染。過程使用通過最殺毒程序以檢測病毒在PE文件需要處理那些文件在某些方式,哪裡,如果程序員的一個病毒是意識的,將特別嘗試防止,以允許他們的病毒留不檢測。
963 |
964 | ##### 『decode_threshold』 `[string]`
965 | - 在原始數據中解碼命令的長度限制(如果有任何引人注目性能問題當掃描)。 標準 = 512KB。零或空值將關閉門檻(去除任何這樣的限基於文件大小)。
966 |
967 | ##### 『scannable_threshold』 `[string]`
968 | - 原始數據讀取和掃描的最大長度(如果有任何引人注目性能問題當掃描)。 標準 = 32MB。 零或空值將關閉門檻。按說,這個數值應不會少於平均文件大小的文件上傳您想和期待收到您的服務器或網站,應不會多於`filesize_limit`指令,和應不會多於大致五分之一的總允許內存分配獲授PHP通過"php.ini"配置文件。這個指令存在為嘗試防止phpMussel從用的太多內存(這個將防止它從能夠順利掃描文件以上的一個特別文件大小)。
969 |
970 | ##### 『allow_leading_trailing_dots』 `[bool]`
971 | - 允許檔案名稱中的前導和尾隨點嗎?這有時可用於隱藏文件,或欺騙某些系統允許目錄遍歷。False(假)=不允許【默認】;True(真)=允許。
972 |
973 | ##### 『block_macros』 `[bool]`
974 | - 嘗試阻止任何包含宏的文件嗎?某些文檔和電子表格類型可能包含可執行的宏,因此提供了危險的潛在惡意軟體向量。False(假)=不阻止【默認】;True(真)=阻止。
975 |
976 | ##### 『only_allow_images』 `[bool]`
977 | - 設置為true時,掃描程序遇到的任何非圖像文件將被立即標記,而不會被掃描。在某些情況下,這可能有助於減少完成掃描所需的時間。默認情況下設置為false。
978 |
979 | ##### 『entropy_limit』 `[float]`
980 | - 使用规范化数据的签名的熵限制(默认为7.7)。在此上下文中,熵被定义为被扫描文件内容的香农熵。当熵限制和熵文件大小限制都超出时,为了降低误报的风险,一些使用标准化数据的签名将被忽略。
981 |
982 | ##### 『entropy_filesize_limit』 `[string]`
983 | - 使用規範化資料的簽名的熵檔案大小限制(默認為256KB)。當熵限制和熵檔案大小限制都超出時,為了降低誤報的風險,一些使用標準化資料的簽章將被忽略。
984 |
985 | #### 『quarantine』 (類別)
986 | 隔離配置。
987 |
988 | ##### 『quarantine_key』 `[string]`
989 | - phpMussel能夠隔離被阻止的文件上傳,如果這個是某物您想。普通用戶的phpMussel簡單地想保護他們的網站或宿主環境無任何興趣在深深分析任何嘗試文件上傳應該離開這個功能關閉,但任何用戶有興趣在更深分析的嘗試文件上傳為目的惡意軟體研究或為類似這樣事情應該激活這個功能。檢疫的嘗試文件上傳可以有時還助攻在調試假陽性,如果這個是某物經常發生為您。以關閉檢疫功能,簡單地離開`quarantine_key`指令空白,或抹去內容的這個指令如果它不已空白。以激活隔離功能,輸入一些值在這個指令。`quarantine_key`是一個重要安全功能的隔離功能需要以預防檢疫功能從成為利用通過潛在攻擊者和以預防任何潛在執行的數據存儲在檢疫。`quarantine_key`應該被處理在同樣方法作為您的密碼:更長是更好,和緊緊保護它。為獲得最佳效果,在結合使用`delete_on_sight`。
990 |
991 | ##### 『quarantine_max_filesize』 `[string]`
992 | - 最大允許文件大小為文件在檢疫。文件大於這個指定數值將不成為檢疫。這個指令是重要為使它更難為任何潛在攻擊者洪水您的檢疫用非通緝數據潛在的造成過度數據用法在您的虛擬主機服務。 標準 = 2MB。
993 |
994 | ##### 『quarantine_max_usage』 `[string]`
995 | - 最大內存使用允許為檢疫。如果總內存已用通過隔離到達這個數值,最老檢疫文件將會刪除直到總內存已用不再到達這個數值。這個指令是重要為使它更難為任何潛在攻擊者洪水您的檢疫用非通緝數據潛在的造成過度數據用法在您的虛擬主機服務。數值是在KB。 標準 = 64MB。
996 |
997 | ##### 『quarantine_max_files』 `[int]`
998 | - 隔離中可以存在的最大文件數量。新文件添加到隔離時,如果超過此數量,則舊文件將被刪除,直到剩餘的文件不再超過此數量。 標準 = 100。
999 |
1000 | #### 『virustotal』 (類別)
1001 | Virus Total整合的配置。
1002 |
1003 | ##### 『vt_public_api_key』 `[string]`
1004 | - 可選的,phpMussel可以掃描文件使用【Virus Total API】作為一個方法提供一個顯著的改善保護級別針對病毒,木馬,惡意軟體和其他威脅。作為默認,掃描文件使用【Virus Total API】是關閉。以激活它,一個API金鑰從VirusTotal是需要。因為的顯著好處這個可以提供為您,它是某物我很推薦激活。請注意,然而,以使用的【Virus Total API】,您必須同意他們的服務條款和您必須堅持所有方針按照說明通過VirusTotal閱讀材料!您是不允許使用這個積分功能除非:您已閱讀和您同意服務條款的VirusTotal和它的API。您已閱讀和您了解至少序言的VirusTotal公共API閱讀材料(一切之後『VirusTotal Public API v2.0』但之前『Contents』)。
1005 |
1006 | 也可以看看:
1007 | - [Terms of Service](https://www.virustotal.com/en/about/terms-of-service/)
1008 | - [Getting started](https://developers.virustotal.com/reference)
1009 |
1010 | ##### 『vt_suspicion_level』 `[int]`
1011 | - 作為標準,phpMussel將限制什麼文件它掃描通過使用【Virus Total API】為那些文件它考慮作為『可疑』。您可以可選調整這個局限性通過修改的`vt_suspicion_level`指令數值。
1012 |
1013 | ```
1014 | vt_suspicion_level
1015 | ├─0 (僅掃描具有啟發式權重的文件。): 僅當文件產生啟發式權重時才會掃描文件。啟發式權重可能來自暗示感染但不能保證感染的簽名。當懷疑有道理但沒有得到證實時,查詢可以作為第二意見。
1016 | ├─1 (掃描具啟發式權重的文件、可執行文件、和可能包含可執行數據的文件。): 此類文件包括Windows PE文件、Linux
1017 | │ ELF文件、Mach-O文件、DOCX文件、ZIP文件、等等。
1018 | └─2 (掃描所有文件。)
1019 | ```
1020 |
1021 | ##### 『vt_weighting』 `[int]`
1022 | - phpMussel應使用掃描結果使用【Virus Total API】作為檢測或作為檢測重量嗎?這個指令存在,因為,雖說掃描一個文件使用多AV引擎(例如怎麼樣VirusTotal做) 應結果有一個增加檢測率(和因此在一個更惡意文件被抓),它可以還結果有更假陽性,和因此,為某些情況,掃描結果可能被更好使用作為一個置信得分而不是作為一個明確結論。如果一個數值的`0`是使用,掃描結果使用【Virus Total API】將會適用作為檢測,和因此,如果任何AV引擎使用通過VirusTotal標致文件被掃描作為惡意,phpMussel將考慮文件作為惡意。如果任何其他數值是使用,掃描結果使用【Virus Total API】將會適用作為檢測重量,和因此,數的AV引擎使用通過VirusTotal標致文件被掃描作為惡意將服務作為一個置信得分(或檢測重量) 為如果文件被掃描應會考慮惡意通過phpMussel(數值使用將代表最低限度的置信得分或重量需要以被考慮惡意)。一個數值的`0`是使用作為標準。
1023 |
1024 | ##### 『vt_quota_rate』 `[int]`
1025 | - 根據【Virus Total API】閱讀材料,它是限於最大的`4`請求的任何類型在任何`1`分鐘大致時間。如果您經營一個『honeyclient』,蜜罐或任何其他自動化將會提供資源為VirusTotal和不只取回報告您是有權一個更高請求率配額。作為標準,phpMussel將嚴格的堅持這些限制,但因為可能性的這些率配額被增加,這些二指令是提供為您指示phpMussel為什麼限它應堅持。除非您是指示這樣做,它是不推薦為您增加這些數值,但,如果您遇到問題相關的到達您的率配額,減少這些數值可能有時幫助您解析這些問題。您的率限是決定作為`vt_quota_rate`請求的任何類型在任何`vt_quota_time`分鐘大致時間。
1026 |
1027 | ##### 『vt_quota_time』 `[int]`
1028 | - (見上面的說明)。
1029 |
1030 | #### 『urlscanner』 (類別)
1031 | URL掃描程序的配置。
1032 |
1033 | ##### 『google_api_key』 `[string]`
1034 | - 激活Google Safe Browsing API當API金鑰是設置。
1035 |
1036 | 也可以看看:
1037 | - [Google API Console](https://console.developers.google.com/)
1038 |
1039 | ##### 『maximum_api_lookups』 `[int]`
1040 | - 最大數值API請求來執行每個掃描迭代。額外API請求將增加的總要求完成時間每掃描迭代,所以,您可能想來規定一個限以加快全掃描過程。當設置`0`,沒有最大數值將會應用的。設置`10`作為默認。
1041 |
1042 | ##### 『maximum_api_lookups_response』 `[bool]`
1043 | - 該什麼辦如果最大數值API請求已超過?False(假)=沒做任何事(繼續處理)【默認】;True(真)=標誌/受阻文件。
1044 |
1045 | ##### 『cache_time』 `[int]`
1046 | - 多長時間(以秒為單位)應API結果被緩存?標準是3600秒(1小時)。
1047 |
1048 | #### 『legal』 (類別)
1049 | 法律要求的配置。
1050 |
1051 | ##### 『pseudonymise_ip_addresses』 `[bool]`
1052 | - 編寫日誌文件時使用假名的IP位址嗎?True(真)=使用假名【標準】;False(假)=不使用假名。
1053 |
1054 | ##### 『privacy_policy』 `[string]`
1055 | - 要顯示在任何生成的頁面的頁腳中的相關隱私政策的地址。指定一個URL,或留空以禁用。
1056 |
1057 | #### 『supplementary_cache_options』 (類別)
1058 | 補充緩存選項。注意:更改這些值可能會使您註銷。
1059 |
1060 | ##### 『prefix』 `[string]`
1061 | - 該值將附加到所有緩存條目的鍵的開頭。 標準 = 『phpMussel_』。當同一服務器上存在多個安裝時,這對於將它們的緩存彼此分開非常有用。
1062 |
1063 | ##### 『enable_apcu』 `[bool]`
1064 | - 指定是否嘗試使用APCu進行緩存。 標準 = True。
1065 |
1066 | ##### 『enable_memcached』 `[bool]`
1067 | - 指定是否嘗試使用Memcached進行緩存。 標準 = False。
1068 |
1069 | ##### 『enable_redis』 `[bool]`
1070 | - 指定是否嘗試使用Redis進行緩存。 標準 = False。
1071 |
1072 | ##### 『enable_pdo』 `[bool]`
1073 | - 指定是否嘗試使用PDO進行緩存。 標準 = False。
1074 |
1075 | ##### 『memcached_host』 `[string]`
1076 | - Memcached 主機值。 標準 = localhost。
1077 |
1078 | ##### 『memcached_port』 `[int]`
1079 | - Memcached 端口值。 標準 = 『11211』。
1080 |
1081 | ##### 『redis_host』 `[string]`
1082 | - Redis 主機值。 標準 = localhost。
1083 |
1084 | ##### 『redis_port』 `[int]`
1085 | - Redis 端口值。 標準 = 『6379』。
1086 |
1087 | ##### 『redis_timeout』 `[float]`
1088 | - Redis 超時值。 標準 = 『2.5』。
1089 |
1090 | ##### 『redis_database_number』 `[int]`
1091 | - Redis 資料庫編號。 標準 = 『0』。 注意:不能在 Redis Cluster 中使用 0 以外的值。
1092 |
1093 | ##### 『pdo_dsn』 `[string]`
1094 | - PDO DSN值。 標準 = 『mysql:dbname=phpmussel;host=localhost;port=3306』。
1095 |
1096 | __常問問題。__ *『PDO DSN』是什麼?如何能PDO與phpMussel一起使用?*
1097 |
1098 | ##### 『pdo_username』 `[string]`
1099 | - PDO 使用者名稱。
1100 |
1101 | ##### 『pdo_password』 `[string]`
1102 | - PDO 密碼。
1103 |
1104 | #### 『frontend』 (類別)
1105 | 前端的配置。
1106 |
1107 | ##### 『frontend_log』 `[string]`
1108 | - 前端登錄嘗試的錄音文件。指定一個檔案名稱,或留空以禁用。
1109 |
1110 | 有用的提示:您可以使用時間格式佔位符將日期/時間資訊附加到日誌檔案的名稱。可用的時間格式佔位符顯示在`core➡time_format`處。
1111 |
1112 | ##### 『max_login_attempts』 `[int]`
1113 | - 最大前端登錄嘗試次數。 標準 = 5。
1114 |
1115 | ##### 『numbers』 `[string]`
1116 | - 您如何喜歡顯示數字?選擇最適合示例。
1117 |
1118 | ```
1119 | numbers
1120 | ├─Arabic-1 ("١٢٣٤٥٦٧٫٨٩")
1121 | ├─Arabic-2 ("١٬٢٣٤٬٥٦٧٫٨٩")
1122 | ├─Arabic-3 ("۱٬۲۳۴٬۵۶۷٫۸۹")
1123 | ├─Arabic-4 ("۱۲٬۳۴٬۵۶۷٫۸۹")
1124 | ├─Armenian ("Ճ̅Ի̅Գ̅ՏՇԿԷ")
1125 | ├─Base-12 ("4b6547.a8")
1126 | ├─Base-16 ("12d687.e3")
1127 | ├─Bengali-1 ("১২,৩৪,৫৬৭.৮৯")
1128 | ├─Burmese-1 ("၁၂၃၄၅၆၇.၈၉")
1129 | ├─China-1 ("123,4567.89")
1130 | ├─Chinese-Simplified ("一百二十三万四千五百六十七点八九")
1131 | ├─Chinese-Simplified-Financial ("壹佰贰拾叁萬肆仟伍佰陆拾柒点捌玖")
1132 | ├─Chinese-Traditional ("一百二十三萬四千五百六十七點八九")
1133 | ├─Chinese-Traditional-Financial ("壹佰貳拾叄萬肆仟伍佰陸拾柒點捌玖")
1134 | ├─Fullwidth ("1234567.89")
1135 | ├─Geez ("፻፳፫፼፵፭፻፷፯")
1136 | ├─Hebrew ("א׳׳ב׳קג׳יד׳ךסז")
1137 | ├─India-1 ("12,34,567.89")
1138 | ├─India-2 ("१२,३४,५६७.८९")
1139 | ├─India-3 ("૧૨,૩૪,૫૬૭.૮૯")
1140 | ├─India-4 ("੧੨,੩੪,੫੬੭.੮੯")
1141 | ├─India-5 ("೧೨,೩೪,೫೬೭.೮೯")
1142 | ├─India-6 ("౧౨,౩౪,౫౬౭.౮౯")
1143 | ├─Japanese ("百万二十万三万四千五百六十七・八九分")
1144 | ├─Javanese ("꧑꧒꧓꧔꧕꧖꧗.꧘꧙")
1145 | ├─Khmer-1 ("១.២៣៤.៥៦៧,៨៩")
1146 | ├─Lao-1 ("໑໒໓໔໕໖໗.໘໙")
1147 | ├─Latin-1 ("1,234,567.89")
1148 | ├─Latin-2 ("1 234 567.89")
1149 | ├─Latin-3 ("1.234.567,89")
1150 | ├─Latin-4 ("1 234 567,89")
1151 | ├─Latin-5 ("1,234,567·89")
1152 | ├─Mayan ("𝋧𝋮𝋦𝋨𝋧.𝋱𝋰")
1153 | ├─Mongolian ("᠑᠒᠓᠔᠕᠖᠗.᠘᠙")
1154 | ├─NoSep-1 ("1234567.89")
1155 | ├─NoSep-2 ("1234567,89")
1156 | ├─Odia ("୧୨୩୪୫୬୭.୮୯")
1157 | ├─Roman ("M̅C̅C̅X̅X̅X̅I̅V̅DLXVII")
1158 | ├─SDN-Dwiggins ("4E6,547;X8")
1159 | ├─SDN-Pitman ("4↋6,547;↊8")
1160 | ├─Tamil ("௲௲௨௱௲௩௰௲௪௲௫௱௬௰௭")
1161 | ├─Thai-1 ("๑,๒๓๔,๕๖๗.๘๙")
1162 | ├─Thai-2 ("๑๒๓๔๕๖๗.๘๙")
1163 | └─Tibetan ("༡༢༣༤༥༦༧.༨༩")
1164 | ```
1165 |
1166 | ##### 『default_algo』 `[string]`
1167 | - 定義要用於所有未來密碼和會話的算法。
1168 |
1169 | ```
1170 | default_algo
1171 | ├─PASSWORD_DEFAULT ("PASSWORD_DEFAULT")
1172 | ├─PASSWORD_BCRYPT ("PASSWORD_BCRYPT")
1173 | ├─PASSWORD_ARGON2I ("PASSWORD_ARGON2I")
1174 | └─PASSWORD_ARGON2ID ("PASSWORD_ARGON2ID (PHP >= 7.3.0)")
1175 | ```
1176 |
1177 | ##### 『theme』 `[string]`
1178 | - 用於前端的主題。
1179 |
1180 | ```
1181 | theme
1182 | ├─default ("Default")
1183 | ├─bluemetal ("Blue Metal")
1184 | ├─fullmoon ("Full Moon")
1185 | ├─moss ("Moss")
1186 | ├─primer ("Primer")
1187 | ├─primerdark ("Primer Dark")
1188 | ├─rbi ("Red-Blue Inverted")
1189 | ├─slate ("Slate")
1190 | └─…其他
1191 | ```
1192 |
1193 | ##### 『theme_mode』 `[string]`
1194 | - 用於前端的主題模式。
1195 |
1196 | ```
1197 | theme_mode
1198 | ├─normal ("普通的")
1199 | └─inverted ("倒置的")
1200 | ```
1201 |
1202 | ##### 『magnification』 `[float]`
1203 | - 字型放大。 標準 = 1。
1204 |
1205 | ##### 『custom_header』 `[string]`
1206 | - 在所有前端頁面的開頭作為HTML插入。如果您想在所有此類頁面中包含網站徽標、個性化標題、腳本、或類似,這可能會很有用。
1207 |
1208 | ##### 『custom_footer』 `[string]`
1209 | - 在所有前端頁面的末尾作為HTML插入。如果您想在所有此類頁面中包含法律聲明、聯繫鏈接、業務信息、或類似,這可能會很有用。
1210 |
1211 | #### 『web』 (類別)
1212 | 上傳處理程序的配置。
1213 |
1214 | ##### 『uploads_log』 `[string]`
1215 | - 應該記錄所有阻止的上傳的位置。指定一個檔案名稱,或留空以關閉。
1216 |
1217 | 有用的提示:您可以使用時間格式佔位符將日期/時間資訊附加到日誌檔案的名稱。可用的時間格式佔位符顯示在`core➡time_format`處。
1218 |
1219 | ##### 『forbid_on_block』 `[bool]`
1220 | - phpMussel應該發送`403`頭隨著文件上傳受阻信息,或堅持標準`200 OK`?False(假)=發送`200`;True(真)=發送`403`【標準】。
1221 |
1222 | ##### 『unsupported_media_type_header』 `[bool]`
1223 | - 當上傳因列入黑名單的文件類型而被阻止時,phpMussel是否應該發送415標頭?如果為true(真),此設置將取代`forbid_on_block`。False(假)=不發送【標準】;True(真)=發送。
1224 |
1225 | ##### 『max_uploads』 `[int]`
1226 | - 最大允許數值的文件為掃描當文件上傳掃描之前中止掃描和告訴用戶他們是上傳太多在同一時間!提供保護針對一個理論攻擊哪裡一個攻擊者嘗試DDoS您的系統或CMS通過超載phpMussel以減速PHP進程到一個停止。推薦:10。您可能想增加或減少這個數值,根據速度的您的硬件。注意這個數值不交待為或包括存檔內容。
1227 |
1228 | ##### 『ignore_upload_errors』 `[bool]`
1229 | - 這個指令按說應會關閉除非它是需要為對功能的phpMussel在您的具體系統。按說,當是關閉,當phpMussel檢測存在元素在`$_FILES`數組,它將嘗試引發一個掃描的文件代表通過那些元素,和,如果他們是空或空白,phpMussel將回報一個錯誤信息。這個是正確行為為phpMussel。然而,為某些CMS,空元素在`$_FILES`可以發生因之的自然的行為的那些CMS,或錯誤可能會報告當沒有任何,在這種情況,正常行為為phpMussel將會使乾擾為正常行為的那些CMS。如果這樣的一個情況發生為您,激活這個指令將指示phpMussel不嘗試引發掃描為這樣的空元素,忽略他們當發現和不回報任何關聯錯誤信息,從而允許延續的頁面請求。False(假)=不忽略;True(真)=忽略。
1230 |
1231 | ##### 『theme』 `[string]`
1232 | - 用於阻止事件的主題。
1233 |
1234 | ```
1235 | theme
1236 | ├─default ("Default")
1237 | ├─bluemetal ("Blue Metal")
1238 | ├─fullmoon ("Full Moon")
1239 | ├─moss ("Moss")
1240 | ├─primer ("Primer")
1241 | ├─primerdark ("Primer Dark")
1242 | ├─rbi ("Red-Blue Inverted")
1243 | ├─slate ("Slate")
1244 | └─…其他
1245 | ```
1246 |
1247 | ##### 『theme_mode』 `[string]`
1248 | - 用於阻止事件的主題模式。
1249 |
1250 | ```
1251 | theme_mode
1252 | ├─normal ("普通的")
1253 | └─inverted ("倒置的")
1254 | ```
1255 |
1256 | ##### 『magnification』 `[float]`
1257 | - 字型放大。標準 = 1。
1258 |
1259 | ##### 『custom_header』 `[string]`
1260 | - 在所有『上傳是否認』頁面的開頭作為HTML插入。如果您想在所有此類頁面中包含網站徽標、個性化標題、腳本、或類似,這可能會很有用。
1261 |
1262 | ##### 『custom_footer』 `[string]`
1263 | - 在所有『上傳是否認』頁面的末尾作為HTML插入。如果您想在所有此類頁面中包含法律聲明、聯繫鏈接、業務信息、或類似,這可能會很有用。
1264 |
1265 | #### 『phpmailer』 (類別)
1266 | PHPMailer的配置(用於雙重認證和電子郵件通知)。
1267 |
1268 | ##### 『event_log』 `[string]`
1269 | - 用於記錄與PHPMailer相關的所有事件的文件。指定一個檔案名稱,或留空以禁用。
1270 |
1271 | 有用的提示:您可以使用時間格式佔位符將日期/時間資訊附加到日誌檔案的名稱。可用的時間格式佔位符顯示在`core➡time_format`處。
1272 |
1273 | ##### 『enable_two_factor』 `[bool]`
1274 | - 該指令確定是否將2FA用於前端帳戶。
1275 |
1276 | ##### 『enable_notifications』 `[string]`
1277 | - 如果要在阻止上傳時通過電子郵件收到通知,請在此處指定收件人電子郵件地址。
1278 |
1279 | ##### 『skip_auth_process』 `[bool]`
1280 | - 將此指令設置為`true`會指示PHPMailer跳過通過SMTP發送電子郵件時通常會發生的正常身份驗證過程。應該避免這種情況,因為跳過此過程可能會將出站電子郵件暴露給MITM攻擊,但在此過程阻止PHPMailer連接到SMTP服務器的情況下可能是必要的。
1281 |
1282 | ##### 『host』 `[string]`
1283 | - 用於出站電子郵件的SMTP主機。
1284 |
1285 | ##### 『port』 `[int]`
1286 | - 用於出站電子郵件的端口號。標準=587。
1287 |
1288 | ##### 『smtp_secure』 `[string]`
1289 | - 通過SMTP發送電子郵件時使用的協定(TLS或SSL)。
1290 |
1291 | ```
1292 | smtp_secure
1293 | ├─default ("-")
1294 | ├─tls ("TLS")
1295 | └─ssl ("SSL")
1296 | ```
1297 |
1298 | ##### 『smtp_auth』 `[bool]`
1299 | - 此指令確定是否對SMTP會話進行身份驗證(通常應該保持不變)。
1300 |
1301 | ##### 『username』 `[string]`
1302 | - 通過SMTP發送電子郵件時使用的使用者名稱。
1303 |
1304 | ##### 『password』 `[string]`
1305 | - 通過SMTP發送電子郵件時使用的密碼。
1306 |
1307 | ##### 『set_from_address』 `[string]`
1308 | - 通過SMTP發送電子郵件時引用的發件人地址。
1309 |
1310 | ##### 『set_from_name』 `[string]`
1311 | - 通過SMTP發送電子郵件時引用的發件人姓名。
1312 |
1313 | ##### 『add_reply_to_address』 `[string]`
1314 | - 通過SMTP發送電子郵件時引用的回复地址。
1315 |
1316 | ##### 『add_reply_to_name』 `[string]`
1317 | - 通過SMTP發送電子郵件時引用的回複姓名。
1318 |
1319 | ---
1320 |
1321 |
1322 | ### 6. 簽名格式
1323 |
1324 | *也可以看看:*
1325 | - *[什麼是『簽名』?](#user-content-WHAT_IS_A_SIGNATURE)*
1326 |
1327 | phpMussel簽名檔案前9個位元組(`[x0-x8]`)是`phpMussel`。它作為一個『魔術數字』【magic number】,將其標識為簽名檔案(這有助於防止phpMussel意外地嘗試使用文件不是簽名檔案)。下一個位元組`[x9]`標識簽名檔案的類型。這一點必須知道以便能夠正確解釋簽名檔案。以下類型的簽名檔案被認可:
1328 |
1329 | 類型 | 位元組 | 說明
1330 | ---|---|---
1331 | `General_Command_Detections` | `0?` | 為CSV(逗號分隔值)簽名檔案。值(簽名)是在文件中查找的十六進制編碼字符串。這裡的簽名沒有任何名稱或其他詳細信息(只有要檢測的字符串)。
1332 | `Filename` | `1?` | 為文件名簽名。
1333 | `Hash` | `2?` | 為哈希簽名。
1334 | `Standard` | `3?` | 為與文件內容直接工作的簽名檔案。
1335 | `Standard_RegEx` | `4?` | 為與文件內容直接工作的簽名檔案。簽名可以包含正則表達式。
1336 | `Normalised` | `5?` | 為用於ANSI標準化文件內容的簽名檔案。
1337 | `Normalised_RegEx` | `6?` | 為用於ANSI標準化文件內容的簽名檔案。簽名可以包含正則表達式。
1338 | `HTML` | `7?` | 為用於HTML標準化文件內容的簽名檔案。
1339 | `HTML_RegEx` | `8?` | 為用於HTML標準化文件內容的簽名檔案。簽名可以包含正則表達式。
1340 | `PE_Extended` | `9?` | 為使用PE元數據的簽名檔案(但不PE部分元數據)。
1341 | `PE_Sectional` | `A?` | 為使用PE部分元數據的簽名檔案。
1342 | `Complex_Extended` | `B?` | 為使用各種規則的簽名檔案,基於由phpMussel生成的擴展元數據。
1343 | `URL_Scanner` | `C?` | 為使用URL的簽名檔案。
1344 |
1345 | 下一個位元組`[x10]`是一個換行符`[0A]`,並結束phpMussel簽名檔案頭。
1346 |
1347 | 之後的每個非空行都是簽名或規則。每個簽名或規則佔用一行。支持的簽名格式如下所述。
1348 |
1349 | #### *文件名簽名*
1350 | 所有文件名簽名跟隨格式:
1351 |
1352 | `NAME:FNRX`
1353 |
1354 | `NAME`是名援引為簽名和`FNRX`是正則表達式匹配文件名(未編碼)為。
1355 |
1356 | #### *哈希簽名*
1357 | 所有哈希簽名跟隨格式:
1358 |
1359 | `HASH:FILESIZE:NAME`
1360 |
1361 | `HASH`是全文件的哈希(通常是MD5),`FILESIZE`是總文件大小和`NAME`是名援引為簽名。
1362 |
1363 | #### *移植可執行【PE】部分簽名*
1364 | 所有移植可執行【PE】部分簽名跟隨格式:
1365 |
1366 | `SIZE:HASH:NAME`
1367 |
1368 | `HASH`是一個MD5哈希的一個部分的一個移植可執行【PE】文件,`SIZE`是總大小的該部分和`NAME`是名援引為簽名。
1369 |
1370 | #### *移植可執行【PE】擴展簽名*
1371 | 所有移植可執行【PE】擴展簽名跟隨格式:
1372 |
1373 | `$VAR:HASH:SIZE:NAME`
1374 |
1375 | `$VAR`是移植可執行【PE】變量名匹配為,`HASH`是一個MD5哈希的該變量,`SIZE`是總大小的該變量和`NAME`是名援引為簽名。
1376 |
1377 | #### *複雜擴展簽名*
1378 | 複雜擴展簽名是寧不同從其他可能phpMussel簽名類型,在某種意義上說,什麼他們匹配針對是指定通過這些簽名他們自己和他們可以匹配針對多重標準。多重標準是分隔通過【;】和匹配類型和匹配數據的每多重標準是分隔通過【:】以確保格式為這些簽名往往看起來有點像:
1379 |
1380 | `$變量1:某些數據;$變量2:某些數據;簽名等等`
1381 |
1382 | #### *一切其他*
1383 | 所有其他簽名跟隨格式:
1384 |
1385 | `NAME:HEX:FROM:TO`
1386 |
1387 | `NAME`是名援引為簽名和`HEX`是一個十六進制編碼分割的文件意味被匹配通過有關簽名。`FROM`和`TO`是可選參數,說明從哪里和向哪裡在源數據匹配針對。
1388 |
1389 | #### *正則表達式/REGEX*
1390 | 任何形式的正則表達式了解和正確地處理通過PHP應還會正確地了解和處理通過phpMussel和它的簽名。然而,我將建議採取極端謹慎當寫作新正則表達式為基礎的簽名,因為,如果您不完全肯定什麼您被做,可以有很不規則和/或意外結果。看一眼的phpMussel源代碼如果您不完全肯定的上下文其中正則表達式語句被處理。還,記得,所有語句(除外為文件名,存檔元數據和MD5語句)必須是十六進制編碼(和除外為語句句法,還,當然)!
1391 |
1392 | ---
1393 |
1394 |
1395 | ### 7. 已知的兼容問題
1396 |
1397 | #### 殺毒軟件兼容性
1398 |
1399 | 有時phpMussel和其他防病毒解決方案之間存在兼容性問題。因此,大約每隔幾個月,我對照Virus Total檢查了最新版本的phpMussel代碼庫,為了看那裡是否報告了任何問題。報告了問題時,我會在文檔中在此處列出報告的問題。
1400 |
1401 | 當我最近檢查(2022年5月12日)時,沒有任何問題的報告。
1402 |
1403 | 我不檢查簽名檔案,文檔或其他外圍內容。當其他防病毒解決方案檢測到簽名檔案時,它們總是會引起一些誤報(假陽性)。因此,我強烈建議,如果您打算在已經存在另一種防病毒解決方案的計算機上安裝phpMussel,將phpMussel簽名檔案列入白名單。
1404 |
1405 | *也可以看看:[兼容性圖表](https://maikuolan.github.io/Compatibility-Charts/)。*
1406 |
1407 | ---
1408 |
1409 |
1410 | ### 8. 常見問題(FAQ)
1411 |
1412 | - [什麼是『簽名』?](#user-content-WHAT_IS_A_SIGNATURE)
1413 | - [什麼是『假陽性』?](#user-content-WHAT_IS_A_FALSE_POSITIVE)
1414 | - [什麼是簽名更新頻率?](#user-content-SIGNATURE_UPDATE_FREQUENCY)
1415 | - [我在使用phpMussel時遇到問題和我不知道該怎麼辦!請幫忙!](#user-content-ENCOUNTERED_PROBLEM_WHAT_TO_DO)
1416 | - [我想使用phpMussel v3與早於7.2.0的PHP版本;您能幫我嗎?](#user-content-MINIMUM_PHP_VERSION_V3)
1417 | - [我可以使用單個phpMussel安裝來保護多個域嗎?](#user-content-PROTECT_MULTIPLE_DOMAINS)
1418 | - [我不想浪費時間安裝這個和確保它在我的網站上功能正常;我可以僱用您這樣做嗎?](#user-content-PAY_YOU_TO_DO_IT)
1419 | - [我可以聘請您或這個項目的任何開發者私人工作嗎?](#user-content-HIRE_FOR_PRIVATE_WORK)
1420 | - [我需要專家修改,的定制,等等;您能幫我嗎?](#user-content-SPECIALIST_MODIFICATIONS)
1421 | - [我是開發人員,網站設計師,或程序員。我可以接受還是提供與這個項目有關的工作?](#user-content-ACCEPT_OR_OFFER_WORK)
1422 | - [我想為這個項目做出貢獻;我可以這樣做嗎?](#user-content-WANT_TO_CONTRIBUTE)
1423 | - [掃描時如何訪問文件的具體細節?](#user-content-SCAN_DEBUGGING)
1424 | - [黑名單 – 白名單 – 灰名單 – 他們是什麼,我如何使用它們?](#user-content-BLACK_WHITE_GREY)
1425 | - [『PDO DSN』是什麼?如何能PDO與phpMussel一起使用?](#user-content-HOW_TO_USE_PDO)
1426 | - [我的上傳工具是異步的(例如,使用ajax,ajaj,json,等等)。當上傳阻止時,我看不到任何特殊消息或警告。發生了什麼?](#user-content-AJAX_AJAJ_JSON)
1427 | - [phpMussel可以檢測EICAR嗎?](#user-content-DETECT_EICAR)
1428 |
1429 | #### 什麼是『簽名』?
1430 |
1431 | 在phpMussel的上下文中,『簽名』是用於識別我們正在尋找的特定內容的數據,它通常採取一些非常小,不同,無害的一些更大和有害的東西的形式(例如,它可以識別病毒,木馬,等等)。也可以是文件校驗和,哈希或其他類似的標識符。通常包括一個標籤和一些其他數據,以幫助提供額外的上下文,可以由phpMussel使用它來確定遇到我們正在尋找的最佳方法。
1432 |
1433 | #### 什麼是『假陽性』?
1434 |
1435 | 術語『假陽性』(*或者:『假陽性錯誤』;『虛驚』*;英語:*false positive*; *false positive error*; *false alarm*),很簡單地描述,和在一個廣義上下文,被用來當測試一個因子,作為參考的測試結果,當結果是陽性(即:因子被確定為『陽性』,或『真』),但預計將為(或者應該是)陰性(即:因子,在現實中,是『陰性』,或『假』)。一個『假陽性』可被認為是同樣的『哭狼』 (其中,因子被測試是是否有狼靠近牛群,因子是『假』由於該有沒有狼靠近牛群,和因子是報告為『陽性』由牧羊人通過叫喊『狼,狼』),或類似在醫學檢測情況,當患者被診斷有一些疾病,當在現實中,他們沒有疾病。
1436 |
1437 | 一些相關術語是『真陽性』,『真陰性』和『假陰性』。一個『真陽性』指的是當測試結果和真實因子狀態都是『真』(或『陽性』),和一個『真陰性』指的是當測試結果和真實因子狀態都是『假』(或『陰性』);一個『真陽性』或『真陰性』被認為是一個『正確的推理』。對立面『假陽性』是一個『假陰性』;一個『假陰性』指的是當測試結果是『陰性』(即:因子被確定為『陰性』,或『假』),但預計將為(或者應該是)陽性(即:因子,在現實中,是『陽性』,或『真』)。
1438 |
1439 | 在phpMussel的上下文,這些術語指的是phpMussel的簽名和他們阻止的文件。當phpMussel阻止一個文件由於惡劣的,過時的,或不正確的簽名,但不應該這樣做,或當它這樣做為錯誤的原因,我們將此事件作為一個『假陽性』。當phpMussel未能阻止文件該應該已被阻止,由於不可預見的威脅,缺少簽名或不足簽名,我們將此事件作為一個『檢測錯過』(同樣的『假陰性』)。
1440 |
1441 | 這可以通過下表來概括:
1442 |
1443 | | phpMussel不應該阻止文件 | phpMussel應該阻止文件
1444 | ---|---|---
1445 | phpMussel不會阻止文件 | 真陰性(正確的推理) | 檢測錯過(同樣的『假陰性』)
1446 | phpMussel會阻止文件 | __假陽性__ | 真陽性(正確的推理)
1447 |
1448 | #### 什麼是簽名更新頻率?
1449 |
1450 | 更新頻率根據相關的簽名檔案而有所不同。所有的phpMussel簽名檔案的維護者通常盡量保持他們的簽名為最新,但是因為我們所有人都有各種其他承諾,和因為我們的生活超越了項目,和因為我們不得到經濟補償/付款為我們的項目的努力,無法保證精確的更新時間表。通常,簽名被更新每當有足夠的時間。幫助總是感謝,如果你願意提供任何。
1451 |
1452 | #### 我在使用phpMussel時遇到問題和我不知道該怎麼辦!請幫忙!
1453 |
1454 | - 您使用軟件的最新版本嗎?您使用簽名檔案的最新版本嗎?如果這兩個問題的答案是不,嘗試首先更新一切,然後檢查問題是否仍然存在。如果它仍然存在,繼續閱讀。
1455 | - 您檢查過所有的文檔嗎?如果沒有做,請這樣做。如果文檔不能解決問題,繼續閱讀。
1456 | - 您檢查過[issues頁面](https://github.com/phpMussel/phpMussel/issues)嗎?檢查是否已經提到了問題。如果已經提到了,請檢查是否提供了任何建議,想法或解決方案。按照需要嘗試解決問題。
1457 | - 如果問題仍然存在,請通過在issues頁面上創建新issue尋求幫助。
1458 |
1459 | #### 我想使用phpMussel v3與早於7.2.0的PHP版本;您能幫我嗎?
1460 |
1461 | 不能。PHP≥7.2是phpMussel v3的最低要求。
1462 |
1463 | *也可以看看:[兼容性圖表](https://maikuolan.github.io/Compatibility-Charts/)。*
1464 |
1465 | #### 我可以使用單個phpMussel安裝來保護多個域嗎?
1466 |
1467 | 可以。
1468 |
1469 | #### 我不想浪費時間安裝這個和確保它在我的網站上功能正常;我可以僱用您這樣做嗎?
1470 |
1471 | 也許。這是根據具體情況考慮的。告訴我們您需要什麼,您提供什麼,和我們會告訴您是否可以幫忙。
1472 |
1473 | #### 我可以聘請您或這個項目的任何開發者私人工作嗎?
1474 |
1475 | *參考上面。*
1476 |
1477 | #### 我需要專家修改,的定制,等等;您能幫我嗎?
1478 |
1479 | *參考上面。*
1480 |
1481 | #### 我是開發人員,網站設計師,或程序員。我可以接受還是提供與這個項目有關的工作?
1482 |
1483 | 您可以。我們的許可證並不禁止這一點。
1484 |
1485 | #### 我想為這個項目做出貢獻;我可以這樣做嗎?
1486 |
1487 | 您可以。對項目的貢獻是歡迎。有關詳細信息,請參閱『CONTRIBUTING.md』。
1488 |
1489 | #### 掃描時如何訪問文件的具體細節?
1490 |
1491 | 在啟動掃描之前,請分配一個數組以用於此目的。
1492 |
1493 | 在下面的例子中,`$Foo` 是分配以用於此目的。掃描 `/文件/路徑/...` 後,關於 `/文件/路徑/...` 所包含的文件的信息將包含在 `$Foo` 中。
1494 |
1495 | ```PHP
1496 | setScanDebugArray($Foo);
1501 |
1502 | $Results = $Scanner->scan('/文件/路徑/...');
1503 |
1504 | var_dump($Foo);
1505 | ```
1506 |
1507 | 數組是多維的。元素表示掃描的每個文件。子元素表示這些文件的詳細信息。子要素如下:
1508 |
1509 | - Filename (`string`)
1510 | - FromCache (`bool`)
1511 | - Depth (`int`)
1512 | - Size (`int`)
1513 | - MD5 (`string`)
1514 | - SHA1 (`string`)
1515 | - SHA256 (`string`)
1516 | - CRC32B (`string`)
1517 | - 2CC (`string`)
1518 | - 4CC (`string`)
1519 | - ScanPhase (`string`)
1520 | - Container (`string`)
1521 | - † FileSwitch (`string`)
1522 | - † Is_ELF (`bool`)
1523 | - † Is_Graphics (`bool`)
1524 | - † Is_HTML (`bool`)
1525 | - † Is_Email (`bool`)
1526 | - † Is_MachO (`bool`)
1527 | - † Is_PDF (`bool`)
1528 | - † Is_SWF (`bool`)
1529 | - † Is_PE (`bool`)
1530 | - † Is_Not_HTML (`bool`)
1531 | - † Is_Not_PHP (`bool`)
1532 | - ‡ NumOfSections (`int`)
1533 | - ‡ PEFileDescription (`string`)
1534 | - ‡ PEFileVersion (`string`)
1535 | - ‡ PEProductName (`string`)
1536 | - ‡ PEProductVersion (`string`)
1537 | - ‡ PECopyright (`string`)
1538 | - ‡ PEOriginalFilename (`string`)
1539 | - ‡ PECompanyName (`string`)
1540 | - Results (`int`)
1541 | - Output (`string`)
1542 |
1543 | *† - 在緩存結果中沒有提供 (僅在新的掃描結果中提供)。*
1544 |
1545 | *‡ - 僅在掃描PE文件時提供。*
1546 |
1547 | 如果您想,可以通過使用以下命令來破壞此數組:
1548 |
1549 | ```PHP
1550 | $Scanner->destroyScanDebugArray($Foo);
1551 | ```
1552 |
1553 | #### 黑名單 – 白名單 – 灰名單 – 他們是什麼,我如何使用它們?
1554 |
1555 | 這些術語在不同的上下文中表達不同的含義。在phpMussel中,有三個使用這些術語的上下文:文件大小響應,文件類型響應,和簽名灰名單。
1556 |
1557 | 為了以最低的處理成本達到理想的效果,phpMussel在實際掃描文件之前可以檢查一些簡單的事情,如文件的大小,名稱和擴展名。例如;如果文件太大,或者其擴展名表示在我們的網站上我們不想要的文件類型,我們可以立即標記文件,並且不需要掃描它。
1558 |
1559 | 文件大小響應是phpMussel在文件超出指定限制時響應的方式。沒有涉及實際列表,但根據文件的大小,文件可能會在黑名單,白名單或灰名單中被有效考慮了。存在兩種不同的可選配置指令來分別指定限制和期望的響應。
1560 |
1561 | 文件類型響應是phpMussel在文件擴展名時響應的方式。存在三種不同的可選配置指令,用於明確指定哪些擴展應在黑名單,白名單和灰名單中位於。如果文件的擴展名分別與指定的擴展名匹配,則可以在黑名單,白名單或灰名單中該文件有效地考慮了。
1562 |
1563 | 在這兩種上下文中,在白名單上意味著它不應該被掃描或標記;在黑名單上意味著它應該被標記(因此不需要掃描它);和在灰名單上意味著需要進一步的分析來確定是否我們應該標記它(即,它應該被掃描)。
1564 |
1565 | 簽名灰名單是基本上應該忽略的簽名列表(這在文檔中已經簡要地提到了)。當灰名單上的簽名被觸發時,phpMussel繼續通過其簽名工作,並且對於在灰名單上的簽名不要採取任何特殊行動。沒有簽名黑名單,因為隱含的行為無論和触發簽名的正常的行為是一樣的,並且沒有簽名白名單,因為考慮到phpMussel的正常的工作方式以及它的已有的功能,隱含的行為不會有意義。
1566 |
1567 | 如果您需要解決由特定簽名造成的問題,並且不想禁用或卸載整個簽名檔案,則簽名灰名單很有用。
1568 |
1569 | #### 『PDO DSN』是什麼?如何能PDO與phpMussel一起使用?
1570 |
1571 | 『PDO』 是 『[PHP Data Objects](https://www.php.net/manual/zh/intro.pdo.php)』 的首字母縮寫(它的意思是『PHP數據對象』)。它為PHP提供了一個接口,使其能夠連接到各種PHP應用程序通常使用的某些資料庫系統。
1572 |
1573 | 『DSN』 是 『[data source name](https://en.wikipedia.org/wiki/Data_source_name)』 的首字母縮寫(它的意思是『數據源名稱』)。『PDO DSN』向PDO描述了它應如何連接到資料庫。
1574 |
1575 | phpMussel可以將PDO用於緩存。為了使其正常工作,您需要相應地配置phpMussel,從而啟用PDO,需要為phpMussel創建一個新資料庫以供使用(如果您尚未想到要供phpMussel使用的資料庫),並需要按照以下結構在資料庫中創建一個新表。
1576 |
1577 | 當資料庫連接成功時,但是必要的表不存在,表自動創建將嘗試。但是,此行為尚未經過廣泛測試,因此無法保證成功。
1578 |
1579 | 當然,這僅在您確實希望phpMussel使用PDO時適用。如果您對phpMussel使用平面文件緩存(按照其標準配置)或提供的任何其他各種緩存選項感到足夠滿意,則無需費心設置資料庫,資料庫表,等等。
1580 |
1581 | 下面描述的結構使用『phpmussel』作為其資料庫名稱,但是您可以使用任何想要的資料庫名稱,只要在DSN配置中名稱被複製。
1582 |
1583 | ```
1584 | ╔══════════════════════════════════════════════╗
1585 | ║ DATABASE "phpmussel" ║
1586 | ║ │╔═══════════════════════════════════════════╩═════╗
1587 | ║ └╫─TABLE "Cache" (UTF-8) ║
1588 | ║ ╠═╪═FIELD══CHARSET═DATATYPE═════KEY══NULL═DEFAULT═╣
1589 | ║ ║ ├─"Key"──UTF-8───VARCHAR(128)─PRI──×────× ║
1590 | ║ ║ ├─"Data"─UTF-8───TEXT─────────×────×────× ║
1591 | ╚══╣ └─"Time"─×───────INT(>=10)────×────×────× ║
1592 | ╚═════════════════════════════════════════════════╝
1593 | ```
1594 |
1595 | phpMussel的`pdo_dsn`應配置如下。
1596 |
1597 | ```
1598 | 取決於所使用的資料庫驅動程序......
1599 | ├─4d (警告:實驗性,未經測試,不建議!)
1600 | │ │
1601 | │ │ ╔═══════╗
1602 | │ └─4D:host=localhost;charset=UTF-8
1603 | │ ╚╤══════╝
1604 | │ └要查找資料庫的主機。
1605 | ├─cubrid
1606 | │ │
1607 | │ │ ╔═══════╗ ╔═══╗ ╔═════╗
1608 | │ └─cubrid:host=localhost;port=33000;dbname=example
1609 | │ ╚╤══════╝ ╚╤══╝ ╚╤════╝
1610 | │ │ │ └要使用的資料庫的名稱。
1611 | │ │ │
1612 | │ │ └連接的主機端口號。
1613 | │ │
1614 | │ └要查找資料庫的主機。
1615 | ├─dblib
1616 | │ │
1617 | │ │ ╔═══╗ ╔═══════╗ ╔═════╗
1618 | │ └─dblib:host=localhost;dbname=example
1619 | │ ╚╤══╝ ╚╤══════╝ ╚╤════╝
1620 | │ │ │ └要使用的資料庫的名稱。
1621 | │ │ │
1622 | │ │ └要查找資料庫的主機。
1623 | │ │
1624 | │ └可能的值: 『mssql』, 『sybase』, 『dblib』。
1625 | ├─firebird
1626 | │ │
1627 | │ │ ╔═══════════════════╗
1628 | │ └─firebird:dbname=/path/to/database.fdb
1629 | │ ╚╤══════════════════╝
1630 | │ ├可以是本地資料庫文件的路徑。
1631 | │ │
1632 | │ ├可以連接主機和端口號。
1633 | │ │
1634 | │ └如果要使用此功能,請參閱Firebird文檔。
1635 | ├─ibm
1636 | │ │
1637 | │ │ ╔═════╗
1638 | │ └─ibm:DSN=example
1639 | │ ╚╤════╝
1640 | │ └要連接的在目錄中資料庫。
1641 | ├─informix
1642 | │ │
1643 | │ │ ╔═════╗
1644 | │ └─informix:DSN=example
1645 | │ ╚╤════╝
1646 | │ └要連接的在目錄中資料庫。
1647 | ├─mysql (最推薦!)
1648 | │ │
1649 | │ │ ╔═════╗ ╔═══════╗ ╔══╗
1650 | │ └─mysql:dbname=example;host=localhost;port=3306
1651 | │ ╚╤════╝ ╚╤══════╝ ╚╤═╝
1652 | │ │ │ └連接的主機端口號。
1653 | │ │ │
1654 | │ │ └要查找資料庫的主機。
1655 | │ │
1656 | │ └要使用的資料庫的名稱。
1657 | ├─oci
1658 | │ │
1659 | │ │ ╔═════╗
1660 | │ └─oci:dbname=example
1661 | │ ╚╤════╝
1662 | │ ├可以參考特定的在目錄中資料庫。
1663 | │ │
1664 | │ ├可以連接主機和端口號。
1665 | │ │
1666 | │ └如果要使用此功能,請參閱Oracle文檔。
1667 | ├─odbc
1668 | │ │
1669 | │ │ ╔═════╗
1670 | │ └─odbc:example
1671 | │ ╚╤════╝
1672 | │ ├可以參考特定的在目錄中資料庫。
1673 | │ │
1674 | │ ├可以連接主機和端口號。
1675 | │ │
1676 | │ └如果要使用此功能,請參閱ODBC/DB2文檔。
1677 | ├─pgsql
1678 | │ │
1679 | │ │ ╔═══════╗ ╔══╗ ╔═════╗
1680 | │ └─pgsql:host=localhost;port=5432;dbname=example
1681 | │ ╚╤══════╝ ╚╤═╝ ╚╤════╝
1682 | │ │ │ └要使用的資料庫的名稱。
1683 | │ │ │
1684 | │ │ └連接的主機端口號。
1685 | │ │
1686 | │ └要查找資料庫的主機。
1687 | ├─sqlite
1688 | │ │
1689 | │ │ ╔════════╗
1690 | │ └─sqlite:example.db
1691 | │ ╚╤═══════╝
1692 | │ └要使用的本地資料庫文件的路徑。
1693 | └─sqlsrv
1694 | │
1695 | │ ╔═══════╗ ╔══╗ ╔═════╗
1696 | └─sqlsrv:Server=localhost,1521;Database=example
1697 | ╚╤══════╝ ╚╤═╝ ╚╤════╝
1698 | │ │ └要使用的資料庫的名稱。
1699 | │ │
1700 | │ └連接的主機端口號。
1701 | │
1702 | └要查找資料庫的主機。
1703 | ```
1704 |
1705 | 如果不確定如何構造DSN,請嘗試先查看它是否按原樣工作,而不進行任何更改。
1706 |
1707 | 請注意, `pdo_username` 和 `pdo_password` 應與您為資料庫選擇的使用者名稱和密碼相同。
1708 |
1709 | #### 我的上傳工具是異步的(例如,使用ajax,ajaj,json,等等)。當上傳阻止時,我看不到任何特殊消息或警告。發生了什麼?
1710 |
1711 | 這很正常。phpMussel的標準『上傳是否認』頁面作為HTML。對於典型的同步請求應該足夠了,但是如果您的上傳工具需要一些不同的東西,可能還不夠。如果您的上傳工具是異步的,或者希望異步提供上傳狀態,為了使phpMussel能夠滿足您的上傳工具的需求,您可以嘗試做一些事情。
1712 |
1713 | 1. 創建自定義輸出模板以提供HTML以外的東西。
1714 | 2. 創建自定義插件以完全繞過標準的『上傳是否認』頁面並在上傳被阻止時讓上傳處理程序執行其他操作(上傳處理程序提供了一些插件掛鉤,可能有用)。
1715 | 3. 完全禁用上傳處理程序,而是只從您的上傳工具中調用phpMussel API。
1716 |
1717 | #### phpMussel可以檢測EICAR嗎?
1718 |
1719 | 可以。用於檢測EICAR的簽名包含在『phpMussel標準正則表達式簽名檔案』中(`phpmussel_regex.db`)。只要安裝並激活了該簽名檔案,phpMussel就應該能夠檢測到EICAR。由於ClamAV資料庫還包含許多專門用於檢測EICAR的簽名,因此ClamAV可以輕鬆檢測EICAR,但是由於phpMussel僅利用了ClamAV提供的全部簽名中的一部分,因此它們本身可能不足以使phpMussel檢測EICAR。檢測它的能力還可能取決於您的確切配置。
1720 |
1721 | ---
1722 |
1723 |
1724 | ### 9. 法律信息
1725 |
1726 | #### 9.0 章節前言
1727 |
1728 | 本文檔章節描述了有關該軟件包的使用和實施的可能法律考慮事項,並提供一些基本的相關信息。這對於一些用戶來說可能很重要,作為確保遵守其運營所在國家可能存在的任何法律要求的一種手段。一些用戶可能需要根據這些信息調整他們的網站政策。
1729 |
1730 | 首先,請認識到我(軟件包作者)不是律師或合格的法律專業人員。因此,我無法提供法律建議。此外,在某些情況下,不同國家和地區的具體法律要求可能會有所不同。這些不同的法律要求有時可能會相互矛盾(例如:支持[隱私權](https://zh.wikipedia.org/wiki/%E9%9A%B1%E7%A7%81%E6%AC%8A_(%E8%87%BA%E7%81%A3))和[被遺忘權](https://zh.wikipedia.org/wiki/%E8%A2%AB%E9%81%BA%E5%BF%98%E6%AC%8A)的國家,與支持擴展數據保留的國家相比)。還要考慮到對軟件包的訪問不限於特定的國家或轄區,因此,軟件包用戶群很可能在地理上多樣化。這些觀點認為,我無法說明在所有方面對所有用戶『符合法律』意味著什麼。不過,我希望這裡的信息能夠幫助您自己決定您必須做些什麼為了在軟件包的上下文中符合法律。如果您對此處的信息有任何疑問或擔憂,或者您需要從法律角度提供更多幫助和建議,我會建議諮詢合格的法律專業人員。
1731 |
1732 | #### 9.1 法律責任
1733 |
1734 | 此軟件包不提供任何擔保(這已由包許可證提及)。這包括(但不限於)所有責任範圍。為了您的方便,該軟件包已提供給您。希望它會有用,它會為你帶來一些好處。但是,使用或實施該軟件包是您自己的選擇。您不是被迫使用或實施該軟件包,但是當您這樣做時,您需要對該決定負責。我,和其他軟件包貢獻者,對於您的決定的後果不承擔法律責任,無論是直接的,間接的,暗示的,還是其他方式。
1735 |
1736 | #### 9.2 第三方
1737 |
1738 | 取決於其確切的配置和實施,在某些情況下,該軟件包可能與第三方進行通信和共享信息。在某些情況下,某些轄區可能會將此信息定義為『[個人身份信息](https://zh.wikipedia.org/wiki/%E5%80%8B%E4%BA%BA%E5%8F%AF%E8%AD%98%E5%88%A5%E8%B3%87%E8%A8%8A)』(PII)。
1739 |
1740 | 這些信息如何被這些第三方使用,是受這些第三方制定的各種政策的約束,並且超出了本文檔的範圍。但是,在所有這些情況下,與這些第三方共享信息可能被禁用。在所有這些情況下,如果您選擇啟用它,則有責任研究您可能遇到的任何問題(如果您擔心這些第三方的隱私,安全,和PII使用情況)。如果存在任何疑問,或者您對PII方面的這些第三方的行為不滿意,最好禁用與這些第三方分享的所有信息。
1741 |
1742 | 為了透明的目的,共享信息的類型,以及與誰共享,如下所述。
1743 |
1744 | ##### 9.2.1 URL掃描程序
1745 |
1746 | 上文件上傳中找到的URL可能會與Google安全瀏覽API共享,取決於軟件包的具體配置方式。Google安全瀏覽API的使用需要API金鑰,因此默認情況下是禁用。
1747 |
1748 | *相關配置指令:*
1749 | - `urlscanner` -> `google_api_key`
1750 |
1751 | ##### 9.2.2 VIRUS TOTAL
1752 |
1753 | 當phpMussel掃描文件上傳時,這些文件的哈希值可能會與Virus Total API共享,具體取決於軟件包的配置方式。有計劃在未來的某個時候能夠共享整個文件,但目前該軟件包不支持該功能。Virus Total API的使用需要API金鑰,因此默認情況下是禁用。
1754 |
1755 | 與Virus Total共享的信息(包括文件和相關文件元數據)也可能與其合作夥伴,關聯公司以及其他各方共享用於研究目的。這在他們的隱私政策中有更詳細的描述。
1756 |
1757 | *看到: [Privacy Policy – VirusTotal](https://support.virustotal.com/hc/en-us/articles/115002168385-Privacy-Policy).*
1758 |
1759 | *相關配置指令:*
1760 | - `virustotal` -> `vt_public_api_key`
1761 |
1762 | #### 9.3 日誌記錄
1763 |
1764 | 由於多種原因,日誌記錄是phpMussel的重要組成部分。當沒有日誌記錄時,可能難以診斷和假陽性,可能很難確定phpMussel在某些情況下的表現如何,而且可能很難確定其不足之處,以及可能需要更改哪些配置或簽名,以使其繼續按預期運行。無論如何,一些用戶可能不想要記錄,並且它仍然是完全可選的。在phpMussel中,默認情況下日誌記錄是禁用。要啟用它,必須相應地配置phpMussel。
1765 |
1766 | 另外,如果日誌記錄在法律上是允許的,並且在法律允許的範圍內(例如,可記錄的信息類型,多長時間,在什麼情況下),可以變化,具體取決於管轄區域和phpMussel的實施上下文(例如,如果您是個人或公司實體經營,如果您在商業或非商業基礎上運營,等等)。因此,仔細閱讀本節可能對您有用。
1767 |
1768 | phpMussel可以執行多種類型的日誌記錄。不同類型的日誌記錄涉及不同類型的信息,出於各種原因。
1769 |
1770 | ##### 9.3.0 掃描日誌
1771 |
1772 | 當在程序包配置中啟用時,phpMussel保存文件掃描日誌。此類日誌記錄有兩種不同的格式:
1773 | - 人類可讀的日誌文件。
1774 | - 序列化日誌文件。
1775 |
1776 | 人類可讀日誌文件的條目通常看起來像這樣(作為示例):
1777 |
1778 | ```
1779 | Sun, 19 Jul 2020 13:33:31 +0800 開始。
1780 | → 正在檢查『ascii_standard_testfile.txt』。
1781 | ─→ 檢測phpMussel-Testfile.ASCII.Standard(ascii_standard_testfile.txt)!
1782 | Sun, 19 Jul 2020 13:33:31 +0800 完了。
1783 | ```
1784 |
1785 | 掃描日誌條目通常包括以下信息:
1786 | - 掃描文件的日期和時間。
1787 | - 掃描的文件的名稱。
1788 | - 文件中檢測到的內容(如果檢測到任何內容)。
1789 |
1790 | *相關配置指令:*
1791 | - `general` -> `scan_log`
1792 | - `general` -> `scan_log_serialized`
1793 |
1794 | 當這些指令保留為空時,此類日誌記錄將保持禁用狀態。
1795 |
1796 | ##### 9.3.1 上傳日誌
1797 |
1798 | 在程序包配置中啟用時,phpMussel會保留已阻止的上傳日誌。
1799 |
1800 | *日誌條目示例:*
1801 |
1802 | ```
1803 | 日期: Sun, 19 Jul 2020 13:33:31 +0800
1804 | IP地址: 127.0.0.x
1805 | == 掃描結果(為什麼標記) ==
1806 | 檢測phpMussel-Testfile.ASCII.Standard(ascii_standard_testfile.txt)!
1807 | == 哈希簽名重建 ==
1808 | dcacac499064454218823fbabff7e09b5b011c0c877ee6f215f35bffb195b6e9:654:ascii_standard_testfile.txt
1809 | 検疫為『1595142388-2e017ea9ac1478e45dc15794a1fc18c0.qfu』。
1810 | ```
1811 |
1812 | 這些日誌條目通常包括以下信息:
1813 | - 上傳被阻止的日期和時間。
1814 | - 上傳源自的IP地址。
1815 | - 文件被阻止的原因(檢測到的內容)。
1816 | - 被阻止文件的名稱。
1817 | - 被阻止文件的大小和校驗和。
1818 | - 是否文件被検疫,以及內部名稱是什麼。
1819 |
1820 | *相關配置指令:*
1821 | - `web` -> `uploads_log`
1822 |
1823 | ##### 9.3.2 前端日誌記錄
1824 |
1825 | 此類日誌記錄涉及前端登錄嘗試,僅在用戶嘗試登錄前端時才會發生(假設啟用了前端訪問)。
1826 |
1827 | 前端日誌條目包含嘗試登錄的用戶的IP地址,嘗試發生的日期和時間以及的結果(登錄成功或失敗)。前端日誌條目通常看起來像這樣(作為示例):
1828 |
1829 | ```
1830 | x.x.x.x - Day, dd Mon 20xx hh:ii:ss +0000 - "admin" - 已登錄。
1831 | ```
1832 |
1833 | *相關配置指令:*
1834 | - `general` -> `frontend_log`
1835 |
1836 | ##### 9.3.3 日誌輪換
1837 |
1838 | 您可能希望在一段時間後清除日誌,或者可能被要求依法執行(即,您在法律上允許保留日誌的時間可能受法律限制)。您可以通過在程序包配置指定的日誌文件名中包含日期/時間標記(例如,`{yyyy}-{mm}-{dd}.log`),然後啟用日誌輪換來實現此目的(日誌輪換允許您在超出指定限制時對日誌文件執行某些操作)。
1839 |
1840 | 例如:如果法律要求我在30天后刪除日誌,我可以在我的日誌文件的名稱中指定`{dd}.log`(`{dd}`代表天),將`log_rotation_limit`的值設置為30,並將`log_rotation_action`的值設置為`Delete`。
1841 |
1842 | 相反,如果您需要長時間保留日誌,你可以選擇完全不使用日誌輪換,或者你可以將`log_rotation_action`的值設置為`Archive`,以壓縮日誌文件,從而減少它們佔用的磁盤空間總量。
1843 |
1844 | *相關配置指令:*
1845 | - `general` -> `log_rotation_limit`
1846 | - `general` -> `log_rotation_action`
1847 |
1848 | ##### 9.3.4 日誌截斷
1849 |
1850 | 如果這是您想要做的事情,也可以在超過特定大小時截斷個別日誌文件。
1851 |
1852 | *相關配置指令:*
1853 | - `general` -> `truncate`
1854 |
1855 | ##### 9.3.5 IP地址『PSEUDONYMISATION』
1856 |
1857 | 首先,如果您不熟悉這個術語,『pseudonymisation』是指處理個人數據,使其不能在沒有補充信息的情況下被識別為屬於任何特定的『數據主體』,並規定這些補充信息分開保存,採取技術和組織措施以確保個人數據不能被識別給任何自然人。
1858 |
1859 | 以下資源可以幫助更詳細地解釋它:
1860 | - [[trust-hub.com] What is pseudonymisation?](https://www.trust-hub.com/news/what-is-pseudonymisation/)
1861 | - [[Wikipedia] Pseudonymization](https://en.wikipedia.org/wiki/Pseudonymization)
1862 |
1863 | 在某些情況下,您可能在法律上要求對收集,處理,或存儲的任何PII進行『pseudonymise』或『anonymise』。雖然這個概念已經存在了相當長的一段時間,但GDPR/DSGVO提到,並特別鼓勵『pseudonymisation』。
1864 |
1865 | 當記錄它們時,phpMussel可以對IP地址進行pseudonymise,如果這是您想做的事情。當這個情況發生時,IPv4地址的最後八位元組,以及IPv6地址的第二部分之後的所有內容,將由『x』表示(有效地將IPv4地址四捨五入到它的第24個子網因素的初始地址,和將IPv6地址四捨五入到它的第32個子網因素的初始地址)。
1866 |
1867 | *相關配置指令:*
1868 | - `legal` -> `pseudonymise_ip_addresses`
1869 |
1870 | ##### 9.3.6 統計
1871 |
1872 | phpMussel可選擇跟踪統計信息,例如自特定時間以來掃描和阻止的文件總數。默認情況下此功能是禁用,但可以通過程序包配置啟用此功能。所跟踪的信息類型不應視為PII。
1873 |
1874 | *相關配置指令:*
1875 | - `general` -> `statistics`
1876 |
1877 | ##### 9.3.7 加密
1878 |
1879 | phpMussel不[加密](https://zh.wikipedia.org/wiki/%E5%8A%A0%E5%AF%86)其緩存或任何日誌信息。可能會在將來引入緩存和日誌加密,但目前沒有任何具體的計劃。如果您擔心未經授權的第三方獲取可能包含PII或敏感信息(如緩存或日誌)的phpMussel部分的訪問權限,我建議不要將phpMussel安裝在可公開訪問的位置(例如,在標準`public_html`或等效目錄之外【可用於大多數標準網絡服務器】安裝phpMussel),也我建議對安裝目錄強制執行適當的限制權限。如果這還不足以解決您的疑慮,應該配置phpMussel為不會首先收集或記錄引起您關注的信息類型(例如,通過禁用日誌記錄)。
1880 |
1881 | #### 9.4 COOKIE
1882 |
1883 | 當用戶成功登錄前端時,phpMussel設置cookie以便能夠在後續請求中的記住用戶(即,cookie用於向登錄會話驗證用戶身份)。在登錄頁面上,cookie警告顯著顯示,警告用戶如果他們參與相關操作將設置cookie。 Cookie不會在代碼庫中的任何其他位置設置。
1884 |
1885 | #### 9.5 市場營銷和廣告
1886 |
1887 | phpMussel不收集或處理任何信息用於營銷或廣告目的,既不銷售也不從任何收集或記錄的信息中獲利。phpMussel不是商業企業,也不涉及任何商業利益,因此做這些事情沒有任何意義。自項目開始以來就一直如此,今天仍然如此。此外,做這些事情會對整個項目的精神和預期目的產生反作用,並且只要我繼續維護項目,永遠不會發生。
1888 |
1889 | #### 9.6 隱私政策
1890 |
1891 | 在某些情況下,您可能需要依法在您網站的所有頁面和部分上清楚地顯示您的隱私政策鏈接。這可能為了確保用戶充分了解您的隱私慣例,收集的個人身份信息類型以及您打算如何使用它的是很重要。為了能夠在phpMussel的『上傳是否認』頁面上包含這樣的鏈接,提供了配置指令來指定隱私策略的URL。
1892 |
1893 | *相關配置指令:*
1894 | - `legal` -> `privacy_policy`
1895 |
1896 | #### 9.7 GDPR/DSGVO
1897 |
1898 | 『通用數據保護條例』(GDPR)是歐盟法規,自2018年5月25日起生效。該法規的主要目標是向歐盟公民和居民提供有關其個人數據的控制權,並統一歐盟內有關隱私和個人數據的法規。
1899 |
1900 | 該法規包含有關處理任何歐盟『數據主體』(任何已識別或可識別的自然人)的『[個人身份信息](https://zh.wikipedia.org/wiki/%E5%80%8B%E4%BA%BA%E5%8F%AF%E8%AD%98%E5%88%A5%E8%B3%87%E8%A8%8A)』(PII)的具體規定。為了符合條例,『企業』(按照法規的定義),和任何相關的系統和流程必須默認實現『隱私設計』,必須使用盡可能高的隱私設置,必須對任何存儲或處理的信息實施必要的保護措施(數據的 pseudonymisation 或完整 anonymisation ),必須明確無誤地聲明他們收集的數據類型,他們如何處理數據,出於何種原因,他們保留多長時間,以及他們是否與任何第三方分享這些數據,與第三方共享的數據類型,為什麼,等等。
1901 |
1902 | 只有按照條例有合法依據才能處理數據。一般而言,這意味著為了在合法基礎上處理數據主體的數據,必須遵守法律義務,或者僅在從數據主體獲得明確,明智,明確的同意之後才進行處理。
1903 |
1904 | 因為條例的各個方面可能會及時演變,並為了避免過時信息的傳播,從權威來源中學習可能會更好的,而不是簡單地在包文檔中包含相關信息(這個信息可能最終會過時)。
1905 |
1906 | 一些推薦的資源用於了解更多信息:
1907 | - [关于欧盟GDPR隐私合规,中国数字营销人不得不知的9大问题](http://www.adexchanger.cn/top_news/28813.html)
1908 | - [史上最严的隐私条例出台,2018年开始执行](https://zhuanlan.zhihu.com/p/20865602)
1909 | - [《欧盟数据保护条例》对中国企业的影响 —- 以阿里巴巴集团为例](https://spiegeler.com/%E3%80%8A%E6%AC%A7%E7%9B%9F%E6%95%B0%E6%8D%AE%E4%BF%9D%E6%8A%A4%E6%9D%A1%E4%BE%8B%E3%80%8B%E5%AF%B9%E4%B8%AD%E5%9B%BD%E4%BC%81%E4%B8%9A%E7%9A%84%E5%BD%B1%E5%93%8D-%E4%BB%A5%E9%98%BF%E9%87%8C/)
1910 | - [歐盟個人資料保護法 GDPR 即將上路!與電商賣家息息相關的 Google Analytics 資料保留政策,你瞭解了嗎?](https://shopline.hk/blog/google-analytics-gdpr/)
1911 | - [歐盟一般資料保護規範](https://zh.wikipedia.org/wiki/%E6%AD%90%E7%9B%9F%E4%B8%80%E8%88%AC%E8%B3%87%E6%96%99%E4%BF%9D%E8%AD%B7%E8%A6%8F%E7%AF%84)
1912 | - [REGULATION (EU) 2016/679 OF THE EUROPEAN PARLIAMENT AND OF THE COUNCIL](https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=celex:32016R0679)
1913 |
1914 | ---
1915 |
1916 |
1917 | 最後更新:2025年10月9日。
1918 |
--------------------------------------------------------------------------------