L4URO Posted December 12, 2013 Report Share Posted December 12, 2013 (edited) čau,tauta tā tad re kur ir kods Token.php fails <?php class Token { public static function generate () { return Session::put(Config::get('session/token_name'),md5(uniqid())); } public static function check($token){ $tokenName=Config::get('session/token_name'); // no config faila paķer token_name ,token_name = token; if(Session::exists($tokenName) && $token === Session::get($tokenName)){ Session::delete($tokenName); return true; } return false; } } ?> Session.php <?php class Session{ public static function exists($name){ return (isset($_SESSION[$name])) ? true : false; } public static function put($name,$value){ return $_SESSION[$name] = $value; } public static function delete($name){ if(self::exists($name)){ unset($_SESSION[$name]); } } public static function get($name){ return $_SESSION[$name]; } } ?> <?php require_once 'core/init.php'; if(Input::exists()){ // parbauda vai kaut kas ir submitots (vai $_POST array nav tuksš) //echo Input::get('username'); if(Token::check(Input::get('token'))){ // metode,kas paņem token input fielda vērtību,tas būtu tas pats,kā $_POST['token']; echo "I RAN GUYS ! ! ! <br>"; KODS KODS KODS KODS } } ?> <form action="" method="post"> <div class="field"> <label for="username">Username</label> <input type="text" name="username" id="username" value="<?php echo escape(Input::get('username')); ?>" autocomplete="off"> </div> <input type="hidden" name="token" value="<?php echo Token::generate();?>"> <input type="submit" value="Register"> </form> Tā tad,cilvēks nevar submitot caur url. Es varu saprast secību,katru reizi,kad refrešo lapu tiek uzģenerēts jauns TOKENS un uztaisīta sesija ar vārdu token un vērtību ,kas ir vienāda ar to,kas tiek ģenerēts. Ja tiek uzspiesta poga mēs pārbaudām ,vai tokena vērtība,kas ir hidden input fieldā ir vienāda ar tokena vērtību,kas ir iestorota sesijā,ja tā ir tad mēs unsetojam sesiju. Es pareizi sapratu? Es pie koda pievienoju komentārus. ja ieiet caur google chrome "parbaudit elementu" un nomaina input fielda genereto tokenu un uzspiez submit,tad tas tokens nesakrit ar sesijas tokenu un nekas nenotiek -> sesija netiek dzēsta un mēs atgriežam false un kods,kas ir aiz if(Token::check(Input::get('token'))){ nedarbojas,jo mēs neatgriezām true Bet es nesaprotu,kā tas viss darbojas,ka nevar submitot no url un ir aizsardzība un vajag unsetot sesiju,ja tokens sakrit ar tokenu kas ir sesija,vai kāds var paskaidrot ? Paldies ! Edited December 12, 2013 by L4URO Quote Link to comment Share on other sites More sharing options...
codez Posted December 12, 2013 Report Share Posted December 12, 2013 CSRF ir aizardzība, nevis pret postošanu no urļa, bet no citas lapas. No urļa tāpat nevar postot, jo ar urli nevar iesetot POST datus. Un pamatā aizsardzība darbojas tā, ka tavā lapā pie formas līdzi nāk tokens, kurš ir unikāls katram lietotājam un sveša lapa nezin šo tokenu, tāpēc postojot no tavas lapas tas ir pareizs, bet no svešas nav. Quote Link to comment Share on other sites More sharing options...
L4URO Posted December 12, 2013 Author Report Share Posted December 12, 2013 Tagad sapratu,kāpēc vajag unsetot sesiju,lai varetu generet jaunu tokenu un veidot jaunu sesiju,vai ne? Quote Link to comment Share on other sites More sharing options...
codez Posted December 12, 2013 Report Share Posted December 12, 2013 (edited) Tagad sapratu,kāpēc vajag unsetot sesiju,lai varetu generet jaunu tokenu un veidot jaunu sesiju,vai ne? Principā jau vienkāršibas labad var pārbaudīt vai sesija ir iesetota un neģenerēt jaunu un izmantot visā sesijas laikā vienu un to pašu tokenu. Jo, ja pārģenerēsi tokenus, tad atverot vairākos tabos kādas formas, iepriekšējās vairs nestrādās. Edited December 12, 2013 by codez Quote Link to comment Share on other sites More sharing options...
L4URO Posted December 12, 2013 Author Report Share Posted December 12, 2013 CSRF ir aizardzība, nevis pret postošanu no urļa, bet no citas lapas. No urļa tāpat nevar postot, jo ar urli nevar iesetot POST datus. Un pamatā aizsardzība darbojas tā, ka tavā lapā pie formas līdzi nāk tokens, kurš ir unikāls katram lietotājam un sveša lapa nezin šo tokenu, tāpēc postojot no tavas lapas tas ir pareizs, bet no svešas nav. paldies par atbildi ! Quote Link to comment Share on other sites More sharing options...
L4URO Posted December 12, 2013 Author Report Share Posted December 12, 2013 Principā jau vienkāršibas labad var pārbaudīt vai sesija ir iesetota un neģenerēt jaunu un izmantot visā sesijas laikā vienu un to pašu tokenu. Jo, ja pārģenerēsi tokenus, tad atverot vairākos tabos kādas formas, iepriekšējās vairs nestrādās. šis ir domāts loginam Quote Link to comment Share on other sites More sharing options...
Kavacky Posted December 14, 2013 Report Share Posted December 14, 2013 Attiecībā uz ielogošanos CSRF ir diezgan bezjēdzīgs pasākums. Quote Link to comment Share on other sites More sharing options...
Kemito Posted December 16, 2013 Report Share Posted December 16, 2013 Kā jau Kavackijs sacīja - uz tādām lietām kā "logins" tas nav vajadzīgs. Šādu pasākumu piekopt nepieciešams būtu pie "create", "update", "delete" daļām. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.