Cross-site фалшефикати на заявки-Помощ?

reletobg

Registered
Здравейте!
Купих си книгата "Основи на php сигурността" и си раглеждам примерчетата.
Има един пример против Cross-site фалшефикати на заявки който е следният:
Код:
<?php
session_start();
$token=md5(uniqid(rand(), TRUE));
$_SESSION['token']=$token;
$_SESSION['token_time']=time();
?>
Код:
<?php
if(isset($_SESSION['token']) && $_POST['token'] ==$$_SESSION['token'])
{
      /*Валиден отличителен знак*/
}
?>
Код:
<?php
$token_age =time() - $_SESSION['token_name'];
if($token_age <=300)
{
echo 'Изминали са по-малко от 5м.';
}
?>
Та това пиши в книгата!
Аз използвам форма с скрито поле на което ми задавам стойноста на $token.
Код:
<form action="" method="post">
        <input type="passwоrd" name="pass"/>
        <input type="hidden" name="token" value="'.$token.'"/>
        <input type="submit" name="submit" value="Изтрий">
        </form>
Всичко би трябвало са си работи,но когато проверява дали $_POST['token] ==$_SESSION['token'] те не съвпадат.Изкарах резултата от $_POST и той винаги беше с една стойност на заде.Как да го оправя да е синхронизиран с $token?[/code]
 
Код:
<?php
session_start();
$token=md5(uniqid(rand(), TRUE));
$_SESSION['token']=$token;
$_SESSION['token_time']=time();
?>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<?php
if($_SESSION['username'])
{
    
    include '../config.php';
    echo'<form action="" method="post">
        <input type="passwоrd" name="pass"/>
        <input type="hidden" name="token" value="'.$token.'"/>
        <input type="submit" name="submit" value="Изтрий">
        </form>';
    if(isset($_POST['submit']))
    {
       //echo 'token'.$token.'<br/>';
        //echo 'sesion'.$_SESSION['token'].'<br/>';
        //echo 'post'.$_POST['token'].'<br/>';
        if(isset($_SESSION['token']))
        {
            if($_POST['token'] == $_SESSION['token'])
            {
                $token_age=time() - $_SESSION['token_time'];
                if($token_age <= 180)
                {
                    $username=htmlentities(addslashes($_SESSION['username']));
                    $pass=md5(addslashes($_POST['pass']));
                    $id=addslashes($_GET['delete']);
                    $sql_n="SELECT * FROM users WHERE username='$username'";
                    $result_n=mysql_query($sql_n);
                    $row_n=mysql_fetch_array($result_n);
                    $pass_p=$row_n['password'];
                    $user_n=$row_n['username'];
                    if($pass==$pass_p && $user_n==$username)
                    {

                        //$sql_d=mysql_query("DELETE FROM files WHERE id='$id'");
                        $sql="SELECT * FROM files WHERE id='$id'";
                        $result=mysql_query($sql);
                        $row=mysql_fetch_array($result);
                        $delete=unlink($row['url']);
                        if($delete)
                        {

                            echo'Файлат '.$row['file'].' е изтрит!<a href="add.php?page=upload_edit">Върни се!</a>';
                        }
                        else
                        {
                            echo 'Грешка';
                            exit;
                        }


                    }
                    else
                    {
                        echo 'Невалидна парола или потребителко име!';
                        exit;
                    }
                }
                else
                {
                    echo 'Изминали са 3м. от последната заявка.Моля върнете се обратно.';
                    exit;
                }
            }
            else
            {
                echo 'asdasd';
            }
        }
        else
        {
            echo 'Май няма да можeш да влезниш от тук! :P';
            exit;
        }
    }
}
else
{
    echo 'Нямате достъп вмомента до тази страница.Може да влезнита от тук ако имате регистрация.<a href="loin.php">Вход!</a>';
}
?>
 

Back
Горе