prezentace

Transkript

prezentace
mod_rewrite
Martin Bartušek
Petr Šťastný
MFF UK, 2008
Moduly Apache
●
●
mod_rewrite = modul do WWW serveru Apache pro
přepisování URL adres
mod_alias = modul pro změnu mapování mezi URL
adresou objektů a fyzickým umístění na serveru
–
●
méně možností než mod_proxy
mod_proxy = modul pro „zprostředkování“ HTTP
požadavků
–
–
Apache může fungovat také jako proxy server
lze využívat v mod_rewrite
mod_rewrite
●
přepisování URL adresy
–
●
provádí se před její interpretací
2 možné výsledky:
–
přesměrování na novou URL adresu
●
–
prohlížeč obdrží zpět redirect (301,302) na nové umístění
podstrčení obsahu z nové URL adresy
●
●
prohlížeč obdrží jako odpověď stránku z nové URL, ale neví o
tom
obsah může pocházet ze stejného webu, z jiného webu na
stejném serveru nebo z jiného serveru
Instalace a nastavení
●
instalace modulu
–
–
●
Apache z distribuce – modul je součástí, ale je potřeba ho
povolit v konfiguraci (httpd.conf)
kompilace Apache – nutno kompilovat s –enable-rewrite
nastavení přepisovacích pravidel
–
v konfiguraci serveru (httpd.conf)
●
●
–
v souboru .htaccess
●
●
–
per-server – pro všechny weby na serveru
per-virtualhost – pro jeden virtualhost (web)
per-directory – pro konkrétní adresář konkrétního webu
tato možnost musí být povolena správcem serveru
v obou případech nutné zapnout:
RewriteEngine on
Přehled konfigurace
●
RewriteBase
–
●
RewriteCond
–
●
podmínky, které musí být splněny, aby došlo k přepsání
RewriteRule
–
●
určení adresáře, od kterého se berou přepsané relativní cesty
samotná přepisovací pravidla
RewriteMap
–
nastavení přepisovacích map
RewriteRule
RewriteRule Pattern Substitution [flags]
●
Pattern = na co se klient ptá
–
regulární výraz (Perl styl)
●
●
–
navíc lze uvést „!“ - negace výrazu
části výrazu lze dát do závorek – s jejich obsahem se pak
pracuje dále
pracuje se s URL adresou bez hosta, portu a bez parametrů
●
http://www.example.com/cesta/soubor.php?parametry
-> cesta/soubor.php
–
s ostatními částmi lze pracovat v RewriteCond
–
URL adresa se přepíše podle Substitution, pokud aktuální
URL „matchuje“ Pattern a jsou splněny případné podmínky v
RewriteCond (které předchází tomuto RewriteRule)
RewriteRule
RewriteRule Pattern Substitution [flags]
●
Substitution = na co se přepíše URL
–
filesystem cesta
●
–
URL cesta
●
–
objekt na serveru, který bude klientu doručen
cesta k objektu v aktuálním webu, relativní k DocumentRoot
absolutní URL
●
na kterou bude přesměrováno nebo ze které bude získán obsah
přes modul mod_proxy
RewriteRule
RewriteRule Pattern Substitution [flags]
●
Substitution
–
URL parametry se převezmou z původní URL
–
nebo je zcela odstraníme (uvedeme na konci „?“)
–
nebo je změníme (uvedeme „?“ a nové parametry)
●
–
do nich lze vložit řetězce získané z regulárního výrazu v Pattern
nebo přidáme další
●
za „?“ napíšeme nové parametr a uvedeme flag QSA, který
doplní i ty původní
RewriteRule
RewriteRule Pattern Substitution [flags]
●
Substitution
–
můžeme se odkazovat na namatchované části Patternu
–
$N – odkaz na N-tý řetězec v Pattern
–
%N – odkaz na N-tý řetězec v regulárním výrazu v posledním
RewriteCond
–
%{VARNAME} – serverová proměnná
–
${mapname:key|default} – volání mapovací funkce
RewriteRule
RewriteRule Pattern Substitution [flags]
●
flags = další příznaky pravidla
–
–
–
–
–
–
F – zakázat URL, vrací HTTP odpověď 403 (forbidden)
L – toto je poslední pravidlo, další se nebude provádět
NC – case-insensitive výraz
P – force proxy, vynucení zpracování cíle přes mod_proxy
QSA – na konec přidat původní URL parametry
R[=code] – přesměrovat na novou URL
●
●
–
301 – Moved Permanently
302 – Found (Moved Temporarily) – výchozí
...a mnoho dalších
Příklady
RewriteRule Pattern Substitution [flags]
# obyčejné přesměrování
RewriteRule puvodni-stranka1\.html nova-stranka1.html [R]
# obyčejné podstrčení
RewriteRule puvodni-stranka2\.html nova-stranka2.html
# přesměrování jinam
RewriteRule stranka\.html http://www.example.com/jinam.html
# zákaz stránek
RewriteRule ^(.*/)?CVS/.* - [F]
RewriteRule ^(.*/)?\.svn/.* - [F]
# nastavení MIME-type dokumentu
RewriteRule ^(.+\.php)s$ $1 [T=application/x-httpd-php-source]
# jazyk schovaný v URL
RewriteRule ^cs/(.*)$ $1?lang=cs [QSA]
RewriteRule ^en/(.*)$ $1?lang=en [QSA]
RewriteCond
RewriteCond TestString CondPattern [flags]
●
●
jedna nebo více podmínek, které musí být splněny, aby
se mohlo aplikovat následující pravidlo RewriteRule
pokud je více RewriteCond, musí platit všechny zároveň
(AND)
–
lze změnit přidáním „[OR]“ na konec podmínek
RewriteCond
RewriteCond TestString CondPattern [flags]
●
TestString = testovaný řetězec
–
$N – odkaz na část řetězce v Pattern souvisejícího
RewriteRule
–
%N – odkaz na část řetězce v CondPattern předchozího
RewriteCond ve stejné skupině
–
%{VARNAME} – serverová proměnná
–
${mapname:key|default} – volání mapovací funkce
RewriteCond
●
%{VARNAME}
–
HTTP hlavičky
●
–
informace o spojení a požadavku
●
–
–
–
DOCUMENT_ROOT, SERVER_NAME, …
datum a čas
●
–
REMOTE_ADDR, REQUEST_METHOD, QUERY_STRING, …
serverové proměnné
●
–
HTTP_USER_AGENT, HTTP_REFERER, HTTP_HOST, …
TIME, TIME_YEAR, TIME_HOUR, TIME_WDAY, …
%{ENV:variable} – proměnné prostředí
%{SSL:variable} – parametry SSL spojení
%{HTTP:header} - libovolná HTTP hlavička
RewriteCond
RewriteCond TestString CondPattern [flags]
●
CondPattern
–
–
–
–
–
–
–
regulární výraz pro matchování TestString
možné prefixy !, <, >, = (lexikograficky)
-d – je adresářem
-f – je souborem
-s – je neprázdným souborem
-l – je symbolickým linkem
-x – má executable právo
...a další
Příklady – hezké URL
RewriteCond TestString CondPattern [flags]
RewriteRule Pattern Substitution [flags]
# jednoduché
RewriteRule ^a/([^/]*)/(.*)\.html$ article.php?id=$1 [QSA,L]
# jen pokud požadovaný soubor opravdu neexistuje
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^forum/topic-([0-9]+)\.html$ forum-topic.php?id=$1 [QSA,L]
# výchozí skript
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)\.html$ /unipage.php?page=$1 [L,QSA]
●
●
pozor na interpretaci relativních cest
pozor na odkazy
Příklady
# přesměrování podle domény
# example.com -> www.example.com
RewriteCond %{HTTP_HOST} ^example\.com$
RewriteRule (.*) http://www.example.com/$1 [R=301]
# přesměrování na HTTPS
RewriteCond %{HTTPS} ^off$
RewriteRule (.*) https://%{HTTP_HOST}/$1 [R]
# různé verze
RewriteCond
RewriteCond
RewriteRule
RewriteRule
stránek podle data/času
%{TIME_HOUR}%{TIME_MIN}
%{TIME_HOUR}%{TIME_MIN}
^foo\.html$
^foo\.html$
>0700
<1900
foo.day.html
foo.night.html
# různé verze stránek podle prohlížeče
RewriteCond %{HTTP_USER_AGENT} ^Lynx/.*
RewriteCond %{HTTP_USER_AGENT} ^Mozilla/[12].*
RewriteRule ^foo\.html$
foo.20.html
RewriteRule ^foo\.html$
foo.32.html
[OR]
[L]
[L]
Příklady
# zákaz vložení našich obrázků na cizí stránky
# (Blocked Inline-Images)
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://www\.example\.com/.*$ [NC]
RewriteRule ^.*\.gif$
[F]
# s podstrčením jiného obrázku
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://www\.example\.com/.*$ [NC]
RewriteRule ^.*\.gif$
/stop-stealing-images.gif
[L]
Příklady
# virtuální subdomény
# http://subdomain.example.com/file.html
# -> http://www.example.com/subdomain/file.html
RewriteCond %{HTTP_HOST} !^www\.example\.com$ [NC]
RewriteCond %{HTTP_HOST} ^(www\.)?([a-z0-9-]+)\.example\.com [NC]
RewriteRule (.*) subdomain/%2/$1 [L]
# jednoduché použití mod_proxy
RewriteCond %{HTTP_HOST} !^nasa\.proxy\.example\.com$
RewriteRule (.*) http://www.nasa.gov/$1 [P]
RewriteMap
RewriteMap MapName MapType:MapSource
●
lze nadefinovat a používat překladovou „tabulku“ (mapu)
–
●
●
„asociativní“ mapa klíč-hodnota
MapName – libovolné pojmenování mapy
MapType, MapSource
–
txt – plaintext soubor
●
–
–
rnd – plaintext soubor s uvedením více variant pro jeden klíč,
mezi nimi je náhodně vybíráno
dbm (hash table)
●
–
–
1 záznam na řádek, oddělovač mezera, možné komentáře (#)
záznamy klíč-hodnota uloženy v hashovací tabulce pro rychlejší
přístup, „kompiluje“ se z plaintext souborů
int – interní funkce (toupper, tolower, …)
prg – externí program
●
naslouchá na stdin, posílá výsledky na stdout
RewriteMap – příklad
# soubor map.txt
static
dynamic
www1|www2|www3|www4
www5|www6
# komentář
# soubor httpd.conf
# (RewriteMap nelze použít v .htaccess)
# load balancing s mod_proxy
RewriteMap svr rnd:/path/to/file/map.txt
RewriteRule ^(.*\.(png|gif|jpg)) http://${svr:static}/$1 [NC,P,L]
RewriteRule ^(.*) http://${svr:dynamic}/$1 [P,L]

Podobné dokumenty

Administrace Unixu (YP, NFS, AMD)

Administrace Unixu (YP, NFS, AMD) přidat uživatele z NIS do lokální databáze # řádek v /etc/master.passwd

Více

VÝCHODNÍ FRONTA

VÝCHODNÍ FRONTA TŘI SMĚRY ÚTOKU

Více

Krádež přihlašovacích údajů obrázkem

Krádež přihlašovacích údajů obrázkem SOOM.cz Hacking & Security Konference 2014

Více

referát

referát XSS můžeme dělit na dva základní druhy: ● Persistent (nebo stored, second-order) ● Non-Persistent (nebo reflected) Persistent XSS útok se používá na stránky generované z databáze. Útočník např. do ...

Více

openMagazin 3/2011

openMagazin 3/2011 možnost sledovat živé vysílání ČT24. Tato funkce je zatím v betaverzi a podle reakcí uživatelů to tak vypadá. Někomu funguje bez problémů, někomu vůbec. Pokud budete patřit mezi ty šťastlivce, apli...

Více

DVR1C1161 - Bosch Security Systems Česká Republika

DVR1C1161 - Bosch Security Systems Česká Republika c. Přístroj nepracuje správně nebo se vám jej nedaří nastavit tyk, aby pracoval v souladu s návodem k obsluze. d. Přístroj spadl a je poškozený. e. Jestliže přístroj vykazuje zjevné příznaky záv...

Více

Adventní vazba - Lidová řemesla

Adventní vazba - Lidová řemesla Obvykle se používají větvičky z jehličnanů. Velmi vhodná je jedle a smrk, dobře se pracuje s tisem, jalovcem a tújí. Lze použít i různé větvičky listnatých dřevin, nejlépe neopadavých a barevně stá...

Více