Tutorial .htaccess

Tutorial .htaccess

htaccess este un simplu fisier ASCII care poate fi creat cu orice editor text (ex.Notepad)
.htaccess este este o extensie a unui fisier. Nu exista fisier.htaccess sau paginamea.htaccess ci simplu .htaccess

Pentru a crea un astfel de fisier, deschidem Notepad si apoi salvam fisierul cu numele .htaccess.Atentie pe sistemele de tip Windows extensia poate fi ascunsa iar fisierul sa se numeasca de fapt .htaccess.txt, ceea ce este incorect.In Windows puteti accesa Folder Options>View>si deselectati Hide extension for knows file types.Daca nu reusiti sa redenumiti fisierul asa, atunci o puteti face via ftp sau telnet, sau chiar din dos(rename .htaccess.txt .htaccess).
Fisierele de tip htaccess trebuie puse pe ftp in ASCII mode si nu BINARY.Atentie trebuie sa setati chmod 644 pe fisierul htaccess (RW-RR).Acest lucru face imposibila citire a fisierului de cate un browser extern.Asemenea greseli duc la compromiterea sistemului, deoarece atunci cand in .htaccess ai introdus cai de access private, calea catre directoare private, un hacker poate profita de acest lucru.Ca o paranteza, daca folositi un panel gen Plesk sau Webmin pentru administrarea paginilor acestea vor seta automat chmod 644.
Majoritatea comenzilor dintr-un htaccess sunt facute sa fie pe o singura linie, astfel ca da folositi un editor text care are activat word-wrap aveti grija pentru ca puteti pasa din greseala serverului Apache niste linii (caractere) fara sens.Totusi serverul Apache este foarte intelegator cu astfel de continut din htaccess.

Daca puneti un fisier htaccess in directorul root al serverului web acesta va afecta si configuratia subdirectoarelor.Adica, daca in htaccess aveti setate niste reguli pentru directorul corespunzator siteulmeu.ro, atunci vor fi afectate si subdirectoarele corespunzatoare siteulmeu.ro/director siteulmeu.ro/linkuri.Oricum puteti pune cate un htaccess in fiecare director, daca doriti setari diferite.Un subdirector va fi afectat de cel mai aproape htaccess.Daca aveti un htaccess in directorul radacina al serverului web atunci acesta va afecta toate subdirectoarele (toata structura).

Management de erori

Iata una din caracteristicile cele mai utilizate ale htaccess.Inainte de a crea propriile pagini de erori trebuie stiute urmatoarele:
-documente de erori = atunci cand primiti un mesaj gen Error 404 Document not found Server running Apache 2.xx inseamna ca ati fost redirectionat intr-o pagina care arata mesajul de mai sus specific erorii 404.Probabil ati vazut ca pe alte site-uri arata diferit acest mesaj de eroare, de obicei el tinde sa devina cat mai atraciv cu poze, mesaje haioase, appleturi java.
-coduri de erori = exista mai multe coduri de erori, si le voi prezenta mai jos:
Cereri acceptate cu succes
200 OK
201 Created
202 Accepted
203 Non-Authorative Information
204 No Content
205 Reset Content
206 Partial Content
Cereri de client redirectate
300 Multiple choices
301 Moved Permanently
302 Moved Temporarly
303 See Other
304 Not Modified
305 Use Proxy
Cereri de client eronate
400 Bad request
401 Authorisation Required
402 Payment Required
403 Forbidden
404 Not Found
405 Method Not Allowed
406 Not Acceptable (encoding)
407 Proxy Authentification Required
408 Request Timed Out
409 Conflicting Request
410 Gone
411 Content Lenght Required
412 Precondition Failed
413 Request Entity Too Long
414 Request URI Too Long
415 Unsupported Media Type
Erori de server
500 Internat Server Error
501 Not Implemented
502 Bad Gateway
503 Service Unavailable
504 Gateway Timeout
505 HTTP Version Not Supported

