Модераторы: korob2001, ginnie

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> напечатать картинку 
V
    Опции темы
GoDleSS
Дата 16.6.2008, 14:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 105
Регистрация: 11.2.2007
Где: Пироговский

Репутация: нет
Всего: 2



Цитата

где-нибудь вообще встречал html документ с внедренными бинарными данными?

Кстати допускаю такой вариант, только не в ХТМЛ напрямую, а попробовать генерить с яваскриптом, в переменную типа Image скармливать бинарные данные.
Не пробовал, но покопать в этом направлении можно.

--------------------
It's a nice day to die my friend!
PM MAIL WWW ICQ   Вверх
tolkien
Дата 16.6.2008, 15:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 277
Регистрация: 5.4.2008

Репутация: нет
Всего: 4



Плохое направление для раскопок. Javascript просто может быть отключен. Это раз. А во вторых. Данные отправятся не как бинарные, а как текстовые. Знаешь в чем разница? В том что в таком виде картинка будет битой.
PM MAIL   Вверх
GoDleSS
Дата 16.6.2008, 15:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 105
Регистрация: 11.2.2007
Где: Пироговский

Репутация: нет
Всего: 2



Цитата

Плохое направление для раскопок. Javascript просто может быть отключен. Это раз. А во вторых. Данные отправятся не как бинарные, а как текстовые. Знаешь в чем разница? В том что в таком виде картинка будет битой.

1. Раскопки можно вести и в тупиковом направлении, для интереса smile
2. А вот с этим моментом вынужден согласиться, либо сильно изголяться, либо будет нарушение изображения.
--------------------
It's a nice day to die my friend!
PM MAIL WWW ICQ   Вверх
yurik_l
Дата 16.6.2008, 16:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


тарантиноман



Профиль
Группа: Участник
Сообщений: 49
Регистрация: 17.9.2006

Репутация: нет
Всего: 3



Цитата

в переменную типа Image скармливать бинарные данные


А что у Image есть такие свойства или методы?
PM MAIL   Вверх
gcc
Дата 16.6.2008, 16:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: 2
Всего: 17



подсказали так:

Цитата

Вестимо, сохранить его надо. В файле. 
При первом запросе:
1) Генерите случайное число. СЧ.
2) Генерите картинку со СЧ, пишете в файл с рандомным именем во временной директории.
3) Генерите случайное уникальное значение СУЗ.
4) Открываете файл/БД, пишете: СУЗ, СЧ.
5) Отдаете хтмлину со вставленной картинкой-ссылкой в ту директорию, за тем файлом.
6) В ту же хтмлину пишете форму со скрытым полем, со значением СУЗ.

Юзер скачивает страницу, браузер стягивает по указанной сслыке картинку, юзер вводит в форму число которое видит, жмет кнопку, уходит форма с введенным числом и ид=СУЗ.

- вынимаете из формы СУЗ, открываете БД/файл, ищете СУЗ. если находите - извлекаете СЧ, сравниваете с присланным юзером, картинку удаляете. Если не совпадает, значит лажа или ошибка юзера, все с начала. Если не находите СУЗ, значит просто лажа. Все с начала.
Всё.

При каждом запросе, или как-то еще, хоть через крон, запускаем скрипт, который чистит дир от старых файлов картинок и таблицу БД/файл от старых пар СУЗ-СЧ. Отсюда проистекает, что файлы мы можем удалять старые по аттрибутам, а вот в записи в файле-таблице надо добавить таймстэмп, чтобы старые отличать от новых...


ЗЫ, есть проще вариант, по идее. Сгенерить число, сложить с неким значением, посчитать с результата хэш, и записать в скрытое поле прямо его. С полученным ответным числом сложить то же некое значение, посчитать хэш и сравнить с полученным из скрытого поля хэшем. Думаю, понятно, что самые очевидные "некие значения" и функции для расчета хэша брать не следует. smile Для защиты от спамеров вполне метод, если я чего-нибудь не упустил из виду. ;)



