Автор Тема: Немного вопросов и отладка..:)  (Прочитано 6496 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Frodo

  • Гость
Немного вопросов и отладка..:)
« : 01 Августа 2002, 02:02:22 »
Надеюсь сильно пинать не будете? :) Вот написал скриптик маленький, хочется исправить пару недочетов, ну и сами посмотрите может чего добавить? :) Это пока токо администрирование, сам скрипт приема голосов выложу чуть позже...:)
Для его успешной работы хватит лишь положить в папку cgi-bin, и добавить папку data. Ну и ессесно прописать ХТМЛ адресс.

1.При авторизации, если оставить поле "пароль" пустым, и отправить запрос, выдает ошибку. В чем дело?
2.Проблема с куками, в начале каждой функции приходится вставлять "print header(-charset=>\'windows-1251\')". Можно ли как-нибудь это дело исправить?
3.Можно даже ко 2-му отнести, опять куки и хидер, если куки уже установлены, и заходить с начала скрипта(авторизация). Происходит редирект на главный раздел, но там уже стоит хидер, и перед самой таблицей выходит надпись print header(-charset=>\'windows-1251\')...
4.Может у кого-нибудь есть какие-нибудь предложения о безопасности скрипта, а то вставлять проверку на куки в каждой функции - изврат :)
----
#!/usr/bin/perl -w
####################################
#by Frodo[mW] | frodo@hotbox.ru    #
####################################
use strict;
use CGI::Carp qw(fatalsToBrowser);
use CGI qw(:all);

my $pass="68qsa";                            # Пароль для доступа к Администрированию.
my $url="http://mindworx.com/cgi-bin/v";     # Адресс сайта и путь к скрипту, НЕ ставте в конце слэш!

my($data,$ras,$full,$cook) =("./data",".dat","full.cat");