Nu esti obligat sa specifici pentru fiecare cod cate un ErrorDocument, de fapt nici nu trebuie.De obicei un webmaster este preocupat de documentele de eroare pentru codurile 404 si 500.De asemenea cele mai inlocuite documente de eroare sunt pentru 401 Authorization Required (atunci cand cineva incearca sa intre intr-o zona unde nu are destul access), 403 Forbidden (atunci cand un utilizator nu are acces la un anume fisier) sau 400 Bad Request (atunci cand cineva incearca sa manipuleze URL-ul sau scripturile paginii web).
Pentru a specifica documente de eroare customizate trebuie sa faceti ca in exemplele urmatoare:

ErrorDocument code /director/numefisier.ext
sau
ErrorDocument 404 /errors/notfound.html
la fel se poate proceda cu:
ErrorDocument 500 /errors/internalerror.html

Poti numi paginile notfound.html sau internalerror.html cu vrei tu, dar este de preferat sa le dai un nume sugestiv si apropiat de eroare pentru a nu crea confuzii.Se pune un slash (/) la inceput pentru ca ne raportam la directorul root al serverului.Recomand introducerea tuturor documentelor de erori intr-un singur folder gen /erori/ sau /error_docs/ pentru a controla mai bine indexarea lor de catre motoarele de cautare prin ROBOTS.TXT.

Daca ar fi sa cream un htaccess cu mai multe documente de eroare in el, am proceda in felul urmator(atentie, fiecare comanda pe o singura linie):

ErrorDocument 400 /erori/badrequest.html
ErrorDocument 401 /erori/auhreqd.html
ErrorDocument 403 /erori/forbid.html
ErrorDocument 404 /erori/notfound.html
ErrorDocument 500 /erori/serverr.html

Poti specifica un URL intreg, in loc de unul virtual (ex. www.siteulmeu.ro/erori/notfound.html), dar nu este recomandat.

Pe langa optiunile expuse mai sus avem si una mai simpla, dar mai rar utilizata.Putem include cod HTML in htaccess:

ErrorDocument 401 Pentru a accesa aceasta pagina trebuie sa fii membru

Mai sus am folosit HTML, dar atentie continutul codului incepe cu dar nu se termina cu ghilimea pentru ca nu trebuie.Tineti minte totul trebuie sa fie pe o singura linie.

Protectia cu parola

Iata un alt feature foarte popular printre utilizatorii obisnuiti.Printr-un fisier de tip htaccess putem proteja un director cu parola.Acest aspect este foarte important si ajuta pe webmasteri de multe ori sa isi securizeze mai bine site-ul.
Exista o gramada de metode prin care poti proteja cu parola o anumita portiune a site-ului, de exemplu cu ajutorul limbajelor de programare web gen PHP,Perl,ASP sau client-based JavaScript.Antentie mare, nu este recomandata folosirea scripturilor client-based(client dependant challenge/respose) pentru ca nu sunt la fel de sigure ca cele server-side.
In primul rand, pentru a proteja un director cu parola trebuie sa cream un fisier numit .htpasswd, apoi in fisierul htaccess este introdus username si parola (care este criptata).
Voi explica mai jos procesul prin care puteti crea prin intermediul shell-ului un fisier htpasswd (cum sa creati parola criptata):

[zam@www zam]# cd /var/www/1337.ro/privat/
[zam@www privat]# htpasswd -c .htpasswd username
New password:
Re-type new password:
Adding password for user username
[root@www privat]#

htpasswd -c .htpasswd username = cream un user username dupa care vom fi intrebati de parola
Inainte de a crea username si parola, observati*censored*ne-am deplasat catre directorul pe care dorim sa-l protejam (cd /var/www/1337.ro/privat/)

Puteti adauga useri noi care sa aiba acces la acelasi director prin intermediul comenzii htpasswd .htpasswd user2′ de data aceasta insa nu mai folositi optiunea -c.
Daca vrei sa vezi ce ai facut poti deschide cu un editor fisierul .htpasswd unde vei descoperi ceva de genul:

username:5RXdskge4Syk
user2:tGfZm45olpcda

Daca vrei sa stergi un user, pur si simplu se sterge linia cu username-ul corespunzator.
Dupa ce s-a creat user si parola, trebuie sa creati si fisierul htaccess in felul urmator:

AuthUserFile /usr/local/www/1337.ro/privat/.htpasswd
AuthGroupFile /dev/null
AuthName Director Privat
AuthType Basic

require user username

