Autor Zpráva
stepanka
Profil *
Ahoj,

prosím, poradil by mi někdo ohledně ochrany proti zcizení session ID?

Kontrola IP adresy moc nepřipadá v úvahu, protože si nedovedu představit, jak budu zákazníkovi vysvětlovat, že má dynamickou IP adresu a že jeho neustálé odhlašování ze systému je daň za zabezpečení.

Už druhý den se snažím vymyslet nějaký jiný systém kontroly.. Napadlo mě využít skriptu pro přihlašování. V kódu totiž mám:

if (isset($p_login)) // po kliknuti na tlacitko "Prihlasit"
	{
	if (kontrola_udaju($p_jmeno, $p_heslo)) 
	// funkce, ktera vraci TRUE v pripade, ze v databazi uspesne overi zadane jmeno a heslo
		{
		$_SESSION['login']['name']=$p_jmeno;
		header("Location: index.php");
		exit();
		}
	else
		{
		echo 'Chybné jméno nebo heslo';
		}
	}


Pokud jako útočník cookie ukradnu, nikdy neprojdu tou tučně zvýrazněnou podmínkou. Proto se teď snažím vymyslet nějakou funkcionalitu, která by toho mohla využít. Bohužel moje dosavadní pokusy zatím skončily neúspěchem.

Napadlo mě ještě, jestli je třeba možné ukládat nějakou hodnotu lokálně na konkrétní počítač. Do nějaké paměti prohlížeče. A odtud kontrolovat. To mi přijde jako nezneužitelné, ale zase nevím, jestli to vůbec jde.

Pokud by někdo věděl o nějakém řešení, budu moc vděčná.

Díky moc.
fajzen
Profil
stepanka:
Ahoj,
krádež identity využívajú typy útokov XSS a CSFR, obrana proti nim sa riešila tu na fóre: Funkční obrana proti CSRF?, prečítaj si tiež stránky, na ktoré sa v diskusií odkazuje

inak k tvojmu skriptu: neviem, ako to myslíš - využít skriptu pro přihlašování, to ako pred každou akciou by používateľ musel zadať meno a heslo? ak áno, proti CSFR by to bolo účinné, ale za cenu straty komfortu používateľa...

v odkazovanej diskusií sa riešilo používanie autorizačného tokenu, čo nie je na škodu... ale keďže podstata CSFR je v pridaní škodlivého odkazu na tvoju stránku (či už vo forme obrázku, JavaScriptom alebo klasického <a>), malo by stačiť, keď budeš poctivo kontrolovať každý vstup od používateľa, ktorý sa následne niekde na tvojej stránke zobrazí...
stepanka
Profil *
fajzen:
Moc děkuju za Tvou reakci.

neviem, ako to myslíš - využít skriptu pro přihlašování, to ako pred každou akciou by používateľ musel zadať meno a heslo? ak áno, proti CSFR by to bolo účinné, ale za cenu straty komfortu používateľa...
To v žádném případě, to už je pohodlnější ta IP adresa. Regulérní administrátor tou zvýrazněnou podmínkou projde, útočník, který získá cookie, tou podmínkou neprochází. Takže přemýšlím, že bych právě v této podmínce vygenerovala nějaký náhodný řetězec a někam ho uložila. A to tak, aby útočníkovi tento řetězec, i po získání cookie, chyběl, ale administrátor aby ho měl po správném přihlášení k dispozici.

V tom článku, na který jsi mě odkázal, se mi celkem líbí předávání tajného parametru jako hidden pole u formuláře. Asi to zkusím implmentovat, to by mohlo fungovat..

malo by stačiť, keď budeš poctivo kontrolovať každý vstup od používateľa, ktorý sa následne niekde na tvojej stránke zobrazí...
Já vím, vstupy jsou sice kontrolovány, ale přece jen přemýšlím nad zadními vrátky.
Lamicz
Profil
stepanka:
mrkni jeste na
session_regenerate_id();

zavolej ji po loginu.
Je to ochrana proti session fixation
stepanka
Profil *
Zkouším vložit na stránku formulář se skrytým inputem, ale provádí to zvláštní věci..

Pokud do skriptu umístím:

<?php
echo '<form method="post" action="" name="auth_token"><input type="hidden" name="auth_token" value="12345" /></form>';
?><script>document.auth_token.submit();</script><?php

$soubor = fopen("./kod.txt", "a");
fwrite($soubor, var_export($_POST, true));
fwrite($soubor,"\n");
fclose($soubor);

echo 'test: '.$_POST['auth_token'].'<br />';
?>


neudělá to ve FF nic, a v IE to začne běhat dokola a zápis do souboru se provádí, dokud běh skriptu nezastavím.

Zkoušela jsem dát místo <body> tvar <body onload="document.auth_token.submit();">, ale tady pro změnu nastane smyčka i ve FF.

Jsem z toho trochu jelen.. Jakým způsobem se dá vložit skrytý input na každou stránku? Tzn., aby při každém najetí stránky ta hodnota $_POST['auth_token'] existovala?
fajzen
Profil
stepanka:
samozrejme, že sa ti stránka zacyklí, keď hneď po načítaní odošleš formulár... autentifikačný token nemusíš posielať pri každej návšteve stránky, iba pri tých, ktoré vykonávajú nejakú akciu... a vtedy sa do formulára, ktorý slúži na submitnutie tej akcie vloží token
AM_
Profil
stepanka:
že má dynamickou IP adresu a že jeho neustálé odhlašování ze systému je daň za zabezpečení.
dynamická IP se nemění "pořád", přinejmenším během jedno připojení zůstává stejná (to by byl jinak dost bordel). Mimo jiné, většina poskytovatelů vysokorychlostního internetu obvykle po dlouhou dobu (řádově měsíce) poskytuje danému klientovi stejnou IP, takže se mění opravdu jednou za dlouhý čas.
To znamená, že fakt, že má zákazník dynamickou IP, ověřování stejné IP během jedné session nijak neovlivní (leda že by se odpojoval od internetu každou chvíli, což není příliš obvyklé, a považoval bych za únosné, když ho to odhlásí). Pokud ti jde o dlouhodobé přihlášení, řešil bych ho skrz nějakou autorizační cookie (ne ukládat do cookies jméno a heslo, ale třeba nějaký hash, který, pokud session neexistuje, se spáruje s databází, přihlásí uživatele a změní se). Pokud je požadována extrémní bezpečnost, tak pochopitelně žádné dlouhodobé přihlašování nepřipadá v úvahu, každý trvale uchovávaný nástroj k přihlášení lze ukrást.
stepanka
Profil *
fajzen:
Jasně, asi máš pravdu.. Myslela jsem, že to půjde jednoduše vložit všude, ale i řešení, které píšeš Ty, je možné. Děkuju.

AM:
Opravdu? Abych pravdu řekla, tak nemám ponětí, jak často se ta IP adresa mění. Pokud je to, jak píšeš, asi to vyzkouším. Já vlastně trvalou IP adresu nemám, takže bude asi nejlepší to vyzkoušet, budu po nějakou dobu přihlášená a uvidím, co to udělá.

Pokud ti jde o dlouhodobé přihlášení, řešil bych ho skrz nějakou autorizační cookie
Ne, dlouhodobě přihlašovat uživatele nechci. Jde mi jen o to, aby nebylo možné zneužít jeho cookie.

Mockrát díky.
AM_
Profil
stepanka:
Ne, dlouhodobě přihlašovat uživatele nechci.
tak pak ti rozhodně změna IP nehrozí, opravdu je to, jak říkám, IP se rozhodně nezmění dřív než při opětovném navázání internetového připojení.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

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

0