Это сообщение отредактировал(а) gcc - 16.6.2008, 16:50
PM WWW ICQ Skype GTalk Jabber   Вверх
ginnie
Дата 16.6.2008, 17:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

Репутация: 4
Всего: 49



Уважаемый gcc, последний способ наиболее эффективен и хорошо масштабируется на архитектуре с несколькими серверами. Надо в форму передавать зашифрованный параметр, содержащий хэш и дату устаревания картинки. Для повышения стойкости можно ключ шифрования выбирать случайно из набора.


--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
gcc
Дата 16.6.2008, 17:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: 2
Всего: 17



Уважаемый ginnie, что такое "устаревания картинки"? я найти не могу


Это сообщение отредактировал(а) gcc - 16.6.2008, 17:08
PM WWW ICQ Skype GTalk Jabber   Вверх
ginnie
Дата 16.6.2008, 18:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

Репутация: 4
Всего: 49



gcc, обычно для капчи ограничивают время, в течении которого она принимается сервером, чтобы усложнить вариант использования системы распознавания изображений.
Т.е. схема такая:
  •  генерируем картинку с символами (лучше это делать заранее, т.к. это довольно ресурсоемкая задача)
  •  формируем хэш на основе символов картинки (это дополнительный шаг, для увеличения стойкости к взлому)
  •  формируем дату устаревания картинки (текущая дата + интервал времени, например 3 минуты), удобно использовать результат функции time(), при условии, что на всех серверах время синхронизировано и используется единое начало отсчета (epoch)
  •  формируем строку, состоящую из хэша и даты устаревания
  •  выбираем случайный ключ шифрования из набора ключей
  •  шифруем строку удобным симметричным криптоалгоритмом с выбранным ключом
  •  добавляем к зашифрованной строке идентификатор использованного ключа


Это сообщение отредактировал(а) ginnie - 16.6.2008, 18:16


--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
nitr
Дата 16.6.2008, 20:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2543
Регистрация: 10.2.2006
Где: Россия :)

Репутация: 12
Всего: 84



Цитата(ginnie @  16.6.2008,  18:15 Найти цитируемый пост)
генерируем картинку с символами (лучше это делать заранее, т.к. это довольно ресурсоемкая задача)

т.е. предлагается заранее хранить это всё на сервере? Мне интересно, как это "заранее". Просто в своем опыте такое не встречал smile .


--------------------
PM   Вверх
ginnie
Дата 16.6.2008, 23:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

Репутация: 4
Всего: 49



Уважаемый nitr, представьте, что у Вас сервер должен показывать 100 капчей в секунду. Одна картинка генерируется 0.4 сек (для примера). Как это сделать?
Генерируем 10000 картинок (за 1 час) и показываем их пользователям случайным образом. Картинки не удаляем, а дополняем новыми (для получения необходимого объема) и заменяем через некоторое время. Код, изображенный на картинке включен в имя файла.

Это сообщение отредактировал(а) ginnie - 16.6.2008, 23:36


--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
nitr
Дата 16.6.2008, 23:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2543
Регистрация: 10.2.2006
Где: Россия :)

Репутация: 12
Всего: 84



Цитата(ginnie @  16.6.2008,  23:34 Найти цитируемый пост)
или заменяем через некоторое время

ваш подход мне ясен. Спасибо. Имхо, со временем заменить стоит ;)


--------------------
PM   Вверх
tolkien
Дата 18.6.2008, 16:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 277
Регистрация: 5.4.2008

Репутация: нет
Всего: 4



Я бы не использовал БД. Зачем она нужна там где без нее легко обойтись? 
Можно поступить так
1.генерим случайную послед букв и цифр для картинки $captch_str
2.генерим саму картинку $captch_image содержащее $captch_str
3. генерим случайное имя файла для капчи $name_captch фиксированной длины.
4. создаем 2 файла 
   1й файл. картинка $captch_image с именем $name_capth.jpg
   2ой файл с $captch_str c именем $name_captch.txt
