Jump to content
php.lv forumi

CSFR


L4URO
 Share

Recommended Posts

č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 by L4URO
Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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 by codez
Link to comment
Share on other sites

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 !

Link to comment
Share on other sites

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 

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...
 Share

×
×
  • Create New...