Prima linie este calea catre fisierul htpasswd care poate fi locat oriunde pe server.Nota: plasati fisierul htaccess in directorul pe care vreti sa-l protejati si nu aiurea.Probabil va intrebati de ce am pus require user username.Aceasta linie va da acces la folderul protejat userului username cu parola care este locata in htpasswd.Totusi de multe ori doriti ca un folder protejat cu parola sa fie accesat de mai multe persoane(useri) atunci inlocuiti ultima linie cu require valid-user si atunci toate requesturile vor fi verificate din fisierul htpasswd (care va contine toti userii).
Linia care incepe cu AuthName contine textul care va fi afisat in promterul de login si Director Privat poate fi inlocuit cu orice.
A fost folosita linia AuthType Basic pentru ca folosim autentificare clasica de tip HTTP.

Activarea SSI via htaccess

Multa lume doreste sa foloseasca SSI, dar multe servicii de hosting nu permit acest lucru.Totusi aceasta se poate schimba in majoritatea cazurilor cu htaccess.Atentie:acest lucru poate fi luat in considerare de cate administratorii serverului respectiv ca o tentativa de hacking asa ca va sugerez sa cereti permisia lor inainte de a actiona:

AddType text/html .shtml
AddHandler server-parsed .shtml
Options Indexes FollowSymLinks Includes

Prima linie spune serverului ca paginile cu extensia .shtml sunt valide.A doua linie comunica serverului ca fisierele cu extensia .shtml pot fi executate, adica pot prelua comenzi server side.
In acest moment aveti SSI activat.Totusi putem sa profitam de bunavointa htaccess si sa facem un trick, inlocuiti a 2-a linie cu:

AddHandler server-parsed .html

Linia de mai sus permite fisierelor .html sa fie parsate ca si cele de .shtml.Atentie caci daca folositi SSI de foarte putine ori pe site puteti incetini viteza serverului, totusi acest delay este prea mic si nu este perceput de utilizator.De retinut ca se folosesc astfel de trick-uri pentru a ascunde faptul ca serverul respectiv foloseste SSI de catre eventualele atacuri ale hackerilor (userul vede pagina.html in loc de pagina.shtml deci nu va banui ca serverul foloseste SSI).
Daca totusi veti ramane cu extensia .shtml si vreti sa folositi SSI peste tot in pagina web, atunci este bine sa adaugati urmatoarea linie in htaccess:

DirectoryIndex index.shtml index.html

Aceasta inseamna ca orice pagina index.shtml poate reprezenta indexul unui director, in caz ca nu exista index.html.Vom discuta mai pe larg in capitolele de mai jos.

Restrictionarea userilor pe baza de IP

Cum se intampla in multe cazuri, utilizatori care practic nu au ce face testeaza site-ul de diferite vulnerabilitati sau efectueaza tot felul de operatiuni daunatoare scriptului, toate acestea pot fi stopate prin htaccess, prin banarea IP-ului:

order allow,deny
deny from 193.224.34.1
deny from 081.18.74.
allow from all

Dupa*censored*puteti observa mai sus se poate bloca un singur IP sau o clasa intreaga.Prin deny from 193.224.34.1′ am blocat un singur IP iar prin deny from 081.18.74. am blocat intreaga clasa de IP-uri (081.18.74.1,081.18.74.2,etc).
Bineinteles puteti folosi in htaccess si comanda deny from all care va bloca requesturile de la toate IP-urile posibile.Probabil v-ati pus problema blocarii pe domeniu a requesturilor deny from .hackerz.ro asta inseamna ca blocam toati userii care intra cu adrese de genul *.hackerz.ro.Ca o paranteza: sa zicem ca blocati toate requesturile cu deny from all va puteti lasa o portita pentru dumneavoastra in caz ca lucrati local sau de la un anume IP pe site-ul respectiv cu allow from localhost sau allow from 1337.ro unde localhost sau 1337.ro pot fi inlocuite cu IP-ul sau hostul de unde intrati.

Shimbari in setarile default ale unui folder

Daca ati fost atenti ati vazut mai sus sintaxa DirectoryIndex si va intrebati ce anume face.Ei bine, daca v-ati saturat ca indexul site-ului dumneavoastra sa fie index.html atunci il puteti schimba in ceva gen http://www.siteulmeu.ro/produse.html procedand in felul urmator:

