Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: защита от автоматического заполнения полей формы
 
 автор: relikt   (18.04.2007 в 21:36)   письмо автору
 
 

Помогите с проблемой. Хочу реализовать защиту от автоматического заполнения полей формы. Скрипт следующий:
<?
# Модуль добавления записи
#Error_Reporting(0);
$name = $_SERVER["SCRIPT_FILENAME"];
$namew = basename($_SERVER["SCRIPT_FILENAME"]);

$error = "";
$action = $_POST["action"];
if (!empty($action))
{
$lenmsg = strlen($_POST["idea"]);
$templen = 0;
$temp = strtok($_POST["idea"], " ");
if (strlen($_POST["idea"])>60) {
while ($templen < $lenmsg) {
if (strlen($temp)>60) {
$action = "";
$error = $error."<LI>Текст сообщения содержит слишком много символов без пробелов\n";
break;
} else {
$templen = $templen + strlen($temp) + 1;
}
$temp = strtok(" ");
}
}

$idea = trim($_POST["idea"]);
$pasv = $_POST["pasv"];

if (empty($idea)||$idea == "сообщение")
{
$action = "";
$error = $error."<LI>Вы не ввели сообщение.\n";
}


if (empty($pasv)||$pasv !== $zero)
{
$action = "";
$error = $error."<LI>Вы ввели неверный код.\n";
}

$idea = substr($_POST["idea"],0,100);
$idea = htmlspecialchars(stripslashes($idea));

if (empty($error))
{
$valmail = "m@m.ru";
$all = "Адрес $name. Сказано следующее: $idea";
$thm = "Добавление записи.";
mail($valmail, $thm, $all);

echo "<div align=center class=spa>Спасибо</div>";
sleep (0);
print "<HTML><HEAD>\n";
print "<META HTTP-EQUIV='Refresh' CONTENT='99; URL=$namew'>\n";
print "</HEAD></HTML>\n";
}
}


if (empty($action))
{
#числа от авто генерации
$number = "4";
// Параметр $number - сообщает число
// символов в пароле

function generate_password($number)
{
$arr = array('A','B','C','D','E','F',
'G','H','I','J','K','L',
'M','N','O','P','R','S',
'T','U','V','X','Y','Z',
'1','2','3','4','5','6',
'7','8','9','0');
// Генерируем пароль
$pass = "";
for($i = 0; $i < $number; $i++)
{
// Вычисляем случайный индекс массива
$index = rand(0, count($arr) - 1);
$pass .= $arr[$index];
}
return $pass;
}
$zero = htmlspecialchars(generate_password($number));

?>
<br>
Связаться c нами проще простого. Обращайтесь к нам. Мы всегда готовы помочь.
<form action="<?=$_SERVER['SCRIPT_NAME']?>" method=post name=action>
<input type=hidden name=action value=post>
<div style="margin-bottom:10px; margin-top:10px">
<textarea style="width:240px;height:80px" name="idea" onClick="this.value=''">сообщение</textarea>
</div>

<div style="margin-bottom:10px; margin-top:10px">
<? echo "$zero"; ?> <input value="" type="text" style="width: 80px" name="pasv" />
</div>

<input type="submit" class="mnenie" value="Поделиться мнением" name="go">
</FORM>

<?
if (!empty($error))
{
print "<P><font color=green>Во время добавления записи произошли следующие ошибки: </font></P>\n";
print "<UL>\n";
print $error;
print "</UL>\n";
}
?>
<?
}
?>
Что бы я не набирал в поле pasv выдаёт только одно: Вы ввели неверный код. И как сделать, чтоб скрипт был чувствителен к регистру?

   
 
 автор: Ziq   (18.04.2007 в 21:48)   письмо автору
 
   для: relikt   (18.04.2007 в 21:36)
 

Таким образом защититься не получиться... Возможно это немного усложнит задачу, но обойти такую защиту можно достаточно просто. Для эффективной защиты необходимо использовать например картинку с защитным кодом. Поищите на форуме, таких тем было очень много.

В вашем случае проблема заключается в том, что вы каждый раз заново генерируете код $zero. Его необходимо передавать скрипту с помощью сессий или скрытым полем через POST.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования