Autor Zpráva
etrix
Profil
Zdravím,

různě na netu jsem se dočetl, že pokud budu na www stránkách odkazovat na cizí weby (nebo umožním ukládat aktivní odkazy v diskusi uživatelům), může mi nějaký vykuk hacknout web přes script injection. Proto se mají dělat různá opatření, která s sebou přináší zase nepohodlí atd.
Ale když tak koukám na různá fóra a i třeba do phpbb, tak tam se odkazy zvěřejnují naprosto nechráněné, tak vadí to nebo to nevadí? Jsem zmaten.

Dík za info.
ninja
Profil
etrix: Pokud umoznis vkladat URL ze kterych udelas normalni odkaz <a href=..., zadne nebezpecni ti nehrozi. Tedy krom spatneho hodnoceni, kdyz linky povedou na porno/gambling/atd. stranky.

Slozitejsi je to u vkladani obrazku ci JS, tak uz jiste nebezpeceni hrozi.
etrix
Profil
Rád bych umožnil:

<a href="http://hack.xy/hack.php">ahoj</a>
a
<img src="http://hack.xy/hack.php" />


Javascript si ošetřím. Jaký je tedy problém s obrázkem?
Leo
Profil
Problem v tomto pripade muze byt hlavicka referrer, ktera na cizi web prenasi informaci o tom, co ma uzivatel v adresnim radku - pokud tam ma vse nezbytne pro prihlaseni, mate vymalovano. Dalsi vec - jste si jisty, ze opravdu vite jakymi vsemi zpusoby se do kodu muze dostat javascript? Leo
Timy
Profil
ninja
„Pokud umoznis vkladat URL ze kterych udelas normalni odkaz <a href=..., zadne nebezpecni ti nehrozi. Tedy krom spatneho hodnoceni, kdyz linky povedou na porno/gambling/atd. stranky.“
Teď nevím jak to myslíš, ale i URL se musí ošetřovat, abych tam nemohl vložit „javascript:alert(1);“. Asi nejlepší je ověřit regulárem, jestli se jedná o platnou adresu. Nebo alespoň zkontrolovat, jestli adresa začíná http|https|ftp, pak už je to AFAIK v pořádku (respektive to možná povede na nesmyslnou adresu, ale to už není bezpečnostní riziko).

Jak dokonale ošetřit <img>, aby ten odkazovaný obrázek nemohl spustit žádný skript, nevím.
ninja
Profil
Timy: ano, musis osetrit jeslti vlozeny string je skutecne URL (alespon teoreticky).

Jak dokonale osetrit vlozeny obrazek z ciziho serveru taky nevim. Rozhodne je dobre v GETu (tedy URL stranky) nemit pole jmeno a heslo :).

Je mozne testovat jestli adresa obrazku je skutecne obrazek (alespon podle hlavicky). A stejne jako u linku overit validnost URL obrazku.
etrix
Profil
Problem v tomto pripade muze byt hlavicka referrer, ktera na cizi web prenasi informaci o tom, co ma uzivatel v adresnim radku - pokud tam ma vse nezbytne pro prihlaseni, mate vymalovano. Dalsi vec - jste si jisty, ze opravdu vite jakymi vsemi zpusoby se do kodu muze dostat javascript? Leo

Pro přihlašování vždy používám POST data, takže v adresním řádku by nic důležitého být nemělo. Jistý si nejsem, pokud znáte způsob jak dostat javascript do kódu, ve kterém povolím jen A a IMG tagy a zároveň vyfiltruji ONcokoli="" a přesto tam lze js dostat, tak sem s tím.
Timy
Profil
etrix
<a href="javascript:alert(1);">tohle bude fungovat všude</a>
<a href="" style="expression(eval('alert(1);'));">něco takového by mělo fungovat v IE</a>
<img src="javascript:alert(1);"> tohle údajně funguje v nějakých prehistorických prohlížečích

A jakým způsobem odfiltruješ to oncokoliv?
Timy
Profil
ninja
„Je mozne testovat jestli adresa obrazku je skutecne obrazek (alespon podle hlavicky). A stejne jako u linku overit validnost URL obrazku.“
Validita URL obrázku je nepodstatná, protože pod stránkou /index.php?obrazek=1 může být opravdu obrázek a pod adresou /planetarium.jpg může být klidně PHP skript, záleží na nastavení serveru/.htaccess.
etrix
Profil
Timy:

Používám tohle: http://cz2.php.net/manual/en/function.strip-tags.php#36574
a neporadilo si to akorát se style="expression(eval('alert(1);'));", ale mě to v IE6 nefunguje. Není to dokonalý, ale na pár věcí to funguje.

Jinak na intervalu se píše:
Pokud chceme povolit vkládání odkazů, je bezpodmínečně nutné odkazovat nikoli na požadovanou adresu, ale na skript, který se otevře v novém okně (pomocí target="_blank") a teprve pak přesměruje na požadovanou adresu. Nové okno je tak prosto jakékoli historie předchozího okna i zrádného refereru.

A pořád nerozumím tomu, jak se díky refereru, ve kterém není nic nebezpečného, můžu dostat na cizí účet, když zjistím že referer je web.cz/index.php?jdi=nastaveni, tak jak mi to umožní měnit někomu nastavení (použít jeho session)?

Mimochodem, dobrá stránka: http://ha.ckers.org/xss.html

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: