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

Warning: Trying to access array offset on false in /home/u98739/softtime.ru/www/utils/currentforum.php on line 18

Warning: Trying to access array offset on false in /home/u98739/softtime.ru/www/utils/currentforum.php on line 19

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

 

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

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

тема: Ответ 001 на задачу N 15
 
 автор: SoftTime   (03.04.2006 в 22:44)   письмо автору
 
 

Ответ 001 на задачу N 15.
С условиями задачи можно ознакомится по ссылке.
sendpostdata - скрипт отправки POST-данных через Сокеты
<?
  // передаваемые данные
  $name = "Login";
  $pass = "Password";

  $hostname = "chat.my";
  $fp = fsockopen($hostname,80);

  // формируем строку с отправляемымы данными
  $data = "name=".urlencode($name)."&pass=".urlencode($pass)."\r\n\r\n";
  $headers = "POST /w/handler.php HTTP/1.1\r\n"
            ."Host: $hostname\r\n"
            ."Content-type: application/x-www-form-urlencoded\r\n"
            ."Content-Length: ".strlen($data)."\r\n\r\n";
  // отправляем
  fwrite($fp,$headers.$data);

  // на этом впринципе отправка закончена,
  // для уверенности можно прочитать один
  // байт или все содержимое:
  while(!feof($fp))
    echo fread($fp,1024);

  fclose($fp);
?>


Защита от обращения к файлу-приемнику минуя HTML-форму:

index.php - форма отправки
<?
  // набор символов
  $alpha = "abcdefghijklmnopqrstuvwxyzABCDEFGHI JKLMNOPQRSTUVWXYZ1234567890";
  $secret = "";
  // формируем строку из 5 символов, которая будет отображаться на картинке
  for($i=0;$i<5;$i++)
    $secret.= $alpha[rand(0,strlen($alpha)-1)];

  // генерируем новый SESSIONID для того, чтобы при
  // перезагрузке страницы старая сессия затиралась
  session_id(md5(microtime()*rand()));
  session_start();
  // сохраняем сгенерированную строку в переменной сессии
  $_SESSION['secret'] = $secret;
?>
<form action="handler.php" method="post">
  Имя : <input type="text" name="name">
  Пароль : <input type="text" name="pass">
  Число на картинке : <input type="text" name="secret">
  <input type="submit" name="send" value="Отправить">
</form>
<img src="img.php?sid=<?=session_id();?>">


img.php - генератор картинки с "секретной строкой"
<?
  // стартуем сессию с полученным SESSIONID
  session_id($_GET['sid']);
  session_start();

  // создаем каритнку:
  $im = imagecreate(88,31);
  // бледно зеленый фон...
  imageColorAllocate($im,153,204,153);
  // ... с зелеными:
  $green = imageColorAllocate($im,0,128,0);
  // ... текстом
  imagestring($im,3,20,10,$_SESSION['secret'],$green);
  // ... и линиями, которые усложнят задачу "распознавания"
  // картинки в автоматическом режиме
  imageline($im,20,0,80,31,$green);
  imageline($im,0,10,50,0,$green);
  imageline($im,90,5,40,31,$green);
  imageline($im,0,31,70,0,$green);

  imageGif($im);
  header("Content-Type: image/gif");
?>


handler.php - файл-приемник
<?php
  session_start();

  if($_POST['secret'] == $_SESSION['secret'])
  {
    echo "Имя - $_POST[name] ";
    echo "Пароль - $_POST[pass] ";
  }
  else
  {
    echo "Вы неверно ввели число на картинке!";
  }
?>


http://www.softtime.ru/info/task.php?id_article=87

   
 
 автор: cheops   (09.04.2006 в 23:47)   письмо автору
 
   для: SoftTime   (03.04.2006 в 22:44)
 

Безупречное решение, и единственное ;) Отличная работа - правильная, компактная и эффективная. Работа с POST-данными это не простая задача, даже в RFC2616 она упоминается лишь в скользь. На ваш пример будем теперь ссылаться как на эталон решения проблемы :)))

   
 
 автор: FaStY   (10.04.2006 в 02:17)   письмо автору
 
   для: cheops   (09.04.2006 в 23:47)
 

