CSRF token

teroristd

Registered
Здравейте, опитвам се да направя логин формата да има token.
Ето какво правя.

В някакъв клас имам две функции.
Код:
public function setToken()
    {
        $this->_token = bin2hex(openssl_random_pseudo_bytes(6));

        //Записвам в базата данни при сесийното ид.

        return $this->_token;
    }

public function getToken()
    {
        //Взимам от базата данни

        return $value;
    }

След това в контролера викам setToken() и слагам резултата в hidden поле.
После взимам записа от базата и сравнявам с това от полето.

При всеки рефреш кода се сменя.

Въпроса ми е изобщо правилно ли правя нещата или всъщност нищо не правя :) ? Това ще ме предпази ли от csrf? Също така как мога да тествам?
 
Мисля, че логиката ти е правилна, но защо трябва да го записваш в база данни ? Не може ли в сесия/бисквитка ?
Колкото до тестването - можеш чрез Ctrl+Shift+I ( за chrome ) да промениш hidden полето и да видиш дали работи.
 
Как проверяваш данните ? Би трябвало да бъде нещо подобно:
PHP:
if($_SERVER['REQUEST_METHOD'] == 'POST' && (isset($_POST['token'], $_SESSION['token']) && $_POST['token'] == $_SESSION['token']))
{
	// тук всичко е наред и правиш каквото си искаш
}

За тест - просто пробвай да подадеш невярна информация за hidden полето от controller-а или както казах по-горе - да промениш стойността на hidden полето чрез Инспектора на браузъра.
 
teroristd каза:
Има ли смисъл да слагам токен на регистрационната форма?

Хубаво е на всички, които извършват записване, изтриване, редактиране.

Сърч форм например няма нужда от csrf защита.
 
Добре а има ли нужда стринга да се хешира? Същото и за кукито ме интересува.
 
За регистрационна форма не е ли по-добре да използва captcha вместо csrf token ?
 
flafy каза:
За регистрационна форма не е ли по-добре да използва captcha вместо csrf token ?
Бот може да вземе csrf token.
CSRF не пречи на ботове да събмитват форми.
Catpcha спира ботове да събмитват форми.

Тези две неща решават различни проблеми.
 
Fakeheal каза:
flafy каза:
За регистрационна форма не е ли по-добре да използва captcha вместо csrf token ?
Бот може да вземе csrf token.
CSRF не пречи на ботове да събмитват форми.
Catpcha спира ботове да събмитват форми.

Тези две неща решават различни проблеми.

Значи е хубаво да се използват и двете при регистрационна форма, така ли ?
 
flafy каза:
Fakeheal каза:
flafy каза:
За регистрационна форма не е ли по-добре да използва captcha вместо csrf token ?
Бот може да вземе csrf token.
CSRF не пречи на ботове да събмитват форми.
Catpcha спира ботове да събмитват форми.

Тези две неща решават различни проблеми.

Значи е хубаво да се използват и двете при регистрационна форма, така ли ?

Според мен да.
 

Горе