[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Передача переменной при PHP_SELF
Страницы: 1, 2
arbuzmaster
Цитата (killer8080 @ 20.10.2015 - 10:40)

где именно уточни пожалуйста, в коде отдающем страницу, или в коде генерирующем капчу?

В коде отдающем страницу, что бы не было возможности проводить подбор пароля без кода капчи.

session_start();
if($_POST['capthca'] == $_SESSION['code'])
{
// код авторизации
}
else
{

echo "<H3>Введен неверный код с картинки!</H3>";


}
$_SESSION['code']=rand(100,999);


_____________
Мой первый сайтик

Посмотри на свой XBMC под другим углом
killer8080
Цитата (arbuzmaster @ 20.10.2015 - 11:01)
В коде отдающем страницу, что бы не было возможности проводить подбор пароля без кода капчи.


Всё еще хуже чем я думал, твоя защита обходится отключением кук в браузере, а для ботов так вообще просто находка wink.gif
arbuzmaster
А как же тогда быть? Как правильно?

_____________
Мой первый сайтик

Посмотри на свой XBMC под другим углом
killer8080
Правильно код генерить в коде самой капчи, хотя бы потому что нужно иметь возможность её обновлять, если пользователь не может разобрать надпись например. Проверка так

if (!empty($_POST['capthca']) && !empty($_SESSION['code']) && $_POST['capthca'] == $_SESSION['code']) {
// valid code
} else {
// invalid code
}

unset($_SESSION['code']); // исключаем повторное использование
arbuzmaster
Я просто не могу понять логику, где генерируется $_SESSION['code'] (то есть код капчи) если до проверки, то получается, что коды не сойдутся если картинка уже показана пользователю.
if($_POST['capthca'] == $_SESSION['code'])

если отключить куки, как мне кажется условие не сработает, так как $_SESSION['code'] не существует, просто выдаст ошибку в логах?

_____________
Мой первый сайтик

Посмотри на свой XBMC под другим углом
killer8080
Цитата (arbuzmaster @ 20.10.2015 - 11:43)
Я просто не могу понять логику, где генерируется $_SESSION['code'] (то есть код капчи)

там же где и сама капча, браузер запрашивает картинку, в этот момент код и генерируется, и хранится в сессии.
Цитата (arbuzmaster @ 20.10.2015 - 11:43)
если отключить куки, как мне кажется условие не сработает, так как $_SESSION['code'] не существует, просто выдаст ошибку в логах?

нет, $_SESSION['code'] === null, если не передавать в пост поле капчи, то $_POST['capthca'] === null, если передать пустое значение, то $_POST['capthca'] === '', в любом случае условие сработает.
var_dump(''==null); // true
arbuzmaster
Цитата (killer8080 @ 20.10.2015 - 12:24)
Правильно код генерить в коде самой капчи, хотя бы потому что нужно иметь возможность её обновлять, если пользователь не может разобрать надпись например. Проверка так



//Если генерировать код капчи здесь, то $_POST['capthca'] и $_SESSION['code'] не сойдутся

if (!empty($_POST['capthca']) && !empty($_SESSION['code']) && $_POST['capthca'] == $_SESSION['code']) {
// valid code Если здесь, то они тоже не сойдутся
} else {
// invalid code Если здесь, то они тоже не сойдутся
}

unset($_SESSION['code']); // исключаем повторное использование

так где же его генерировать?
Если Вы про $_SESSION['code']=rand(100,999); - не код капчи(просто перезапись $_SESSION['code'] ) - примерно тоже самое что и unset($_SESSION['code']); Может мы просто не поняли друг друга? Просто я практически не вижу отличий между моим и Вашим кодом кроме 2-х
if (!empty($_POST['capthca']) && !empty($_SESSION['code']) && $_POST['capthca'] == $_SESSION['code']) 

if($_POST['capthca'] == $_SESSION['code']) // 2 отличия


unset($_SESSION['code']); // удаление

$_SESSION['code']=rand(100,999); // перезапись 


_____________
Мой первый сайтик

Посмотри на свой XBMC под другим углом
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.