Недооцененная CSRF уязвимость!

Печать RSS
534


2000 лет д.н.э.
0
давно когда то делал себе.
так вот
<?php

 function token($type=true){
     $arr = array('a','b','c','d','e','f',
                      'g','h','i','j','k','l',
                      'm','n','o','p','r','s',
                      't','u','v','x','y','z',
                      'A','B','C','D','E','F',
                      'G','H','I','J','K','L',
                      'M','N','O','P','R','S',
                      'T','U','V','X','Y','Z',
                      '1','2','3','4','5','6',
                      '7','8','9','0','.',',',
                      '(',')','[',']','!','?',
                      '&','^','%','@','*','$',
                      '<','>','/','|','+','-',
                      '{','}','`','~');

     if($type==true){
         $pass = "";
         for($i = 0; $i < 12; $i++){
           $index = rand(0, count($arr) - 1);
           $pass .= $arr[$index];
         }
         $_SESSION['token'] = $pass;
         return $pass;
     }else{
         if(isset($_SESSION['token'])){
             return $_SESSION['token'];
         }else{
             return false;
         }
     }
 }


function token_input(){
    return '<input type="hidden" name="token" value="'.token(true).'" />';
}

function token_check(){
    if(token(false)!=false AND $_POST['token']==token(false)){
        unset($_SESSION['token']);
        return true;
    }else{
        unset($_SESSION['token']);
        return false;
    }
}
Б
Автор
Оранжевые штаны
0
20. Только писать его еще в сессию надо, что бы проверить при получении запроса. И, если в запросе есть токен - не генерить заново.
В

Пришелец
0
22. G_A_N_J_A_R, да да, не успел дописать - ты уже ответил smile
21. ramzes, маньяк )
Изменил: Влад (03.12.2014 / 14:21)

Господин ПЖ
0
на сайте все нормально, csrf защита давно присутствует в движке, просто была выключена
Стикеры / Теги / Правила / Топ тем / Топ постов / Поиск