DirectoryIndex produse.html

Daca sa zicem nu esti sigur care va fi indexul paginii tale poti face ceva de genul:

DirectoryIndex produse.html index.cgi index.pl default.html

Daca ati facut un htaccess cu linia de mai sus atunci cand un user va accesa pagina dumneavoastra http://www.siteulmeu.ro el va fi directionat catre index.cgi sau index.pl sau default.html sau produse.html depinde care dintre ele exista.Daca sa zicem in directorul respectiv se afla numai fisierul produse.html atunci browerul va fi redirectat aici.
Nota:sunt sigur ca v-ati intrebat:dar daca am toate fisierele in director (produse.html,index.cgi,index.pl,default.html) atunci unde se va duce browserul?. Raspunsul este simplu: la primul element din lista, in acest caz produse.html.
Pentru webmasteri: este de preferat sa folositi DirectoryIndex pe anumite foldere gen (/images/ sau /include/) unde aveti poze sau informatii pe care utilizatorul nu trebuie sa le acceseze direct.Iata un exemplu productiv: daca un user va incerca sa acceseze directorul /images/, el poate fi redirectionat inapoi catre index cu DirectoryIndex index.html iar index.html sa contina un meta refresh cu redirectie catre ../index.html.Voi explica mai multe in capitolul urmator.

Redirectionari

De multe ori se intampla sa va schimbati directorul la site ori cand faceti update ori cand schimbati providerul, iar atunci caile vechi indexate probabil de motoarele de cautare nu vor mai fi valide.Iata o solutie:

Redirect /director_vechi/produse.html http://www.siteulmeu.ro/directornou/produse.html

In linia de mai sus avem 3 elemente pasate fisierului htaccess.Comanda Redirect, calea relativa catre directorul vechi si calea reala (URL-ul) catre site-ul nou.Toate sunt despartite de un spatiu si sunt scrise pe o singura linie.De asemenea poti redirecta tot directorul:

Redirect /directorvechi http://www.siteulmeu.ro/directornou/

In acest fel ai redirectat toate linkurile din directorul vechi catre cel nou.

Prevenirea vizualizarii fisierului .htaccess

Iata o problema pe care am intalnit-o foarte des, mai ales pe serverele de windows.Daca sa zicem nu ati setat chmod corect pe .htaccess atunci riscati ca sa expuneti calea catre directorul cu parole.Puteti preveni aceste lucruri in modul urmator:

order allow,deny
deny from all

Prima linie specifica faptul ca fisierului .htaccess i se aplica anumite reguli.Intre tagurile se introduc regulile.Daca ati creat un fisier htaccess care contine aceste linii atunci un user care ar incerca sa vada ce se afla in fisier ar obtine o eroare 403.Nu uitati, foarte important este sa setati, daca aveti posibilitatea, CHMOD 644 pe fisierul .htaccess.

Lucrul cu MIME Types

Termenul MIME deriva din multipurpose internet mail extensions.Exemplu: fisiere de gen MP3,SWF,etc.De multe ori, multi provideri de hosting spun ca ofera online stream media adica poti asculta melodiile online sau te poti uita la filme online pe masura ce se incarca.Iata ce simplu este:

AddType application/x-shockwave-flash swf

Explicatiile sunt inutile, totusi trebuie precizat ca daca esti webmaster si vrei sa fortezi userul sa downloadeze aceste fisiere in loc sa le vizualizeze(asculte) online poti inlocui tipul MIME cu application/octet-stream.

Prevenirea link-urilor externe catre imagini si implicit a salvarii bandwith-ului

