Jump to content
php.lv forumi

Problēma ar formas token vērtību


ArnisR

Recommended Posts

Tātad PHP ģenerē token vērtību:

<?php
session_start();
$token = $_SESSION["token"] = md5(uniqid(rand(), true));
?>

 

Un ir HTML forma ar token lauku:

<form action="process.php" method="post">

<input type="text" name="username"/>
<input type="password" name="password"/>


<input type="hidden" name="token" value="<?php echo $token; ?>"/>

<input type="submit" name="submit" value="Sign In!"/>
</form>

 

Apstrādes failā tiek salīdzinātas $_POST un $_SESSION token'a vērtības, un attiecīgi viss parējais notiek! Bet ir viena problēma: ja formas lapu atver jaunā cilnē un refresho, neaizverot sākotnējo, vai arī apskatās source un refrešo, tad ielogošanās no sākotnējās lapas nesanāk, jo sesijas token's jau ir mainījis savu vērtību, bet forma - ne!

Kā to var apiet, vai ir kāda cita metode token'u izmantošānā? Paldies!

Edited by ArnisR
Link to comment
Share on other sites

Es savulaik mēģināju uztaisīt captcha un saskāros ar to pašu problēmu.

Beigās es uztaisīju, ka sesijā ir masīvs ar 10 pēdējiem captcha kodiem, līdz ar to pat ja ir atvērts paralēls tabs vai skatīts source, tad $_POST vērtība tiek pārbaudīta in_array($_POST['captcha'], $_SESSION['captcha'])

Link to comment
Share on other sites

Kādas problēmas kapčai sūtīt līdzi tokenu, kurš ģenerēts no kapčas?

 

$token=hash($capcha+$salt);

 

formai līdzi sūta $tokenu. Pie ievades pārbauda, vai no ievadītās kapčas var iegūt tokenu. Saprotams, ka zinot tokenu iegūt kapču nav iespējams, ja lieto modernu hash algoritmu.

Link to comment
Share on other sites

  • 3 weeks later...

Uztaisi formas tokenu, kas piesaistīts ip adresei, nevis randomā, tad tas nemainīsies tabos.

 

W00t risinājums, īpaši lielu paldies tev pateiks gov aģentūras un kompānijas ar X lietotājiem aiz vienas adreses + ISP'i, kur X klientiem ir viena IP. :>

 

hash's no urļa, kas apstrādās pieprasījumu + sesijas id + vēl kādu server side secret'u, katram lietotājam katrai darbībai būs unikāls tokens

 

Jau labāk.

 

Kādas problēmas kapčai sūtīt līdzi tokenu, kurš ģenerēts no kapčas?

 

$token=hash($capcha+$salt);

 

formai līdzi sūta $tokenu. Pie ievades pārbauda, vai no ievadītās kapčas var iegūt tokenu. Saprotams, ka zinot tokenu iegūt kapču nav iespējams, ja lieto modernu hash algoritmu.

 

Good, You can now take a cookie from the Jar.

 

 

Kāds, ja interesē, varētu paņemt https://github.com/Addvilz/x0Cache/blob/master/x0cache/session.php kā pamatu un palabot, lai iegūtu tokenus formām. Double the gun, double the fun.

Link to comment
Share on other sites

W00t risinājums, īpaši lielu paldies tev pateiks gov aģentūras un kompānijas ar X lietotājiem aiz vienas adreses + ISP'i, kur X klientiem ir viena IP. :>

 

Jā kā tad, viens aģentūras galdiņa urbējs taisīs xsrf uzbrukumu tieši kādam no tās pašas aģentūras - tas ir statistiski mazvarbūtīgi, tad jau vieglāk ieiet kabinetā un palaist trojāni.

Link to comment
Share on other sites

 

Jā kā tad, viens aģentūras galdiņa urbējs taisīs xsrf uzbrukumu tieši kādam no tās pašas aģentūras - tas ir statistiski mazvarbūtīgi, tad jau vieglāk ieiet kabinetā un palaist trojāni.

Vieglāk ir "palūgt" galdiņa urbējam visas paroles ar cirvi, ja jau sākam par šo runāt.

 

Nav jau gluži runa par to, kas un no kurienes. Runa ir par to, ka IP bindošana ļauj uzbrukumus pret masām, ne pret katru atsevišķo jūzeri. Un tas ir validi ne tikai xsrf

Link to comment
Share on other sites

IP piesaiste pilnīgi noteikti samazina to indivīdu kopu, kam ļauts izmantot konkrētās funkcionalitātes konkrētajā gadījumā. Problēma šeit nav faktā, ka daudzi lietotāji nāk no vienas adreses, bet gan tajā, ka eksistē lietotāji, kam sesijas laikā vairākkārt mainās IP adrese.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...