Archive for the ‘Apache’ Category

apache

Для запрета доступа к папке сайта используются директивы 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

Подписка по e-mail и RSS
rss

Подписаться по e-mail:

Поиск
Категории