The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

как запpетить скрипту пpинимать данные из "чyжих" фоpм (web html cgi example)


<< Предыдущая ИНДЕКС Поиск в статьях src Установить закладку Перейти на закладку Следующая >>
Ключевые слова: web, html, cgi, example,  (найти похожие документы)
Date: Wed, 18 Apr 2001 00:28:31 +0400 From: "Pavel V. Ammosov" <Pavel.V.Ammosov@f52.n5020.z2.fidonet.org> Newsgroups: fido7.ru.cgi.perl Subject: как запpетить скрипту пpинимать данные из "чyжих" фоpм >y меня тогда вопpос с дpyгой стоpоны >как все-таки запpетить сеpвеpy пpинимать данные из "чyжих" фоpм?? >вопpос очень актyальный. При генерации добавляй в код формы некоторую переменную forum_id, в которою запихивай случайную строку и сохраняй эту строку у себя в БД где-нибудь. При получении данных из формы проверяй, есть ли у тебя в БД такой forum_id. Hапример: файл icbm_coord.tt2 <html><head><title>Координаты цели</title></head> <body><h1>Координаты цели</h1> <form action="process.pl" method="post"> <!-- Коодинаты цели для МБР - ширина, долгота, высота над уровнем моря ;-) --> Долгота: <input type="text" name="longitude"><br> Широта: <input type="text" name="latitude"><br> Высота над уровнем моря: <input type="text" name="altitude"><br> <input type="hidden" name="form_id" value="[% form_id %]"> <!-- form_id потом при помощи TT2 установим --> <input type="submit" value="Задать цель"> </form></body></html> файл icbm_coord.pl #!/usr/bin/perl -w use strict; use Template; # Template Toolkit с CPAN use Digest::MD5 qw(md5_hex); use DBI; my $dbh = DBI->connect('dbi:Informix:apavel', '', '', {AutoCommit=>0, RaiseError=>1}); my $template = new Template(); my $form_id = random_string(); $dbh->do('insert into forms(form_id, issue_date) values (?, CURRENT)', {}, $form_id); print "Content-Type: text/html; charset=koi8-r\n\n"; $template->process("icbm_coord.tt2", {form_id=>$form_id}) or die $template->error(); $dbh->commit(); $dbh->disconnect(); sub random_string() { use Symbol; my $f = gensym(); my $amount = 1024; open $f, "</dev/urandom" or die "/dev/urandom: $!"; my $data; read($f, $data, $amount); close $f; return md5_hex($data); } файл process.pl #!/usr/bin/perl -w use strict; use DBI; use CGI qw(param); my $dbh = DBI->connect('dbi:Informix:apavel', '', '', {AutoCommit=>0, RaiseError=>1}); # получить координаты, отфильтровать все кроме цифр. my ($latitude, $longitude, $altitude) = map {my $p = param($_) || ""; $p=~ s/[^\d]//gs; $p} qw(latitude longitude altitude); # Результат md5_hex может содержать еще и буквы a-f, поэтому надо другой # фильтр my ($form_id) = map {my $p = param($_) || ""; $p =~ s/[^0-9a-f]//gs; $p} qw(form_id); print "Content-Type: text/plain; charset=koi8-r\n\n"; if ($dbh->selectrow_array('select form_id from forms where form_id=?', {}, $form_id)) { # Hаша форма, занесем цель в таблицу координат $dbh->do('insert into coords(longitude, latitude, altitude) values (?, ?, ?)', {}, $longitude, $latitude, $altitude); # И удалим form_id из таблицы с формами $dbh->do('delete from forms where form_id=?', {}, $form_id); $dbh->commit(); print "Ok, цель занесена в список"; } else { print "NAK, не наша форма или тайм-аут закончился"; } $dbh->disconnect(); sql к ним (Я использую informix, у других СУБД синтаксис скорее всего будет иным): CREATE TABLE forms ( form_id CHAR(32) primary key, issue_date DATETIME YEAR TO SECOND NOT NULL ); CREATE TABLE coords ( target_id SERIAL(4) primary key, longitude FLOAT NOT NULL, latitude FLOAT NOT NULL, altitude FLOAT NOT NULL ); -- Pavel Ammosov O \ apavel@aha.ru __ ) http://isabase.philol.msu.ru/~apavel/ ) wget -O - isabase.philol.msu.ru/~apavel/key.asc|pgp -fka O /

<< Предыдущая ИНДЕКС Поиск в статьях src Установить закладку Перейти на закладку Следующая >>

Обсуждение [ RSS ]
  • 1, vasmir (?), 05:54, 15/02/2004 [ответить]  
  • +/
    ИМХО Этот способ может быть не вполне надежным (хотя приемлемым для многих сайтов). Например, можно настроить "вражеский" скрипт так, чтобы он сначала вытягивал form_id через обычное подключение по http, а затем отправлял данные формы вместе с этим form_id, который будет обработан как правильный. Вот по этой причине, многие мэил серверы (hotmail i dr.) сейчас вместо обычного text-only id генерируют id в виде "смазанной" графической информации и просят пользователя ввести в поле тот текст, что он видит на картинке. Этот способ мне кажется куда более надежным.
     
  • 2, Ден (?), 12:18, 14/04/2004 [ответить]  
  • +/
    У меня такая проблема написал на Java script форму
    которая отсылает данные мне на сервак использовал метод пост, а на Perl написал скрипт который принимает. На севаке Perl не оказалось. Теперь необходим скрипт на Java.
    Заранее благодарен.
     

     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:




    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру