我希望找到一种方法来保护管理区域,特别是外部访问的文件夹本身(包括带有图像和css的文件夹)。我已经阅读了很多建议,但他们都觉得相当妥协或解决方法而不是防弹方法,或者我不理解哪种方法最适合安全并且隐藏在外面的世界,我想成为唯一了解它的人或者访问它。希望有人可以在他们希望这个区域完全隐藏在外面世界的同时可以使用它们时可以使用它们。
我遇到的一些方法涉及:
我目前有我的登录脚本将我重定向到我的管理区域,所以是否有整个文件夹识别它是我并授予访问权限并提供文件,如果登录的管理员php文件请求它?,如果没有拒绝访问包括图像和CSS等?
无法弄清楚如何最好地保护这个区域?使用会话是一种识别管理员的安全方式吗?
答案 0 :(得分:2)
确保内容不会暴露给网络的最简单方法是将其放在目录结构中的网站文件夹上方。
所以例如在你的Apache配置中安装网站
/var/www/sites/site/content/
并将受限制的内容放在
/var/www/sites/site/
这样就不会暴露内容,但如果需要,php仍然可以阅读。
显然,这不会阻止用户看到你的css文件中的内容,如果php读取它们并回应它们但我不明白为什么css文件应该是安全的
修改强>
假设您的服务器上有/var/www/sites/site/content/some_folder
然后您在浏览器中输入www.yoursite.com/some_folder
,假设您的网站中已打开索引,您将在some_folder
但是如何从网络浏览者那里获得/var/www/sites/site/
? ......你不能!!
但你可以做的是这样的事情:
这将是主站点文件夹中的一个php文件(公开可见)
<?php
session_start();
if(isset($_SESSION['admin_logged_in'])){
include '/var/www/sites/site/secret_content.php';
}
答案 1 :(得分:1)
第一步确实是将您想要阻止公共访问的所有文件移到文档根目录之外。这样就无法直接通过您的网络服务器访问文件。
如果您希望阻止访问所有资源(包括图像,脚本,样式表等),您可以实现&#34;代理&#34;负责提供文件(在检查用户是否被授权之后)。
最简单,最灵活的方法是在应用程序中使用单个入口点。使用apache可以使用以下重写规则轻松实现:
RewriteEngine On
RewriteRule ^(.*)$ index.php [L,QSA]
这将确保每个请求都将通过index.php文件。
不,您可以轻松检查是否允许您使用例如:
访问资源<?php
session_start();
if (!isset($_SESSION['user'])) {
header('HTTP/1.0 403 Forbidden');
exit; // important to prevent further execution of the script
}
// user is allowed access, do shit
以上是一个非常简单的例子。通常情况下,您可能希望呈现一个看起来很漂亮的页面,告诉用户不允许他访问您的内容/呈现登录页面。
现在要渲染受保护的资源,您可以执行以下操作:
目录结构
index.php
<?php
require_once __DIR__ . '/../index.php';
项目中的index.php
<?php
session_start();
if (!isset($_SESSION['user'])) {
header('HTTP/1.0 403 Forbidden');
exit; // important to prevent further execution of the script
}
$file = $_SERVER['REQUEST_URI']; // important to sanitize or possible check against whitelist the requested resource
$ext = pathinfo($path, PATHINFO_EXTENSION);
switch ($ext) {
case 'jpg':
case 'jpeg':
header('Content-type: image/jpeg');
imagejpeg('/path/to/protected/resources/' . $file);
break;
}
现在,你将完全控制你所服务的对象和对象。
请注意,它是否安全完全取决于您的实施情况,但一般来说:
一些通用但相关的读物:
$file = $_SERVER['REQUEST_URI'];
点非常相关)答案 2 :(得分:0)
是的,您应该将内容移出文档根目录。您可以尝试使用.htaccess来保护您的文件,但允许.htaccess覆盖本身就是一个安全问题。这当然是一个性能问题。
只需将404处理程序指向类似......
<?php
define('REQUEST_PATH', '/secure');
define('SECURED_CONTENT', '/var/www/restricted');
$req=parse_url($_SERVER["REQUEST_URI"]);
if ((0===strpos($req['path'],REQUEST_PATH))
&& $_SESSION['authenticated']) {
if (is_readable(SECURED_CONTENT . $req['path'])
&& is_file(SECURED_CONTENT . $req['path'])) {
header('Content-type: '
. mime_content_type(SECURED_CONTENT . $req['path']);
include(SECURED_CONTENT . $req_path);
} else {
header('HTTP/1.0 404 Not Found');
}
exit;
}
header('HTTP/1.0 403 Forbidden');