我创建服务器并安装apache& php(Centos 64bit 6.x) 我将创建文件test.js.php
// Send correct type
header('Content-Type: text/javascript; charset=UTF-8');
// Enable browser cache for 1 hour
header('Expires: ' . gmdate('D, d M Y H:i:s', time() + 3600) . ' GMT');
if (! empty($_GET['scripts']) && is_array($_GET['scripts'])) {
foreach ($_GET['scripts'] as $script) {
// Sanitise filename
$script_name = 'js';
$path = explode("/", $script);
foreach ($path as $index => $filename) {
// Allow alphanumeric, "." and "-" chars only, no files starting
// with .
if (preg_match("@^[\w][\w\.-]+$@", $filename)) {
$script_name .= DIRECTORY_SEPARATOR . $filename;
}
}
// Output file contents
if (preg_match("@\.js$@", $script_name) && is_readable($script_name)) {
readfile($script_name);
echo ";\n\n";
}
}
}
我将使用网址http://124.x.x.x/js/test.js.php?scripts[]=jquery1.11.js
访问此文件
和服务器响应错误403禁止
Forbidden
You don't have permission to access /js/test.js.php on this server.
Apache/2.2.15 (CentOS) Server at xxxx.org Port 80
当我将scripts[]
更改为scripts
然后正常工作,但我想知道为什么我的服务器响应403,如果在URI上使用scripts[]
?
任何理想?
答案 0 :(得分:1)
您必须启用mod_security
。 mod_seciruty
是一个WAF(Web应用程序防火墙)模块,用于防止您的服务器受到网络攻击。
" []"在url中可以用来利用变量注入vulerabilities,因此WAF会阻止你保护服务器的请求。这个错误来自Apache。
查看这个类似的主题:
GET with hyphens raises error 403
禁用mod_security会立即解决问题,但这确实是一个糟糕的主意。
请尽量避免使用" []"。您仍然可以在没有它的情况下实现该功能:
$scripts = explode($_GET['scripts'], ',');