Archive for the ‘Apache’ Category
Для запрета доступа к папке сайта используются директивы allow и deny.
Если необходимо запретить доступ с определенного IP-адреса - это будет выглядеть так:
#Запрет с 16:18 31-03-2011 Order allow,deny allow from all Deny from 198.69.132.24
Закрыть доступ ВСЕМ, кроме определенных IP:
Order deny,allow deny from all # Список IP через пробел, с которых доступ разрешен Allow from 194.111.70.48 194.78.47.128
В случае, если необходимо закрыть доступ по маске то используем неполный адрес:
# неполный адрес 198.69. # полные адреса, соответствующие первому 198.69.132.24 198.69.136.89 198.69.1.8
Таким образом, если необходимо закрыть доступ по маске:
#Запрет с 06:18 31-03-2011 Order allow,deny allow from all Deny from 198.69.
Далее, если нам нужно закрыть доступ только к определенной папке:
# Указываем папку, к которой запрещаем доступ <Directory /root-access/> Order allow,deny # Всем, кроме ... allow from all Deny from 198.69. </Directory>
Разрешение доступа только с определенных IP к определенной папке (адреса записываются через пробел):
# Указываем папку, к которой запрещаем доступ по имени хоста и его IP <Directory /root-access/> Order deny, allow deny from all #Адреса записываются через пробел Allow from 198.69.144.98 198.69.144.94 198.69.144.92 </Directory>
Также есть возможность указывать в одном списке и хост-имя и IP-адрес:
# Указываем папку, к которой запрещаем доступ по имени и IP <Directory /root-access/> Order allow,deny # Всем, ... allow from all # ... кроме имя хоста и его IP Deny from robot.fromx.com 148.145.21.14 </Directory>
Если вы хотите установить нужный часовой пояс вместо часового пояса сервера. Это можно сделать при помощи .htaccess. Пишем туда:
SetEnv TZ location, где location - часовой пояс нужного региона.
Полный список часовых поясов можно посмотреть на странице http://www.php.net/manual/en/timezones.php
Например, для Киева - указываем
SetEnv TZ Europe/Kiev
Перед тем как добавить открытую загрузку файлов на сайт необходимо продумать какие типы файлов мы разрешаем загружать. Например, только изображения с раширениями - .jpg, .png,
Или, если список типов файлов не ограничивается, к примеру, только картинками или видеофайлами нужно запретить загружать файлы с расширением, которые могут нести потенциальную опасность.
Пример:
<?php /* Создаем паттерн, где есть список запрещенных файлов по расширению */ $blacklist = '/.(com|bat|exe|cmd|vbs|msi|jar|php(\d?)|phtml|access|js)$/i'; /* Если файл содержит запрещенное разрешение - выход с уведомлением*/ if (preg_match($pattern, $_FILES['file']['name'])) { exit ("Файл с данным расширением запрещен к загрузке"); } $uploaddir = 'uploads/'; $uploadfile = $uploaddir . basename($_FILES['userfile']['name']); if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) { echo "Файл загружен.\n"; } else { echo "Файл не загружен.\n"; } ?>
Далее, если все-таки необходимо загружать файлы php, то можно, как вариант - менять их раширение на .txt
<?php // Обработчик формы загрузки if(!empty($_FILES['filename']['tmp_name'])) { // Извлекаем расширение $ext = strtolower(strrchr($_FILES['filename']['name'], ".")); // Запрещенные форматы $extentions = array(".phtml", ".php", ".html", ".htm", ".pl", ".xml", ".inc"); // Проверка расширения по // списоку запрещенных файлов if(in_array($ext, $extentions)) { $pos = strrpos($_FILES['filename']['name'], "."); $path = substr($_FILES['filename']['name'], 0, $pos).".txt"; } else { $path = $_FILES['filename']['name']; } // Сохраняем файл в текущем каталоге if(copy($_FILES['filename']['tmp_name'], $path)) { echo "Файл успешно загружен - <a href=$path>$path</a>"; } } ?>
Также можно при помощи .htaccess папки, в которую загружаются файлы переопределить обработчик исполняемых файлов php, perl воспринимать их как текстовые:
RemoveHandler .php .phtml .pl
AddType text/plain .php .phtml .pl
Еще можно в папке прописать запрет на исполнение скриптов:
Options -ExecCGI
AddHandler cgi-script .pl .py .php .jsp. htm .shtml .sh .asp .cgi
В конфигурационном файле httpd.conf, если Apache загружает свои модули автоматически подключаем mod_rewrite:
LoadModule rewrite_module modules/mod_rewrite.so
В .htaccess добавить следующие строки:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.example\.ru$ [NC]
RewriteRule ^(.*)$ http://example.ru/$1 [R=301,L]
И, наоборот, для переадресации с домена без WWW на домен с WWW:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^example\.ru$ [NC]
RewriteRule (.*) http://www.example.ru/$1 [R=301,L]
RewriteEngine On - включает систему перезаписи Apache
RewriteCond - директива, проверяющая перменные среды. Можно управлять исполнением директивы RewriteRule, предваряя ее любым кол-вом директив RewriteCond.
RewriteRule - директива, определяющая правила перезаписи
Аргумент [NC] - "No Case", или "case-insensitive" - Сравнение URL выполняется без учета регистра.
Аргумент [R=301,L] - означает, что перенаправление 301-ое, L (last) - обработка последнего правила и игнорирование всех последующих, начинает действовать только при верном соответствии правила указателю URL.
301-ый редирект - означает, что запрошеному ресурсу присвоен новый постоянный, permanent URI, и в будущем при обращении к этому ресурсу следует использовать возвращенный URL.
Подробнее на официальном сайте Apache