странно, чет у меня не показывает картинку :(
пишет вот что:

Fatal error: Call to undefined function: imagegif() 

   
 
 автор: cheops   (10.04.2006 в 12:26)   письмо автору
 
   для: FaStY   (10.04.2006 в 02:17)
 

Это означает, что у вас не подключено расширение GDLib в конфигурационном файле php.ini.

   
 
 автор: Kapn   (20.04.2006 в 17:44)   письмо автору
 
   для: SoftTime   (03.04.2006 в 22:44)
 

А как реализовать этот метод на одной странице? Предположим если есть гостевая книга сделанная одной страницей. Ведь при отправке данных форме цифры меняются и сравниваются уже с новыми, что можно поделать в данной ситуации, бьюсь над этой проблемой уже не одни сутки. Без этой формы можно зафлудить гостевую книгу простым нажатием "Обновить"

Помогите!

   
 
 автор: cheops   (20.04.2006 в 22:26)   письмо автору
 
   для: Kapn   (20.04.2006 в 17:44)
 

Для этого сразу после добавления данных необходимо осуществлять перезагрузку страницу, например так
<?php
    echo "<HTML><HEAD>
          <META HTTP-EQUIV='Refresh' CONTENT='0; URL=index.php'>
          </HEAD></HTML>";
?>

Это позволит сбросить POST-данные.

PS Лучше под такие вопросы заводить новые темы.

   
 
 автор: mihdan   (16.06.2006 в 16:58)   письмо автору
 
   для: cheops   (20.04.2006 в 22:26)
 

Что вы вцепились в эти сокеты - это же старье с огромным количеством багов, хотя это зависит от того какие руки.
Пользуйте libcURL - намного эффективнее быстрее, экономичнее и меньше кода писать. Кому нужна инфа про cURL мыльте, обязательно откликнусь! Спасибо за понимание.

   
 
 автор: cheops   (17.06.2006 в 00:29)   письмо автору
 
   для: mihdan   (16.06.2006 в 16:58)
 

>Что вы вцепились в эти сокеты - это же старье с огромным
>количеством багов, хотя это зависит от того какие руки.
>Пользуйте libcURL - намного эффективнее быстрее, экономичнее
>и меньше кода писать. Кому нужна инфа про cURL мыльте,
>обязательно откликнусь! Спасибо за понимание.
Это не совсем так, libcURL в принципе не может быть быстрее, эффективнее и экономичнее, так как в основе всех сетевых операций будь то операционная система или PHP лежат сокеты. CURL - это удобная надстройка над сокетами, но не их замена, если в операционной системе не будет поддержки сокетов - CURL тоже работать не будет.

   
 
 автор: СерегаВЕБ   (23.06.2006 в 19:37)   письмо автору
 
   для: cheops   (17.06.2006 в 00:29)
 

А вот чет я не пойму насчет затирки старой сессии.
сессия перетирается на странице index.php, но хакеры то будут handler.php атаковать: один раз код с картинки ввели и пошли постить с этой же сессией.
Мне кажется сессию надо удалить в handler.php.

   
 
 автор: Евгений Петров   (23.06.2006 в 20:47)   письмо автору
 
   для: СерегаВЕБ   (23.06.2006 в 19:37)
 

Это сделано не для хакеров а для юзеров. Чтобы при перезагрузке страницы генерировалась другая картинка.

   
 
 автор: СерегаВЕБ   (23.06.2006 в 23:04)   письмо автору
 
   для: Евгений Петров   (23.06.2006 в 20:47)
 

>Защита от обращения к файлу-приемнику минуя HTML-форму:
Зачем тогда пользователю понадобится обходить форму?

   
 
 автор: Евгений Петров   (30.06.2006 в 23:53)   письмо автору
 
   для: СерегаВЕБ   (23.06.2006 в 23:04)
 

Пользователю незачем а вот хакеру какому нибудь понадобится. Это как правило делают для защиты от автоматических регистраций или от автоматической отправки смс или ещё чего нибудь...

   
 
 автор: Panker   (11.07.2006 в 17:08)   письмо автору
 
   для: Евгений Петров   (30.06.2006 в 23:53)
 

простите, я всё сделал точно так же как тут н оу меян место картинки показывается просто типа рисунок! типа когда картинки выключены! Из за чего это может быть ?
если это из за того что не подключено расширение GDLib в конфигурационном файле php.ini.
то где это подключить :(

   
 
 автор: cheops   (11.07.2006 в 22:14)   письмо автору
 
   для: Panker   (11.07.2006 в 17:08)
 

Адрес скрипта с картинками загуружайте прямо - никаких ошибок не выводится?

PS Ещё одни генератор кодов можно посмотреть в разделе downloads по ссылке http://www.softtime.ru/info/randomimage.php.

   
 
 автор: sirop   (16.07.2006 в 02:33)   письмо автору
 
   для: cheops   (11.07.2006 в 22:14)
 

>PS Ещё одни генератор кодов можно посмотреть в разделе
>downloads по ссылке
>http://www.softtime.ru/info/randomimage.php.

Я посмотрел этот скрипт, но не смог разобраться, какое значение должно принимать $_SESSION['securityCode'] ?

И ещё вопрос: в приведённом решении в самом верху можно увеличить размер буковок?

   
 
 автор: valenok   (11.07.2006 в 19:38)   письмо автору
 
   для: cheops   (20.04.2006 в 22:26)
 

Чтобы сбросить пост запросы лучше так:
$_POST=Array();