Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » IkonBoard и другие форумы » Ikonboard v.2 » Авторизация при входе в служебный форум

Модерирует : Antuan

 Версия для печати • ПодписатьсяДобавить в закладки

Открыть новую тему     Написать ответ в эту тему

lynx



Advanced lynx
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Если входить в закрытый (служебный) форум, то скрипт просит один раз за сессию браузера авторизоваться.
Но если входить по ластпосту с главной страницы прямо в тему, либо знать адрес темы, то скрипт topic.cgi авторизацию не просит.
А хочу.  
Задача - сделать авторизацию и в топик.цги аналогично.
Хоть пните в нужном направлении.

Всего записей: 11712 | Зарегистр. 08-05-2001 | Отправлено: 04:57 11-01-2003
Xnom



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
lynx
подожди, а если разлогиниться и под гостем попробовать зайти по прямой ссылке? На дефолтном форуме так не получается Следовательно, проверка на доступ идёт...
 

Цитата:
Задача - сделать авторизацию и в топик.цги аналогично

Так возьми и перетащи принцип авторизации в топик.цги
Не получится, свистни, попробую сделать

Всего записей: 778 | Зарегистр. 09-10-2002 | Отправлено: 05:36 11-01-2003
Grey2002



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
lynx

Цитата:
то скрипт topic.cgi авторизацию не просит.  

не просит, только если ты её уже прошёл

Всего записей: 1325 | Зарегистр. 24-12-2001 | Отправлено: 08:28 11-01-2003
lynx



Advanced lynx
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Grey2002
 

Цитата:
не просит, только если ты её уже прошёл  

 
Ну, ясень пень, что если ты ее уже прошел на форуме при входе. Как полагаете, лучше снеси авторизацию из forums.cgi или добавить ее в topic.cgi, ибо иначе полный дурдом - она и есть и нету - толку ноль, грузит код, утомляет модеров. Или уж она есть или нету. Как считаете?

Всего записей: 11712 | Зарегистр. 08-05-2001 | Отправлено: 09:00 11-01-2003
Grey2002



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
lynx
Лучше всего вообще снести её нафих и сделать при входе проверку разрешён/не разрешён вход в приватный форум.

Всего записей: 1325 | Зарегистр. 24-12-2001 | Отправлено: 11:13 11-01-2003
Xnom



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
lynx
Если ты пытаешься зайти в топик, вход в который для тебя закрыт, по прямой ссылке, получишь ошибку
имхо, можно эту авторизацию из forums.cgi вообще убрать, оставить только проверку - разрешено/запрещено.

Код:
if (("$privateforum" eq "yes" && "$allowed" ne "yes")) { &error("$ibtxt{'1606'}&$ibtxt{'1607'}"); }

это строка из топик.цги, которая и производит проверку.  
Чувствуется мне, что эта строка появилась после статьи со скриншотами закрытых разделов
 
Короче, открой forums.cgi и строку

Код:
if (("$privateforum" eq "yes") && ("$allowed" ne "yes"))  { &accessneeded; }

меняй на вышеприведенную
далее сносишь полностью

