Ето ти пример за защитена страница.
Код:
<?php
function security_start_session($ssl, $timeout, $maxtime, $ip){
// ... security checks
session_start();
session_regenerate_id(true);
return 1;
}
if (security_start_session(0, 6*60, 20*60, 1) != 1){
echo "<br>session destroyed!";
return;
}
?>
<html>
<head>
<title>WorldBank.dom XSRF protected page</title>
</head>
<body>
<?php
if( isset($_REQUEST['submit'])){
if ($_SESSION['token']!=$_POST['token'] || !isset($_SESSION['token'] || !isset($_POST['token'])){
session_unset();
session_destroy();
echo "Invalid session</body></html>";
return;
}
else{
echo 'Form is submitted';
}
}
else{
echo '<form action="xsrf.php" method="POST">';
$_SESSION['token'] = uniqid(rand(), true);
echo '<input type="hidden" name="token" value="'.$_SESSION['token'].'">';
echo '<input type="submit" name="submit">';
echo '</form><br><br><br>';
}
?>
</body></html>
Тук се използва потребителска сесия ,което се прави в помечето случай
виж токените,от там сме сигурни ,че формата е изпълнена на нашия съврър.
Иначе
<?php
if( isset($_REQUEST['submit'])){
echo 'Form is submitted';
}
else {
echo '<form action="xsrf.php" method="POST">';
echo '<input type="submit" name="submit">';
echo '</form><br><br><br>';
}
?>
Това е незащитената форма.
Ако напишем
Код:
<form action="saita ti/xsrf.php" method="POST">
<input type="submit" name="submit">
</form>
и го изпълним на друг сървър формата пак ще бъде изпратена.
Другият начин е чрез „$_SERVER['HTTP_REFERER']„.
От там проверяваме от къде е дошла заявката..
Код:
if (isset($_SERVER['HTTP_REFERER'] && $_SERVER['HTTP_REFERER']!="http://worldbank.dom/xsrf.php"){
echo 'You are redirected by third party form - probably you are a XSRF attack victim!';
return;
}