|
3. Защитени директории
Ако искате определени директории от вашия сайт да са достъпни само за определени хора и да сте сигурни, че не възможно някой с достатъчно познания да достигне до вашите скриптове или друг сорс код, то .htaccess е решението, което ви трябва. Има различни механизми за защита на определени области: сървърно базирани (ASP, PHP, Perl и други) или клиент-базирани (JavaScript). Последните са достатъчно несериозни за да се спираме на тях. Например в PHP можете да защитите страници чрез включване на подходящи HTTP хедъри („WWW-Authenticate: Basic realm=....”, „HTTP/1.0 401 Unauthorized”) и използване на суперглобалните променливи „$_SERVER['PHP_AUTH_USER']” и „$_SERVER['PHP_AUTH_PW']”. Но също така можете да използвате и възможностите, които предоставя .htaccess, като предимството е, че няма да се наложи да пишете програмен код. Първото, което трябва да направите е да създадете файл наречен .htpasswd. Името на файла, начина на ъплоуд и режима на достъп отговаря на същите правила, както и .htaccess. За подробности се върнете в началото на урока. В този файл се записват имената и съответните им пароли (в криптиран вид) с които единствено може да се разреши web-достъп до директорията в която се намира съответния .htaccess файл. .htpasswd файлът трябва да съдържа по един ред за всеки оторизиран потребител. Синтаксиса е следния:: CODE
За криптиране на паролите може да използвате например handy-dandy tool. От съображения за сигурност, трябва да поставите файла с паролите в директория, която не е web-достъпна. Какво трябва да запишете в .htaccess: CODE
Първия ред указва пълния път спрямо корена до файла с допустимите потребители, но забележете, че на последния ред е указан само user1. Това е подходящ синтаксис, ако желаете определени потребители да имат достъп до определени директории. Ако искате всички описани в посочения .htpasswd файл потребители да имат достъп до директорията, използвайте записа: „require valid-user”. AuthName е името на защитената област. Можете да замените това име с по-подходящо според случая. Например „Restricted Area”. AuthType е типа на използвания механизъм. В случая - Basic. 4. Разрешаване на SSI чрез htaccess Много програмисти биха искали да използват удобствата, които предлага SSI (Server Side Includes), но не могат поради ограничение наложено от администратора на техния хостинг. Можете да промените това, чрез .htaccess, но първо се уверете, че по този начин не нарушавате правилата за ползване. Най-добре е да говорите с администратора. CODE
Първата линия указва на сървъра, че страниците с разширение .shtml (Server parsed HTML) са валидни. Втората линия включва сървърния парсер за файлове с разширение .shtml. Тоест указва на сървъра, че тези файлове трябва да се проверяват за SSI команди (и съответно изпълняват). Последната линия е просто техническа подробност, но трябва да присъства. И това е. Сега можете да използвате SSI. Не бързайте да променяте разширенията на всичките си файлове на .shtml. Просто вмъкнете като втора линя в горния код: CODE
Това ще накара сървъра да проверява и .html файловете за SSI команди. Идеята не е много добра доколкото ще доведе до допълнително излишно натоварване на сървъра, но пък ще ви спести време. А и е един вид елементарна защита, тъй като не подсказва на потребителите, че страницата съдържа SSI инструкции, които могат да станат обект на хакерски намеси. Както обикновено най-добре е да прецените сами според случая дали да използвате тази опция. Ако решите да разделите страниците на .shtml и .html, тази втора линия не ви е необходима. Ако не сте сигурни какво ще правите, добавете: CODE
Този ред задава страницата по подразбиране да бъде index.shtml, а ако такава липсва, ще се зареди index.html. Още за подразбиращата се страница ще разгледаме по-късно. 5. Блокиране на достъпа от определени IP адреси Има хора или групи, които опитват да причинят вреди на сайта ви? - Има и решение- блокирайте достъпа им! Добавете код подобен на този (всяка команда е на отделен ред): CODE
Можете да блокирате достъпа на определен IP адрес или интервал от адреси. В горния пример е блокиран достъпа от адрес 123.45.6.7, както и от всички адреси започващи с 012.34.5. (012.34.5.0, 012.34.5.1 ...... 012.34.5.255). Втория вариянт едва ли има практическо приложение, но е допустим. Можете още да използвате забрана за всички: deny from all. Освен IP адреси може да се използват и имена на домейни: deny from .knowhacker.com, което ще забрани достъпа от всички поддоменйни на knowhacker.com (www.knowhacker.com, virtual.knowhacker.com и т.н.). 6. Блокиране на достъпа на потребител / домейн по начина на обръщение Блокирането на трафика за потребители или сайтове който минава през определен домейн е друг вариант за ограничаване на достъпа. Да предположим, че разглеждате вашите лог-файлове и забелязвате голямо количество обръщения от определен сайт. Когато обаче прегледате въпросния сайт не откривате никъде линк към вашия. Обръщенията към вашия сайт явно са необичайни. Вероятно става въпрос за използване на ресурси от вашия сайт като изображения, .css файлове и други, които се знае, че не се променят. Като се има предвид, че в log-файловете се записват всички видове обръщения, както и информация от къде са дошли, можете да решите да спрете някои от тях. За да направите това обаче, преди всичко е необходимо да имате инсталиран модул mod_rewrite на вашия Apache сървър. По подразбиране този модул се инсталира заедно със сървъра, но все пак проверете. И така за да забраните целия трафик породен от обръщение през определен домейн, използвайте следния код: За един домейн: CODE
За няколко домейна: CODE
Забележете, че точката е записана като ескейп последователност. Това е така, защото тук RewriteCond използва регулярни изрази (без символа ‘\’ точката ще има смисъл „които и да е символ”). Флагът [NC] („Non Case sensitive”) в края на израза задава да не се прави разлика между малки и големи букви. И накрая - последния ред от примера задава действието, което да се извърши при намиране на съвпадение в RewriteCond условията: „FAIL”. Тоест отговорът на сървъра ще бъде състояние 403 - Forbidden error. Разликата между двата примера е, че когато се изреждат RewriteCond, трябва да се постави флаг OR.
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||