Код:
sub accessneeded {

далее проводишь тесты
От простого юзера это поможет, от знающего хакера - нет...

Всего записей: 778 | Зарегистр. 09-10-2002 | Отправлено: 11:17 11-01-2003
lynx



Advanced lynx
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Значит так.
 
Xnom
 

Цитата:
подожди, а если разлогиниться и под гостем попробовать зайти по прямой ссылке? На дефолтном форуме так не получается Следовательно, проверка на доступ идёт...  

 
Не знаю, что там идет, я спокойно под гостем зашла по прямой линке в служебный и никакой авторизации там не идет, смотри:
 
forums.cgi
 

Код:
 
if ($action eq "accessrequired") {
    $inmembername  = $query -> param('membername');
    $inpassword    = $query -> param('password');
    &getmember("$inmembername");
    if ($userregistered ne "no" && $allowedentry{$inforum} eq "yes" && $inpassword eq $password) {
        $allowcookiename = "forumsallowed" . "$inforum";
        print "Set-Cookie: $allowcookiename=yes\;";
        print "\n";
        $allowed = "yes";
        }
 
        else {
            $allowed = "no";
            }
        }
 
        else {
            $tempaccess = "forumsallowed". "$inforum";
            $testentry = cookie("$tempaccess");
            if ($testentry eq "yes") { $allowed = "yes"; }
            else { $allowed = "no"; }
            }

 
А этот акшин устанавливается в ikon.lib, тут:
 

Код:
 
sub accessneeded {
 
        $output .= qq~
        <form action="$forumsprog" method=POST>
        <input type=hidden name="forum" value="$inforum">
       <input type=hidden name="action" value="accessrequired">
 
 <table cellpadding=0 cellspacing=0 border=0 width=$tablewidth bgcolor=$tablebordercolor align=center>
 <tr>
 <td>
  <table cellpadding=3 cellspacing=1 border=0 width="100%">
   <tr>
   <td bgcolor=$miscbacktwo valign=middle colspan="2"><div class="anonce" colspan="2">Введите Ваши данные для входа в приватный форум</div></td>
   </tr>
        <tr>
        <td bgcolor=$miscbackone valign=middle colspan="2"><div class="menu8">
        <br>Пройти авторизацию для входа в закрытый форум потребуется только один раз за сессию браузера.<br>&#160;
        </div></td>

 
Итого, если я убираю вызов этой подпрограммы в forums.cgi, то не идет вообще проверки на приватность форума.  
А если сделать:
 

Код:
      if (("$privateforum" eq "yes") && ("$allowed" ne "yes"))  { &error("Вход в приватную тему&доступ запрещен"); }

 
То не идет проверка на allow и никому не дает войти, потому что см. выше проверка тоже идет только если акшин accessrequired.
 
 
Вот что придумать?

Всего записей: 11712 | Зарегистр. 08-05-2001 | Отправлено: 08:01 28-01-2003
Xnom



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
lynx
Попробуй так:
курочим forums.cgi
после строк

Код:
else {
        &getmemberstime("$inmembername");
        &getlastvisit;
        $forumlastvisit = $lastvisitinfo{$inforum};
        $currenttime = time;
        &setlastvisit("$inforum,$currenttime");

добавляем

Код:
 
&getmember("$inmembername");
if ($allowedentry{$inforum} eq "yes") {
$allowed = "yes"; }
else { $allowed  = "no"; }

далее, удаляем это кусок

Код:
if ($action eq "accessrequired") {
    $inmembername  = $query -> param('membername');
    $inpassword    = $query -> param('password');
    &getmember("$inmembername");
    if ($userregistered ne "no" && $allowedentry{$inforum} eq "yes" && $inpassword eq $password) {
        $allowcookiename = "forumsallowed" . "$inforum";
        print "Set-Cookie: $allowcookiename=yes\;";
        print "\n";
        $allowed = "yes";
        }
        else {
            $allowed = "no";
            }
        }
        else {
            $tempaccess = "forumsallowed". "$inforum";
            $testentry = cookie("$tempaccess");
            if ($testentry eq "yes") { $allowed = "yes"; }
            else { $allowed = "no"; }
            }

Вот эту строку

Код:
if (("$privateforum" eq "yes") && ("$allowed" ne "yes"))  { &accessneeded; }

меняем на

Код:
if (("$privateforum" eq "yes") && ("$allowed" ne "yes"))  { &error("Ой, куда прёмся?&Делать Вам там нефиг"); }

Сносим  

Код:
sub accessneeded {

 
Теперь идем и проводим тесты
 
P.S. Если разлогинешься, но броузер не закроешь, по прямой ссылке в закрытый раздел попасть можно, причина - куки

Всего записей: 778 | Зарегистр. 09-10-2002 | Отправлено: 02:44 29-01-2003
lynx



Advanced lynx
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Xnom
 
Большое спасибо, все пашет в лучшем виде

Всего записей: 11712 | Зарегистр. 08-05-2001 | Отправлено: 01:37 07-02-2003
Открыть новую тему     Написать ответ в эту тему

Компьютерный форум Ru.Board » IkonBoard и другие форумы » Ikonboard v.2 » Авторизация при входе в служебный форум


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru