Problem in Object – PHP – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Problem in Object – PHP – Fórum – Programujte.comProblem in Object – PHP – Fórum – Programujte.com

 

neimenuje0
Návštěvník
20. 4. 2007   #1
-
0
-

Vytvořil jsem si tuhle třídu na ochranu proti CSRF útoku, ale nějak mi nefunguje:

#### Třída ochrany proti CSRF útoku

class csrf_control
{
private $controlString;
private $lastControlString;
function __construct()
{
session_start();
$this->controlString = superRand(6);
$this->lastControlString = $_SESSION['anti_csrf'];
$_SESSION['anti_csrf'] = $this->controlString;
}
public function validate($methodget=false)
{
$controlString = ($methodget) ? $_GET['anti_csrf'] : $_POST['anti_csrf'];
if ($controlString == $this->lastControlString)
{
return(true);
}
else
{
die("<p>FATAL ERROR</p>");
return(false);
}
}
public function getControlString()
{
return($this->controlString);
}
public function getInput()
{
return("<input type=\"hidden\" name=\"anti_csrf\" value=\"".$this->controlString."\" />");
}
}

Není chyba že bych se snažil zahájit sezení až po odeslání hlavičky, ale problém míří k proměnné $lastControlString. Když do třídy přidám třeba tuto funkci:
public function getLastControlKey()

{
return($this->lastControlString);
}

... Tak mi to napíše:

Catchable fatal error: Object of class csrf_control could not be converted to string in path/to/script.php on line 46

S tímhle si nevím pořádně rady, to samé to samozřejmě dělá i se $_SESSION['anti_csrf'].
Děkuji za případnou pomoc.

Nahlásit jako SPAM
IP: ...–
23. 4. 2007   #2
-
0
-

Ono to je tezky kdyz nenapises, jaky je radek 46. Jestli dobre chapu, tak to ani neni v teto ukazce.

Jenom drobna chybka v pristupu - doporucuji te tride jasne definovat vstupy a nespolehat na to co prijde ze superglobalnich poli. Viz. :

public function validate($methodget=false)

{
$controlString = ($methodget) ? $_GET['anti_csrf'] : $_POST['anti_csrf'];
if ($controlString == $this->lastControlString)

Mel by jsi mit spis
public function validate($controlString)

{
if ($controlString == $this->lastControlString)

Nahlásit jako SPAM
IP: ...–
Prosím, jestli potřebujete s něčím poradit,zeptejte se na fóru. Jakýkoliv bezdůvodný pokus mě kontaktovat skončí okamžitým přidáním do ignore listu![br][br] Současný počet osob, které to nepochopily: 7
neimenuje0
Návštěvník
23. 4. 2007   #3
-
0
-

Řádek 46 je ten druhý kod.

Nahlásit jako SPAM
IP: ...–
neimenuje0
Návštěvník
23. 4. 2007   #4
-
0
-

Zjednodušeně, to co je v $_SESSION['anti_csrf'] se nechová jako String.

Nahlásit jako SPAM
IP: ...–
23. 4. 2007   #5
-
0
-

tak si pomoci print_f vypis co v te promenne je

Nahlásit jako SPAM
IP: ...–
Prosím, jestli potřebujete s něčím poradit,zeptejte se na fóru. Jakýkoliv bezdůvodný pokus mě kontaktovat skončí okamžitým přidáním do ignore listu![br][br] Současný počet osob, které to nepochopily: 7
neimenuje0
Návštěvník
23. 4. 2007   #6
-
0
-

To je divné, je tam tohle:
csrf_control Object ( [controlString:private] => 6BE17A [lastControlString:private] => csrf_control Object ( [controlString:private] => 846693 [lastControlString:private] => 09A345 ) )

Jako kdyby to odkazovalo na ten objekt, nechápu proč ale.

.... jo a jinak ta fce je print_r()

Nahlásit jako SPAM
IP: ...–
23. 4. 2007   #7
-
0
-

Tak tam do toho nekde posilas objekt. Neukladas do te session jeste nekde jinde?

A co je zac ta funkce superRand?

Nahlásit jako SPAM
IP: ...–
Prosím, jestli potřebujete s něčím poradit,zeptejte se na fóru. Jakýkoliv bezdůvodný pokus mě kontaktovat skončí okamžitým přidáním do ignore listu![br][br] Současný počet osob, které to nepochopily: 7
neimenuje0
Návštěvník
24. 4. 2007   #8
-
0
-

fce superRand vypadá takhle:

function superRand($num)

{
if (!is_numeric($num))
{
die("<p>Parametr musí být číslo!</p>");
}
return(strtoupper(substr(md5(rand()), 0, $num)));
}


Se session dále v objektu nepracuju

Nahlásit jako SPAM
IP: ...–
24. 4. 2007   #9
-
0
-

Tak zkus zkrz cely ten objekt prokontrolovat pomoci toho print r a vystopovat, kde se tam ten objekt bere. Se tam prece nemuze jen tak objevit.

A k te print f... sorry, preklep

Nahlásit jako SPAM
IP: ...–
Prosím, jestli potřebujete s něčím poradit,zeptejte se na fóru. Jakýkoliv bezdůvodný pokus mě kontaktovat skončí okamžitým přidáním do ignore listu![br][br] Současný počet osob, které to nepochopily: 7
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 20 hostů

Podobná vlákna

Problém s třídou Object — založil Filip0913

Object Inspector — založil infomf

Třída object v c++ — založil Porcepoque

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý