Я пытаюсь настроить систему, чтобы свести к минимуму сложность для людей, обновляющих сайт, поскольку я не буду основным человеком, обновляющим ежедневный контент, а также предоставляю чистые URL-адреса.Структура сайта для малого сайта без DB
Поскольку я не могу использовать БД, все содержимое находится в одной из двух базовых папок (/ private/content OR/private/utilities). Для обычных ежедневных обновлений утилиты (содержащие папку обложки страницы - заголовок, навигатор, нижний колонтитул и т. Д.) Не нуждаются в доступе. Это минимизирует количество видимого кода для ежедневного редактора.
Я создал массив ($ allowedContent), который имеет список доступных доступных разделов. Код проверяет этот массив, чтобы убедиться, что пользователь не пытается получить доступ к неприемлемому контенту. В приведенном ниже коде эти запросы будут успешными. Все остальное потерпит неудачу.
- www.example.com/
- www.example.com/popup/*
- www.example.com/test
- www.example.com/hello
- www.example .com/foobar
Мой вопрос: Есть ли что-нибудь, что может быть проблемой при таком подходе?
.htaccess
RewriteEngine On
# Rules
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php
PHP
// parse the URL
$requestURI = explode('/', $_SERVER['REQUEST_URI']);
//print_r ($requestURI);
// a list of non-restricted dynamic content
$allowedContent = array("test", "hello", "foobar");
$allowAccess = false; // assume hackers :o
// determine the section
if (!$requestURI[1]) { // none defined - use root/home
$section = 'home';
$skin = true;
$allowAccess = true;
} elseif ($requestURI[1] == 'popup') { // popup - no skin
$section = $requestURI[2];
$skin = false;
$allowAccess = true;
} else {
if (in_array($requestURI[1], $allowedContent)) { // verify that the requested content is allowed/prevent someone from trying to hack the site
$section = $requestURI[1];
$skin = true;
$allowAccess = true;
} else { // this would be either a 404 or a user trying to access a restricted directory
echo "evil laugh"; // obviously, this would change to a 404 redirect
}
}
Добавлен код, где содержание называется
// call the relevant content pieces
if ($allowAccess == true) {
if ($skin == true) {
// call wrapper part 1
include $_SERVER['DOCUMENT_ROOT'] . '/private/utilities/wrapperOpen.php';
// call aside
include $_SERVER['DOCUMENT_ROOT'] . '/private/utilities/header.php';
// call aside
include $_SERVER['DOCUMENT_ROOT'] . '/private/utilities/aside.php';
}
// call CONTENT (based on section)
include $_SERVER['DOCUMENT_ROOT'] . '/private/content/' . $section . '/index.php';
if ($skin == true) {
// call branding
include $_SERVER['DOCUMENT_ROOT'] . '/private/utilities/branding.php';
// call footer
include $_SERVER['DOCUMENT_ROOT'] . '/private/utilities/footer.php';
// call wrapper part 2
include $_SERVER['DOCUMENT_ROOT'] . '/private/utilities/wrapperClose.php';
}
}
Можете ли вы добавить код, в который будете добавлены файлы с содержанием? В настоящее время я ничего не вижу, чтобы кто-то не мог получить доступ к http: //example.com/hello /../../../ etc/passwd'. – AndrewR