prezentace
Transkript
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)
přidat uživatele z NIS do lokální databáze
# řádek v /etc/master.passwd
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 ...
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...
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...
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á...