if (!param)                                         {&ident;}
elsif (param(\'passw\'))                              {&checkpass;}
elsif (param(\'action\') eq "new")                    {&new;}
elsif (param(\'id\'))                                 {&createfile;}
elsif (param(\'action\') eq "red")                    {&read;}
elsif (param(\'file\'))                               {&readfile;}
elsif (param(\'add\'))                                {&add;}
elsif (param(\'kod\'))                                {&kod;}
elsif (param(\'dlinagrafa\') && param(\'sirinagrafa\') && param(\'knopka\')) {&save;}

sub ident {
if(cookie(\'mwvote\') and $pass eq cookie(\'mwvote\')){&work;}
else{
print header(-charset=>\'windows-1251\');
print <




Vote by [mW]
Пожалуйста пройдите авторизацию, для администрирования
        голосованием.
(Обязательно должны быть включены cookie).


       
       
       
       
       
Введите пароль:_____



EOF
}}

sub checkpass {
if ($pass ne param(\'passw\')){&ident;}
else {
$cook=cookie(-name => "mwvote",
             -value => "$pass",
             -expires => "+1h");
print header(-cookie => $cook,
             -charset=>\'windows-1251\');
&work;
}}

sub work{
print header(-charset=>\'windows-1251\');
print <







Создание, Редактирование и Удаление Голосований.


EOF
}

sub new{
if(cookie(\'mwvote\') and $pass eq cookie(\'mwvote\')){
print header(-charset=>\'windows-1251\');
print <





Создание Голосования.


          Название файла должно состоять только из латинских букв, цифр, символов
          подчеркивания и не должно превышать 20 знаков!
Введите название файла!

EOF
}
else{&off;}
}

sub createfile{
if(cookie(\'mwvote\') and $pass eq cookie(\'mwvote\')){
print header(-charset=>\'windows-1251\');
my $file=param(\'id\');
if(-e "$data/$file$ras"){err(1);}
elsif(!($file=~ /^[a-z0-9_]+$/)){err(2);}
elsif(length($file)>20){err(3);}
else{
my @add2file;

open (FILE, ">>$data/$full") || die "Ошибка при записи файла: $!";
print FILE "$file\\n";
close FILE;

$add2file[0]="100\\n";
$add2file[1]="8\\n";
$add2file[2]="Ответить\\n";
$add2file[3]="yes\\n";
$add2file[4]="yes\\n";
$add2file[5]="Что вы думаете об этом скрипте ?\\n";
$add2file[6]="Хорош=0\\n";
$add2file[7]="Можно и лучше..=0\\n";

open (FILE, ">$data/$file$ras") || die "Ошибка при записи файла: $!";
print FILE @add2file;
close FILE;

print <



EOF
}}
else{
print header(-charset=>\'windows-1251\');
print "Пройдите авторизацию!\\n";
}}

sub read{
if(cookie(\'mwvote\') and $pass eq cookie(\'mwvote\')){
print header(-charset=>\'windows-1251\');
my (@file,$file);

open FILE,"$data/$full";
@file=;
close FILE;

print <



EOF
foreach $file(@file) {
print <

EOF
}
print <
Выберите голосование для его последующего редактирования
Файл:

HTML
}
else{&off;}
}

sub readfile {
if(cookie(\'mwvote\') and $pass eq cookie(\'mwvote\')){
print header(-charset=>\'windows-1251\');
my ($file,@file,$i,$long,$tfile,$check,$check2);
$file=param(\'file\');
if(!($file=~ /^[a-z0-9_]+$/)){err(2);}
else{
$tfile="$file$ras";

open (FILE, "$data/$tfile") || die "Ошибка при открытии файла: $!";
@file=; chomp @file;
close FILE;
$long=$#file;
if ($file[3] eq "yes"){$check="checked";}
if ($file[4] eq "yes"){$check2="checked";}

print <











EOF

for ($i=6; $i<=$long; $i++) {
my($q,$a)=split(/=/,$file[$i]);
print <

EOF
}
print <
Редактирование фала голосования.

Для удаления ответа, поставте галочку.
Код Голосования                Назад
                         Логи
Длинна графика.
Ширина Графика.
Надпись на кнопке.
Разрешить повторное голосование?
Показывать результаты голосования?
Вопрос.
Ответ.




EOF
}}
else{&off;}
}

Frodo

  • Гость
Часть ДВА! :)
« Ответ #1 : 01 Августа 2002, 02:03:11 »
sub add {
if(cookie(\'mwvote\') and $pass eq cookie(\'mwvote\')){
my($file,@file,$long,$tfile);
$file=param(\'add\');
if(!($file=~ /^[a-z0-9_]+$/)){err(2);}
else{
$tfile="$file$ras";

open FILE,"$data/$tfile";
@file=;chomp @file;$long=$#file;
close FILE;

open (FILE, ">>$data/$tfile") || die "Ошибка при записи файла: $!";
print FILE $file[$long+=1]="Новый Вариант=0\\n";
close FILE;
print header(-charset=>\'windows-1251\');
print <



EOF
}}
else{&off;}
}

sub save {
if(cookie(\'mwvote\') and $pass eq cookie(\'mwvote\')){
my ($long,$file,@file,$i,@temp,$temp,$tfile);
$long=param(\'hidmax\');
$file=param(\'hidfile\');
if(!($file=~ /^[a-z0-9_]+$/)){err(2);}
else{
@temp=param(\'del-row\');
$tfile=$file.$ras;
print header(-charset=>\'windows-1251\');

$file[0]=param(\'dlinagrafa\')."\\n";
$file[1]=param(\'sirinagrafa\')."\\n";
$file[2]=param(\'knopka\')."\\n";
if (param(\'ip\') and param(\'ip\') eq "yes"){$file[3]="yes\\n";} else{$file[3]="no\\n";}
if (param(\'show\') and param(\'show\') eq "yes"){$file[4]="yes\\n";} else{$file[4]="no\\n";}
$file[5]=param(\'vopros\')."\\n";

for ($i=6; $i <= $long; $i++){
$file[$i]=param("$i")."=".param("row$i")."\\n";
}
foreach $temp(@temp){
$file[$temp]=();
}

open (FILE, ">$data/$tfile") || die "Ошибка при записи файла: $!";
print FILE @file;
close FILE;
print <



EOF
}}
else{&off;}
}

sub kod{
if(cookie(\'mwvote\') and $pass eq cookie(\'mwvote\')){
my ($text,$lng,$tfile,$file,@file,$i);
my $t=0;
$file=param(\'kod\');
if(!($file=~ /^[a-z0-9_]+$/)){err(2);}
else{
$lng=param(\'max\');
$tfile=$file.$ras;
open (FILE, "$data/$tfile") || die "Ошибка при открытии файла: $!";
@file=; chomp @file;
close FILE;
print header(-charset=>\'windows-1251\');

print <





Код голосования

1.HTML код голосования.




2.Если ваш сервер поддерживает SSI, то вы можете вставить следующий код.




Результаты голосования

1.HTML код голосования.




2.Если ваш сервер поддерживает SSI, то вы можете вставить следующий код.






EOF
}}
else{&off;}
}

sub off{
print header(-charset=>\'windows-1251\');
print <

Пройдите авторизацию!


EOF
}
sub err{
if($_[0] == 1){
print <

Такой файл уже существует!


EOF
}
elsif($_[0] == 2){
print <

Недопустимые символы в названии файла!


EOF
}
elsif($_[0] == 3){
print <

Длинна файла превышает 20 символов!


EOF
}
}

Оффлайн Tankist

  • Типа на танке
  • Старожил
  • ****
  • Сообщений: 461
  • +0/-0
  • 2
    • Просмотр профиля
Немного вопросов и отладка..:)
« Ответ #2 : 01 Августа 2002, 02:14:10 »
Блин хватит может форум засорять?:abuse:
Я б за такое тему удалял и автора в бан пожизненно!:abuse:
Удачи

Оффлайн Tankist

  • Типа на танке
  • Старожил
  • ****
  • Сообщений: 461
  • +0/-0
  • 2
    • Просмотр профиля
Немного вопросов и отладка..:)
« Ответ #3 : 01 Августа 2002, 02:15:43 »
Цитировать
выложу чуть позже...:)

Ой не пугай!:)
Удачи

Frodo

  • Гость
Немного вопросов и отладка..:)
« Ответ #4 : 01 Августа 2002, 02:36:18 »
Cтранный ты какой-то, форум-то для чего? :) где я еще скрипт тюнинговать буду?

он кстати меньше будет, раз этак в 5..:)

Оффлайн Tankist

  • Типа на танке
  • Старожил
  • ****
  • Сообщений: 461
  • +0/-0
  • 2
    • Просмотр профиля
Немного вопросов и отладка..:)
« Ответ #5 : 01 Августа 2002, 03:01:41 »
Форум для того чтобы: ты спрашиваешь - тебе отвечают, а не для того чтобы тут листинги устраивать...
Не работает отдельный кусок кода - покажи его и все с раздостью ответят...
Удачи

Оффлайн glebushka

  • студент
  • Ветеран
  • *****
  • Сообщений: 944
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.intellectuals.ru
Немного вопросов и отладка..:)
« Ответ #6 : 01 Августа 2002, 03:12:43 »
Frodo
1. разбирайся сам, могу только сказать что ругается сервер на 14 строчку, т.е. на:
if (!param) {&ident;}
Говоря следующее:
"Use of uninitialized value in string"
Причём повотряет это дважды, наверное для непонятливых:-), после чего выдёт 500 ошибочку.
Сразу сказать что не правильно я не могу, но что-то явно здесь не так:-)
2. Проблем никаких нет, просто перед тем как передавать браузеру информацию, ты должен ему сообщить, что именно передаёшь, а в некоторых случаях ты направно сделал заголовок, в функции work, убери заголовок, он не нужен (после проверки куков ты и так его сделал, а так сейчас этот заголовок выводитися в ХТМЛ файл.
3. см второй:-), вот правда редиректа у меня не происходит;)
4. для того чтобы немного ускорить процесс авторизации гораздо проще создать файл в котором будет указано:
1) IP посетителя, который авторизировался
2) время до которого действует эта запись, если + 1 час, так прибавляешь один час, если больше то больше и постоянно сравниваешь с текущим временем.
На самом деле это (по идеи) работает быстрее куков, хоть и выглядит сложнее, т.к. не происходит передачи данных: запроса сервера и ответа браузера, на эту передачу, естественно уходит время. Всё это конечно ИМХО.
Мне этот вариант нравиться ещё и потому, что тогда не важно, разрешены ли в браузере куки или нет.
Для меня сложнее всего было прибавлять время:-). Ведь если просто прибавлять по часу, то когда мы прибавим к 23.30 + 1 час получим 24.30, понятно что тогда этот IP будект сохранён в файле на веки вечные (проверка по дате тоже не катит, ну думаю поймёшь почему. Так воть после долгих моих мучений с датами:-), я догадался подсмотреть у Штайна (дяденька который модуль CGI написал).
Если тебе нужно скачай мой любимый модуль:-) я там его урезал специально для тебя до одной функции определения времени. Называется модуль не за что не догадаешься:-)glebushka.pm. Качаем по адресу: http://www.glebushka.hut.ru/glebushka.pm
Размести его в каталоге со скриптом, и подключи require "glebushka.pm";
После чего обращаешься к функции, следующим образом:
my $time=&glebushka_vrema("+1h", "chislo");
для того чтобы получить текущее время вместо 1h пиши 1s (!). Обязательно передавай первый параметр, а то плохо будет.
В принципе в комментариях к модулю это есть. Если какие проблемы и/или рац.предложения по этой функции определения времени пиши мне на мыло. (stalnoy_gleb@mail.ru).
5. всё-таки ты это, не выкладывай такие большие фрагменты кода в форуме, неудобно, лучше кидай урл для скачки.
Ну к чему все это, лучше бы водки выпили...

Оффлайн glebushka

  • студент
  • Ветеран
  • *****
  • Сообщений: 944
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.intellectuals.ru
Немного вопросов и отладка..:)
« Ответ #7 : 01 Августа 2002, 03:20:38 »
Tankist
Frodo
контакт!:-). Записался я...
2Tankist, ну зачем же сразу банить? Злой ты какой-то сегодня:-).  Действительно в таких случаях урлы кидают для скачивания ну или приводят неработающий кусок кода.
2Frodo см. выше:-). Если у тебя нет своего сайта, то хороший повод сделать хоумпагу, ну туда и выкладывать для скачивания подобные вещи.
Ну к чему все это, лучше бы водки выпили...

Unregistered

  • Гость
Немного вопросов и отладка..:)
« Ответ #8 : 01 Августа 2002, 03:30:27 »
1. Да я сам знаю, думаешь я логи не смотрел, просто не могу понять, по идеи если не давать параметров(пароля) param(\'passw\') является ложью, и тогда в той строке обсурд...хотя хз...%)
2.Правильно, но если с установленными куками зайти по htp://...admin.cgi тебя редиректит с &indef на &work, и тогда браузер не понимает какой формат мы ему даем и выдает 500 ошибку..:)
3.Зна кукисы не поставились..:( или попробуй зайди на скрипт ьез параметров и нажми рефреш, может кеширование...
4.О! хорошая идея, чедня после полудня опробую..:) Спасибки хоть что-то рациональное...
5. Ну..ээ...ладно...так уж и быть..:)
6.Спасиб еще раз, вот ток не расписывай так, а то прям книжка для чайников..:)

Frodo

  • Гость
Немного вопросов и отладка..:)
« Ответ #9 : 01 Августа 2002, 03:31:18 »
Куда записался?

Frodo

  • Гость
Немного вопросов и отладка..:)
« Ответ #10 : 01 Августа 2002, 03:33:01 »
2Tankist
У мя все работает мне оттюнинговать просто надо..:)

Unregistered

  • Гость
Немного вопросов и отладка..:)
« Ответ #11 : 01 Августа 2002, 03:36:38 »
2glebushka
Да не, мы скоро домен mindworx.com купим, я веб-дизайном занимаюсь, точнее программированием, вот приспичило скрипт написать, а то все остальные не доработанные, запомнил ссылку сменил урл и пжалуйста ты в админской части..:(
А дорабатывать чужой, труднее чем написать свой..:)

Оффлайн glebushka

  • студент
  • Ветеран
  • *****
  • Сообщений: 944
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.intellectuals.ru
Немного вопросов и отладка..:)
« Ответ #12 : 01 Августа 2002, 04:11:32 »
Цитировать
Куда записался?

не в том смысле:-), а в смысле "задумался", только не думал а печатал:-))), ну надеюсь ты меня понял:-))).
Цитировать
редиректит с &indef на &work, и тогда браузер не понимает какой формат

А... Тады не нужен заголовок в функции checkpass
"-charset=>\'windows-1251\');"
Воть... А то сначала заголовок когда куки устанавливаешь, потом в indef.
Frodo, ты бы зарегистрировался что ли... А то всё время под разными именами:-).
Цитировать
А дорабатывать чужой, труднее чем написать свой.

Это точно... Хотя изучая чужие (например какадувовские) можно найти много чего полезного.
Ну к чему все это, лучше бы водки выпили...

Оффлайн Frodo[mW]

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 10
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Немного вопросов и отладка..:)
« Ответ #13 : 01 Августа 2002, 04:19:45 »
Терь понял..:)

Если я из чекпаса уберу хидер, куки не запишутся...вроде...:(

Да я зарегился..:) давно...пароль просто забыл..:)

Я когда этот писал, посмотрел скриптов пять, именно по голосованию..чего токо не насмотрелся...от меток и go_to до шифрования пароля на админский скрипт, но с свободным заходом при параметрах..:)

Оффлайн glebushka

  • студент
  • Ветеран
  • *****
  • Сообщений: 944
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.intellectuals.ru
Немного вопросов и отладка..:)
« Ответ #14 : 01 Августа 2002, 04:48:30 »
Цитировать
Если я из чекпаса уберу хидер, куки не запишутся...вроде...

Угу. точно. ступил я :-).
Вообщем сделай так, чтобы заголовки два раза не повторялись, например в  &indef перед запуском &work поставь заголовок, а из &work убери.
Ну к чему все это, лучше бы водки выпили...

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28