Administrare server open source

Platforma de hosting cu software liber, gratuit, open source.

Comentariile sunt închise pentru Trucuri cu mod_setenvif

In Apache exista un set de instructiuni oferite de modulul mod_setenvif care sunt foarte utile in filtrarea utilizatorilor sau pentru crearea de variabile de mediu care pot fi accesate de alte module sau de scripturile server-side utilizate. mod_setenvif ne pune la dispozitie patru directive cu ajutorul carora putem crea variabile de mediu in functie de anumite aspecte ale cererii:

  • BrowserMatch
  • BrowserMatchNoCase
  • SetEnvIf
  • SetEnvIfNoCase

BrowserMatch verifica identificatorul browserului, identificatorul User-Agent, si creaza o variabila de mediu in functie de sirul de identificare. De exemplu, daca dorim restrictionarea unei aplicatii la anumite browsere putem face urmatoarele reguli:

BrowserMatch Firefox IsGood=1
BrowserMatch Safari IsGood=2
BrowserMatch MSIE IsGood=0

In cadrul aplicatiei folosite vom putea citi variabila de mediu „IsGood” iar in functie de valoarea ei sa luam o decizie. Daca aplicatia este creata in PHP si este destinata doar browserelor Firefox si Safari putem citi variabila „$_SERVER[‘IsGood’]” folosind urmatorul cod:

< ?php
if( isset($_SERVER['IsGood']) && $_SERVER['IsGood'] > 0 ) {
    // Ruleaza aplicatia
} else {
    // Afiseaza un mesaj de eroare
}
?>

BrowserMatchNoCase functioneaza in mod identic, cu mentiunea ca nu e case-sensitive.

SetEnvIf functioneaza in mod asemanator dar spre deosebire de BrowserMatch poate verifica alte informatii oferite de Apache, cum ar fi:

  • Remote_Host – hostul masinii client, daca are setat unul si daca in Apache in httpd.conf nu e setat HostnameLookups pe Off;
  • Remote_Addr – adresa IP a masinii client;
  • Server_Addr – adresa IP pe care a venit cererea;
  • Request_Method – tipul cererii (GET, POST, HEAD, etc);
  • Request_Protocol – protocolul folosit pentru cerere (HTTP/0.9, HTTP/1.1);
  • Request_URI – resursa ceruta (/imagini/logo.gif).

Sintaxa acceptata este urmatoarea:

SetEnvIf informatie expresie [!]env[=valoare]

In cadrul sintaxei „informatie” e unul din aspectele mentionate mai sus (ex. Request_Method), „expresie” e un sablon de tip expresie regulata, „env” este numele variabilei de mediu care dorim sa o modificam iar „valoare” este valoarea care o vom da variabilei de mediu. Putem inlocui SetEnvIf cu SetEnvIfNoMatch pentru ca sirul de identificare sa fie verificat in mod case-insensitive.

Un exemplu bun de utilizare a instructiunii SetEnvIf este blocarea robotilor care fac probleme:

SetEnvIfNoCase User-Agent ContactBot BadBot=1
SetEnvIfNoCase User-Agent ContentSmartz BadBot=1
 
<files "index.*">
    Order Allow,Deny
    Deny from env=BadBot
    Allow from all
</files>

Exemplul de mai sus poate fi reprodus si cu directiva BrowserMatch. Un alt exemplu, care nu poate fi reprodus cu BrowserMatch, ar verificarea refererului:

SetEnvIf Referer www\.lamp\.ro Trusted=1

In cazul acesta se va crea variabila de mediu „Trusted” cu ajutorul careia putei categorisi refererii.

Un exemplu la fel de dragut si util uneori este specificarea unui identificator care, atunci cand este intalnit, serverul Apache nu va inregistra in loguri cererea. De exemplu, pentru a nu salva in loguri cererile din sectiunea „/chat/” a unui site vom crea o variabila de mediu cu directiva SetEnvIf:

SetEnvIf Request_URI "\/chat\/" dontlog

Urmatorul pas ar fi ca in fisierul httpd.conf, in sectiunea VirtualHost a domeniului in cauza, sa cautam directiva CustomLog si sa ii adaugam la sfarsit „env=!dontlog„. De exemplu:

CustomLog /var/log/apache/lamp.ro.access_log combined env=!dontlog

Acum, serverul web nu va salva in logurile de acces cererile care au ca variabila de mediu „dontlog„.

Apache

Comments are closed.