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.