Titlul de mai sus se rezuma in engleza la urmatoarea expresie: hot linking aka bandwith stealing.Sunt absolut sigur ca ati observat ca tot mai multi administratori de site-uri romanesti au inceput sa isi ia asemenea masuri de protejare.Se intampla de multe ori sa vedem site-uri cu poze care de fapt apartin altor site-uri cu link direct.
Folosind .htaccess putem preveni toate acestea, fie aratand o eroare standard sau, cel mai haios, o alta poza gen Nice try!. Atentie mare pentru ca daca vreti sa va folositi de aceste optiuni pe care vi le ofera htaccess trebuie sa aveti suport pe server de mod_rewrite (http://httpd.apache.org/docs/mod/mod_rewrite.html).Daca sunteti siguri ca totul este in regula atunci iata un cod din htaccess care face toata treaba:

RewriteEngine on
RewriteCond %(HTTP_REFERER) !^$
RewriteCond %(HTPP_REFERER) !^http://(www.)?siteulmeu.ro/.*$ [NC]
RewriteRule .(gif|jpg)$ [F]

Trebuie bineinteles sa inlocuiti siteulmeu.ro cu domeniul dumneavoastra.Codul de mai sus va afisa un link la o imagine eronata atunci cand cineva incearca sa faca hot linking.Totusi pentru ca facem parte din elita ne place sa afisam ceva mai interesant celui care incearca sa ne fure bandwith-ul:

RewriteEngine on
RewriteCond %(HTTP_REFERER) !^$
RewriteCond %(HTTP_REFERER) !^http://(www.)?siteulmeu.ro/.*$ [NC]
RewriteCond .(gif|jpg)$ http://www.siteulmeu.ro/0wn3d.gif [R,L]

http://www.siteulmeu.ro/0wn3d.gif este url-ul de la imaginea care va fi afisata in loc de cea furata.Pentru a intelege codul de mai sus vizitati pagina corespunzatoare mod_rewrite de pe site-ul proiectului apache.org.

Exista platforme care necesita magic_quotes=off. Linia care trebuie sa fie adaugata in .htaccess este de forma:

php_flag magic_quotes_gpc Off


Manipulare de optiuni pentru directoare

Daca ai un director plin de imagini si arhive(zip,rar) si vrei ca lumea sa nu il poata accesa atunci htaccess este de partea ta.De obicei pe majoritatea serverelor nu este activat directory browsing, adica daca nu ai un index la directorul respectiv vei primi un mesaj de eroare gen 403 Forbbiden.

IndexIgnore *

Daca pui aceasta linie in htaccess atunci nimic din acel director nu va fi listat.Caracterul wildcard * ia in calcul toate extensiile posibile.Exista multiple posibilitati, ca de exemplu sa listezi toate fisierele dintr-un director in afara de imagini:

IndexIgnore *.gif *.jpg

Pe de alta parte, daca doriti sa listati fisierele dintr-un anume director (va e greu sa le indexati) atunci puteti face un htaccess cu urmatoarea linie:

Options +Indexes

Aveti grija ca in directorul pe care il listati sa nu se afle fisiere sau date care pot compromite serverul, de asemenea cred ca v-ati da seama ca daca puneti -Indexes atunci nu va mai fi listat continutul directorului.Daca doriti sa adaugati mai multe informatii la directorul listat puteti face urmatoarele: HEADER plaseaza deasupra fisierelor un text, README plaseaza la sfarsitul listingului text.Aceste comenzi sunt folositoare atunci cand listati niste surse de la programe sau scripturi si vreti sa dati mai multe explicatii.

Cum sa va distrati folosind htaccess

Ok.Am hotarat ca spre sfarsitul tutorialului sa pun cireasa pe tort si sa va arat cateva tehnici simple prin care va puteti securiza aplicatiile si prin care va puteti distra de minune.Creati un htaccess si adaugati urmatoarea linie:

AddType applications/x-httpd-php .php .l33t

Banuiesc ca va dati seama ce face linia de mai sus, iata si un exemplu real: http://www.1337.ro/~sasa/index.l33t
Extensiile sunt foarte importante, ele va pot salva de la atacuri de-ale hackerilor, de exemplu puteti transforma un site facut complet in PHP in extensia .html.Putini sunt cei care isi dau seama de aceste setari.
Iata alt exemplu pe care nu il recomand sa il folositi, ci numai sa va distrati:

AddType applications/x-httpd-php .php .exe .tar.gz .zip

Atentie unele browsere s-ar putea sa nu se arate prea fericite cu linia de mai sus )

Concluzie:

Exista o multitudine de setari pe care le puteti face cu ajutorul unui fisier .htaccess, pentru lista completa de instructiuni vizitati site-ul http://httpd.apache.org/docs/mod/directives.html
  • 162 A felhasználók hasznosnak találták ezt
Hasznosnak találta ezt a választ?

Powered by WHMCompleteSolution