5. добавляем  $name_captch в файл $captch.txt

В процессе работы случайным образом выбираем $namt_captch из файла $captch.txt. Кол.во записей опред. размер файла и делится на длину записи $name_captch. И дальше остается только случайным образом сгенерить число. 

Помоему это будет работать гораздо быстрее чем варианты с БД.
PM MAIL   Вверх
dmitryk1
Дата 20.6.2008, 06:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 118
Регистрация: 10.6.2008
Где: Новосибирск

Репутация: нет
Всего: 2



Цитата(tolkien @  16.6.2008,  13:07 Найти цитируемый пост)
Ты где нибудь вобще встречал html документ с внедренными бинарными данными? Если да. То дай ссылку на такой экземпляр. Я тоже на него посмотрю. 


поищи tiddleWiki.
В браузерах типа файерфокса он позволяет сохранять в себя бинарные файлы. А поскольку он сам страничка, получается что это именно то, что надо. Кстати, ещё пример - электронное письмо с вложением. 

Только они не бинарными вставляются, а перекодируются во что-то.
PM MAIL GTalk Jabber   Вверх
Ramirez
Дата 13.8.2008, 20:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 305
Регистрация: 18.1.2005
Где: Moscow, ExUSSR

Репутация: 1
Всего: 5



Иногда очень хочется отдать данные вместе со страницей. Картинки например. Чтобы не генерить доп. обращений к серверу...

а ведь давноесть способ (и не только с картинками):
<IMG SRC="data:image/gif;base64,[...]">

[...] - вместо этого идет картинка закодированная в base64. Но как всегда в IE это не работает (незнаю как в 7 версии) =\

вот пример как это работает:
http://www.greywyvern.com/code/php/binary2base64

кстати, про IE7:
http://dean.edwards.name/weblog/2005/06/base64-ie/

Вауу, это даже в IE6 (6.0.2900) работает!
http://dean.edwards.name/my/base64-ie.html



Это сообщение отредактировал(а) Ramirez - 13.8.2008, 20:19
PM ICQ   Вверх
gcc
Дата 30.1.2009, 11:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: 2
Всего: 17



попросили сделать эту эрунду

сейчас хоть убей, но картинка просто пустая smile

может кто-то показать рабочую, или в чем проблема?
Код


#!/usr/bin/perl

use CGI::Carp qw(fatalsToBrowser);    # used only for tests
use CGI;


use FindBin qw/$Bin/;
use lib "$Bin/lib";

my $q = new CGI;

   use GD::SecurityImage 1.64; # we need the "blank" style
   
   my $font  = "StayPuft.ttf";
   my $rnd   = "10.257"; # counter data
   
   my $image = GD::SecurityImage->new(
      width  =>   140,
      height =>    75,
      ptsize =>    30,
      rndmax =>     1, # keeping this low helps to display short strings
      frame  =>     0, # disable borders
      font   => $font,
   );
   
   $image->random( $rnd );
   # use the blank style, so that nothing will be drawn
   # to distort the image.
   $image->create( ttf => 'blank', '#CC8A00' );
   $image->info_text(
      text   => 'You are visitor number',
      ptsize => 10,
      strip  =>  1,
      color  => '#0094CC',
   );
   $image->info_text(
      text   => '( c ) 2 0 0 7   m y s i t e',
      ptsize => 10,
      strip  =>  0,
      color  => '#d7d7d7',
      y      => 'down',
   );
   my($data, $mime, $random) = $image->out;
   binmode STDOUT;
print $q->header(-type => $mime);
   print $data; 

PM WWW ICQ Skype GTalk Jabber   Вверх
Страницы: (3) Все 1 [2] 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl: CGI программирование"
korob2001
sharq
  • В этом разделе обсуждаются вопросы относящиеся только к CGI программированию
  • Если ваш вопрос не относится к системному или CGI программированию, задавайте его в общем разделе
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", качать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: разработка для Web | Следующая тема »


 




[ Время генерации скрипта: 0.0576 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.