PHP: Передача экземпляра класса на другую страницу? - PullRequest
2 голосов
/ 09 апреля 2011

Я пытаюсь реализовать систему кодирования, и я нашел хороший и очень простой класс google, который делает то, что я хочу.

это что-то вроде:

$captcha = new Captcha();
$prefix = mt_rand();
$image = $captcha->generate($prefix);

затем добавляю изображение в виде:

<img src="<?php echo $image; ?>" />
<input name="captcha" type="text" value="Type the security code from above" />

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

$correct = $captcha_instance->check($prefix, $_POST['captcha']);

но проблема в том, что после отправки формы $captcha и $prefix исчезли ...

Как передать эти переменные после отправки формы на следующую страницу?

Ответы [ 4 ]

1 голос
/ 26 июля 2011

Какое сопоставление обработчика необходимо в IIS 7.x для создания изображений CAPTCHA? Единственное, что работает, похоже, подстановочный знак, что нелепо с точки зрения безопасности. При повышении безопасности ColdFusion в соответствии с руководством по блокировке в http://www.adobe.com/products/coldfusion/whitepapers/pdf/91025512_cf9_ lockdownguide_wp_ue.pdf они рекомендуют удалить это сопоставление с подстановочными знаками, но, похоже, оно нарушает CAPTCHA .

1 голос
/ 09 апреля 2011

Вы хотите упорядочить этот экземпляр и сохранить его в сеансе, так как HTTP не имеет состояния. Затем вы можете выполнить демаршалл на второй странице.

Однако

Большинству систем PHP, которые я видел, не нужны эти функции, скорее функция проверки должна работать независимо и обычно сравнивает данные из сохраненного сеанса и переменную POST.

1 голос
/ 09 апреля 2011

@ mario: вы были правы: D это всего лишь префикс $, который мне нужно было передать как скрытое поле ввода:)

Это очень плохая идея - в вашем теге формы,если, скажем, у вас есть скрытое поле captcha_answer, и вы передаете значение этого значения $captchaInstance->check(), то вы побеждаете цель капчи.Капчи предназначены для сортировки роботов от людей, но так просто прочитать значение, загрузив исходный код в боте, решающем капчу, и просто вытащив value="{answer}" из источника.

Вместо этого вы должны использовать это:

<?php
session_start();
$_SESSION['answer'] = $prefix;
?>

Затем в своей программе проверки вы делаете это:

<?php
session_start();
$prefix = $_SESSION['answer'];
$passed = $captcha->check($prefix);
?>

На самом деле, я думаю, что этот класс был бы лучше, если бы он имел только статические методы, но это мое мнение.В любом случае, этот способ означает, что все данные хранятся только на стороне сервера, поэтому они не могут просто просмотреть исходный код для ответа с картинки.

1 голос
/ 09 апреля 2011

Возможно, вы захотите установить его в сеансе, а затем, когда он будет опубликован, вам необходимо проверить значение в сеансе

Надеюсь, это поможет

...