|
|
|
|
<?php
$_SESSION['Keys[1]'] = rand(1000,9999);
$_SESSION['Keys[2]'] = rand(1000,9999);
$_SESSION['Keys[3]'] = md5(uniqid(rand(10,99),1));
$_SESSION['Keys[4]'] = rand(65,90);
//функция генерации случайного имени поля формы
function Crypt($Source){
$Source = chr($_SESSION['Keys[4]']).md5(crypt($_SESSION['Keys[1]'].$Source.$_SESSION['Keys[2]'],$_SESSION['Keys[3]']));
return $Source;
}
$name_tt = Crypt("adhfgjeuwimvq");
if ($oForm->isSubmittedAndValid ())
print $name_tt;
else{
//вывод формы
echo '<form action="" method="post">
<textarea class="form_input_textarea form_input_html" name="$name_tt"></textarea>
<input type="submit" name="submit" value="Отправить">
</form>';
}
?>
|
Когда форма отправлена, у меня в $name_tt получается совершенно другое значение, чем было до ее отправки. Почему? | |
|
|
|
|
|
|
|
для: Лена
(11.10.2010 в 16:28)
| | а на странице обработчике Вы откуда берете $name_tt?
или опять генерируете?
уже дописали..
| |
|
|
|
|
|
|
|
для: Лена
(11.10.2010 в 16:28)
| | Выходит, что Вы каждый раз генерируете разное
$_SESSION['Keys[1]'] = rand(1000,9999);
$_SESSION['Keys[2]'] = rand(1000,9999);
$_SESSION['Keys[3]'] = md5(uniqid(rand(10,99),1));
$_SESSION['Keys[4]'] = rand(65,90); | |
|
|
|
|
|
|
|
для: Root
(11.10.2010 в 16:37)
| | Нет, но почему когда я после получения данных формы делаю:
if ($oForm->isSubmittedAndValid ())
print_r($_POST);
у меня имя этого единственного поля, которое приходит на сервер, отличается от того, что я прописывала в форме через $name_tt? Как мне сделать, чтобы на сервер приходило то, что я вкладываю в имя поля?
У меня обработчик и форма - в одном файле. | |
|
|
|
|
|
|
|
для: Лена
(11.10.2010 в 16:44)
| | Не генерируйте каждый раз, запишите результат в сессию и сравнивайте.
Вы должны на сервере сохранить значение сгенерированного $name_tt, т.к. после 'поста' Вы сгенерируете совсем другой ключ. | |
|
|
|
|
|
|
|
для: root
(11.10.2010 в 16:48)
| | Сгенерировала имя поля в функции
function EncryptField($Source){
//СЛУЧАЙНЫЕ ИМЕНА ПОЛЕЙ
$key1 = rand(1000,9999);
$key2 = rand(1000,9999);
$key3 = md5(uniqid(rand(10,99),1));
$key4 = rand(65,90);
$Source = chr($key4).md5(crypt($key1.$Source.$key2,$key3));
return $Source;
}
пишу результат действия функции в переменную:
$name_tt = EncryptField("adhfgjeuwimvq");
запоминаю в сессии:
$_SESSION['name'] = $name_tt;
После поста в сессии - другая строка. | |
|
|
|
|
|
|
|
для: Лена
(11.10.2010 в 17:22)
| |
<?php
if( empty( $_POST ) )
{
$_SESSION['Keys[1]'] = rand(1000,9999);
$_SESSION['Keys[2]'] = rand(1000,9999);
$_SESSION['Keys[3]'] = md5(uniqid(rand(10,99),1));
$_SESSION['Keys[4]'] = rand(65,90);
$name_tt = Crypt("adhfgjeuwimvq");
$_SESSION['tt'] = $name_tt;
}
else
$name_tt = $_SESSION['tt'];
//функция генерации случайного имени поля формы
function Crypt($Source){
$Source = chr($_SESSION['Keys[4]']).md5(crypt($_SESSION['Keys[1]'].$Source.$_SESSION['Keys[2]'],$_SESSION['Keys[3]']));
return $Source;
}
if ($oForm->isSubmittedAndValid ())
print $name_tt;
else{
//вывод формы
echo '<form action="" method="post">
<textarea class="form_input_textarea form_input_html" name="$name_tt"></textarea>
<input type="submit" name="submit" value="Отправить">
</form>';
}
?>
|
| |
|
|
|
|
|
|
|
для: Лена
(11.10.2010 в 17:22)
| | А Вы не пробовали сам html посмотреть после вот такого
<?php echo '<form action="" method="post">
<textarea class="form_input_textarea form_input_html" name="$name_tt"></textarea>
<input type="submit" name="submit" value="Отправить">
</form>';
| ? | |
|
|
|
|
|
|
|
для: Лена
(11.10.2010 в 16:28)
| | Имена полей и их соответствия, а не какие-то ключи, должны формироваться и сохраняться в сессию только по требованию - при каждом выводе формы. А у вас "родоночальники" всего гарантированно формируются при каждом запросе скрипта.
А к чему такие сложности при формировании имени? Эта идея жиждется не на том, как бы зашифровать поужаснее, а на том, что имена полей у формы непостоянные, но одного этого мало. | |
|
|
|
|
|
|
|
для: Лена
(11.10.2010 в 16:28)
| | да, sim5 прав, ваша генерация случайных полей доступна ботам. лучше думайте защиту на яваскрипт, яваскрипт выволняется мгновенно, а любой взлом через curl требует времени. Двойная - тройная яваскрипт защита, выполнится до секунды, а бот в течение одной секунды три запроса не сделает.
Вот вам и стопроцентный антибот. Каптча даже не нужна. | |
|
|
|