Loading...
FSeven (11.08.2021 в 20:56)

Не всегда будет проходить защита от CSRF =D.
Сейчас начал набирать смс, через 5 минут закончил, но оператор дал мне иной ip)
Я не смогу отправить своё смс =D и его потеряю

Дык можно туда id пользователя пихнуть если была пройдена авторизация до этого
Ну вобще логика в этом есть по поводу набора наверно даже у себя сменю . Как то не думал в этом направлении
Mr.Max (11.08.2021 в 21:00)

Дык можно туда id пользователя пихнуть если была пройдена авторизация до этого

Если не менять id и ТОКЕН, тогда CSRF не будет меняться, а это не есть хорошо.
FSeven (11.08.2021 в 21:06)

Если не менять id и ТОКЕН, тогда CSRF не будет меняться, а это не есть хорошо.

Почему ? time().time() , ключ и id добавить
________
посл. ред. 11.08.2021 в 21:08; всего 1 раз(а); by Mr.Max
Mr.Max (11.08.2021 в 16:37)
По поводу CSRF этим болеет как правило POST запрос.
Я себя защищаю так может кому пригодится :
ТОКЕН генерирую :
php
   $CSRF = md5('ТУТ ВАШ КЛЮЧ'.time().preg_replace('/[^0-9.]/', '', $_SERVER['REMOTE_ADDR']).time());   


можно использовать конечно встроенные функции генератора вместо md5 но я этим не болею суть не меняется ....

Проверять можно по куках или сессиях токен.

Дабы не захаращивать лишний раз сервер сессиями я это делаю по куках
.

Форма отправки :
php
   <form action="" method="post"> 
<input type="text" name="login" required="" value="">
<input name="CSRF" type="hidden" value="<?=$CSRF?>">
<input class="button" type="submit" name="submit" value="Отправить">
</form>

Перед отправкой забиваем в куку токен :

php
   if(!isset($_POST['submit']) ? setcookie('token', $CSRF, time() + 300) : null);   


Время жизни куки 5 минут после токен мертвый!

Ну и проверка формы что то типа;

php
   <? 
if(isset($_COOKIE['token']) != ОБРАБОТЧИК($_POST['CSRF'])):
echo 'Токен проверки неверный или его срок истек!';
endif;
?>

А не проще генерировать случайный набор символов без всяких велосипедов через
php
   random_bytes()   


И обновлять токен после перезагрузки страницы
Mr.Max , будет надежней привязат ь текущий токен к текущей сессии пользователя.

Для начала сформировать случайное имя пост запроса из 9 случайных символов: $token_name = substr(md5(rand(111111,999999)),0,9);

Далее сформировать данные запроса из 16 случайных символов $token_data = substr(md5(rand(111111,999999)),0,12);

И записать всё это в сессии. В итоге получится что-то вроде <input type="hidden" name="d26ys17bn" value="yqw123besc45hscp">

А при обработке отправляемого пост запроса уже проверять подпись на подлинность.

Если не хочешь дожидаться завершения текущей сессии у пользователя для генерации нового токена, ты можешь отловить успешно прошедший валидацию пост запрос и генерировать новый токен. А не менять каждый раз при обновлении страницы - это уже лишнее.
________
посл. ред. 11.08.2021 в 22:21; всего 1 раз(а); by 668582623
PAIN , да изобретать можно как угодно но суть то от этого не смениться .
________
посл. ред. 11.08.2021 в 23:07; всего 1 раз(а); by Mr.Max
668582623 , вариантов можно придумать уйму но ведь каждый пишет под себя как ему удобно :)
Mr.Max , то что я предложил довольно таки оптимальный вариант. Так-то в браузерах можно блокировать запись в куки - в таком случае твоя csrf защита тут же сломается.
________
посл. ред. 11.08.2021 в 23:15; всего 1 раз(а); by 668582623
Mr.Max (11.08.2021 в 23:06)
PAIN , да изобретать можно как угодно но суть то от этого не смениться .

Ну так разработчики php стараются для вас, делают функции удобнее и безопаснее, а вы в 2021:
php
   <?php 
md5(time());
?>
Онлайн: 4
Время:
Gen. 0.089
(c) Bym.Guru 2010-2026