出于安全原因,每个请求都会传递给PHP,因为我不想将静态文件暴露给未经授权的人。
我担心某人可能会通过$_SERVER["REQUEST_URI"]
变量注入一些恶意代码。我试图删除子文件夹引用,但我仍然不知道它是否安全。
Nginx的
rewrite ^ /index.php last;
的index.php
<?php
$uri = $_SERVER["REQUEST_URI"];
$uri = strlen ($uri) > 1 ? substr ($uri, 1) : "index.html";
$uri = preg_replace ("/\/?\.\./", "", $uri, -1); // Remove sub-folders
if (file_exists (getcwd () . "/" . $uri)) {
$extension = substr ($uri, strrpos ($uri, "."));
switch ($extension) {
case ".css": $mime = "text/css"; break;
case ".js": $mime = "application/javascript"; break;
default:
$info = finfo_open (FILEINFO_MIME_TYPE);
$mime = finfo_file ($info, $uri);
finfo_close ($info);
break;
}
if ($mime === false)
header ("Content-Type: text/html; charset=utf-8"); // Default
else
header ("Content-type: " . $mime);
require ($uri);
}
else {
// Error, blah blah blah
}
?>
答案 0 :(得分:1)
是的,您担心LFI(本地文件包含)攻击。这是可能的。 目前正在检查。 URI中的/和\ chars会阻止Directory Traversal攻击。这是相当不错的。 正如您猜测的那样,如果您包含以下文件:
的index.php?文件= something.php 并在index.php中 包括$ _GET ['file'];
攻击者可以读取服务器中的每个文件,如下所示: 的index.php?FILE = .. / .. / .. / .. / .. / .. / .. / .. / .. / .. / etc / passwd中
所以你必须采取措施。 以下是Imperva关于如何防止LFI和RFI(远程文件包含)攻击的非常好的写作: https://www.imperva.com/lg/lgw.asp?pid=463
没有注册要求: http://www.slideshare.net/Imperva/how-to-prevent-rfi-and-lfi-attacks