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

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

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

lynx (26-06-2003 00:00): Теперь тут: Запретить гостям (Guest) создавать сообщения.  Версия для печати • ПодписатьсяДобавить в закладки

   

Yoda Kerr



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Странное дело... У меня на локалхосте Guest может запросто создавать новые темы и исправлять профиль. Причем после правки профиля все изменения благополучно сохраняются в members/Guest.cgi! Кто-нить такое встречал?
 
Я так понимаю, не срабатывает условие
Код:
if ($userregistered eq "no") { &error("$ibtxt{'1828'}&$ibtxt{'1829'}"); }

в prifile.cgi и post.cgi.
Можно ли это условие заменить на
Код:
if ((!$inmembername) or ($inmembername eq "$ibtxt{'0043'}")) { &error("$ibtxt{'1828'}&$ibtxt{'1829'}"); }

Или есть более надежный/изящный способ?
 
Через поиск ответ не смог найти.
 
Добавлено
Да. Выше приведенный вариант работает, но т.к. условие
Код:
if ($userregistered eq "no")
встречается очень часто, лучше разобраться, почему переменная
Код:
$userregistered=""

 
Единственная инициализация этой переменной находится в ikon.lib в подпрограмме "getmember", но я не совсем разобрался, что там не так. Что означает "-e" в условии
Код:
if (-e $filetoopen)
в этой подпрограмме?
 
Добавлено
В ikon.lib после:

Код:
# Get member info.
 
sub getmember {
    my $nametocheck = shift;
    $nametocheck =~ s/ /\_/g;

добавил:

Код:
    if ((!$inmembername) or ($inmembername eq "$ibtxt{'0043'}"))  { $userregistered = "no"; }

 
Не знаю насколько это оправдано, но вроде все заработало...
 
Спасибо за помощь.

Всего записей: 14 | Зарегистр. 07-08-2002 | Отправлено: 10:48 13-08-2002 | Исправлено: Yoda Kerr, 14:17 13-08-2002
Ausw



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

Цитата:
У меня на локалхосте Guest может запросто создавать новые темы  
пусть создает, в чем причина для беспокойства ? может чел один раз пришел и больше не придет, зачем его заставлять региться. ?
 

Цитата:
и исправлять профиль.  
Делаем "новоиспеченому" гуесту 555 и все дела.
 
 

Цитата:
Через поиск ответ не смог найти.  

быть такого не может.  
ты еще поищи как закрыть просмотр профиля для гуестов, редактирование сообщений, созданный другими гуестами и тд и тп


----------
Be High.

Всего записей: 7371 | Зарегистр. 12-07-2001 | Отправлено: 15:41 13-08-2002
Yoda Kerr



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

Цитата:
пусть создает, в чем причина для беспокойства  

Так уж вышло, что в настройках у меня стояло разрешение создавать новые темы только зарегистрированным пользователям. И вдруг под guest'ом эта подпрограмма проходит! Начал тестить - дык еще и профиль изменить мона, ikonboard.cgi не видно надписи "Вы должны войти в конференцию, что бы видеть помеченные сообщения" и еще кое-какие вещи... Все это указывает на одно - где-то в коде ошибка.  
И не важно, что можно выставить пермишены для guest.cgi - это решение другие проявления той ошибки не уберет. Вот это уже IMHO довольно весомая причина для беспокойства. Ведь существует вероятность, что одно из последствий подобной халатности будет уменьшение защиты форума.
Мда. Наверно с "халатностью" и "безопасностью" я перегнул , но IMHO просто неприятно сознавать что где-то в коде есть ошибка и не пытаться ее пофиксить.

Всего записей: 14 | Зарегистр. 07-08-2002 | Отправлено: 18:22 13-08-2002
Ausw



Moderator
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Yoda Kerr

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

Цитата:
И не важно, что можно выставить пермишены для guest.cgi  
ну здрасть как это не важно, еще как важно, просто выставленный пермишен не дает права записи гуесту в профиль, а тем самым сообщений у него всегда будет N/A, и все поля пустые будут. А то ведь можно пойти в профиль, задать пароль и усе, регламент. Никто не напишет под гуестом.


----------
Be High.

Всего записей: 7371 | Зарегистр. 12-07-2001 | Отправлено: 18:36 13-08-2002
Alexander Ipp



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Yoda Kerr
-e - проверка на то, что файл существует.
гетмембер проверяет, и если такой файл есть - юзер зареган. Если нет - $userregistered = "no". Проверка на геста делается отдельно.

Всего записей: 1943 | Зарегистр. 20-08-2001 | Отправлено: 19:56 13-08-2002
Yoda Kerr



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

Цитата:
ну здрасть как это не важно, еще как важно

Безусловно, выставив пермишены на хосте, guest не сможет менять профайл, но
Цитата:
это решение другие проявления той ошибки не уберет

А мне надо было так универсально пофиксить этот баг, чтоб guest и в профиль не смог залезть и тему не смог создать и ничего другого (ему по статусу неположенного) сделать не смог. А если я захочу ему разрешить создавать новые темы, я специальную для этого опцию включу. Но код исправить надо. Это уже дело принципа. Что, собственно, я и сделал.
ЗЫ: по-моему уже офф-топ пошел
 
Добавлено
Alexander Ipp

Цитата:
Проверка на геста делается отдельно

Видимо она-то и не справлялась со своей задачей.
 
Надеюсь, мое решение этой проблемы не испортит еще что-нить...

Всего записей: 14 | Зарегистр. 07-08-2002 | Отправлено: 20:08 13-08-2002
NT



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Но профиль один на всех гуестов да? Тоесть могут сразу два гуеста менять одновременно под себя?

----------
A que jode no entender lo que pone?

Всего записей: 1861 | Зарегистр. 27-07-2002 | Отправлено: 20:57 13-08-2002
Yoda Kerr



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ну да, обычно проверка осуществляется так:
Код:
if ((!$inmembername) or ($inmembername eq "$ibtxt{'0043'}"))  

Но кое-где встречается и другой вариант:
Код:
if ($userregistered eq "no") {}  
Его можно встретить в десятке файлов. Теперь благодаря Alexander Ipp'у я знаю как и он работает.
Вот инициализация этой переменной в ikon.lib:

Код:
sub getmember {
    my $nametocheck = shift;
    $nametocheck =~ s/ /\_/g;
# fix $userregistered = ""
    if ((!$inmembername) or ($inmembername eq "$ibtxt{'0043'}"))  { $userregistered = "no"; }
    $filetoopen = "$ikondir" . "members/$nametocheck.cgi";
    $filetoopen = &stripMETA($filetoopen);
    if (-e $filetoopen) {
        open(FILE,"$filetoopen");
        $filedata = <FILE>;
        close(FILE);
        chomp($filedata);
        ($membername, $password, $membertitle, $membercode, $numberofposts, $emailaddress, $showemail, $ipaddress, $homepage, $aolname, $icqnumber ,$location ,$interests, $joineddate, $lastpostdate, $signature, $timedifference, $privateforums, $useravatar, $gender, $misc1, $misc2, $misc3, $personalavatar) = split(/\|/,$filedata);
            chomp $privateforums;
            if($privateforums) {
            @private = split(/&/,$privateforums);
            foreach $accessallowed (@private) {
                chomp $accessallowed;
                ($access, $value) = split(/=/,$accessallowed);
                $allowedentry{$access} = $value;
                }
            }
        }
    else { $userregistered = "no"; }
    }

Т.е. для гостя
Код:
$userregistered = "no"
всегда ложно (ведь members/guest.cgi существует!). Отсюда все "беды"
 
Только кому я енто только что написал - вы ведь это знаете...
 
Ausw

Цитата:
выставленный пермишен не дает права записи гуесту в профиль

 
А вот интересно - если guest, заполнив форму Профиля, нажмет кнопку "Отправить" и пермишены не дадут перезаписать файл guest.cgi. В таком случае пользователь увидит какой-нить эффект (сообщение об ошибке, etc.)?
 
NT

Цитата:
Тоесть могут сразу два гуеста менять одновременно под себя?

Неа. Если один Guest изменит, допустим, пароль и тем самым запишет его в guest.cgi, то остальные IMHO войти-то смогут (просто нажав на ссылку ...ikonboard.cgi), а вот войти в Профиль в качастве гостя - уже нет
 
Добавлено
А может быть и войти не смогут...

Всего записей: 14 | Зарегистр. 07-08-2002 | Отправлено: 21:22 13-08-2002
Alexander Ipp



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Yoda Kerr

Цитата:
пользователь увидит какой-нить эффект  

Нет.
# fix $userregistered = ""  
    if ((!$inmembername) or ($inmembername eq "$ibtxt{'0043'}"))  { $userregistered = "no"; }  
бред.
можно так:

Код:
 
if (-e $filetoopen && $nametocheck ne "Guest") {  
 

Но на свой страх и риск...

Всего записей: 1943 | Зарегистр. 20-08-2001 | Отправлено: 21:39 13-08-2002
Yoda Kerr



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alexander Ipp

Цитата:
Но на свой страх и риск

В чем здесь заключается риск?
 
А с приоритетами здесь все в порядке или нужно
Код:
if ((-e $filetoopen) && ($nametocheck ne "Guest")) {  

 
Добавлено
Alexander Ipp

Цитата:
можно так

Нет, так не пашет. А чем тебе не нравится мой вариант?

Всего записей: 14 | Зарегистр. 07-08-2002 | Отправлено: 22:03 13-08-2002 | Исправлено: Yoda Kerr, 22:04 13-08-2002
Alexander Ipp



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Yoda Kerr
Тем, что он не работает. Потому, что вначале ТЫ определяешь userregistered, а потом он переопределяется старым способом.

Цитата:
if ((-e $filetoopen) && ($nametocheck ne "Guest")) {    

Без разницы.

Цитата:
В чем здесь заключается риск?  

Какие-то фичи может гесту обрубить, м.б. гесты постить не смогут...
Например, у меня после этого постинг гестов под разными никами отказал бы.

Всего записей: 1943 | Зарегистр. 20-08-2001 | Отправлено: 08:32 14-08-2002
Yoda Kerr



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alexander Ipp

Цитата:
Тем, что он не работает

Да вроде как раз работает мой вариант...
А когда меняю на
Код:
if (-e $filetoopen && $nametocheck ne "Guest") {    
, тогда
Цитата:
Нет, так не пашет

 
Я резделил всех участников форума на три категории:
- мемберы (пользователи, модеры, админы);
- Guest;
- все остальные. Это то же что и Guest, но с именем, отсутствующим в папке members.
 
Последних IMHO можно вообще не рассматривать, поскольку перейти в форум может только мембер или гость c именем Guest. Это так? По крайней мере я не смог придумать способ войти в конфу под именем, отсутствующим в папке members.
 
Если так, то условие
Код:
if (-e $filetoopen) {  
всегда будет выполняться в ikonboard.cgi и других файлах (вожможно кроме loginout.cgi). Ведь на борду я могу войти либо как мембер, либо под именем Guest.
 
=>
Условие
Код:
if (-e $filetoopen) {  
никогда не присваивает переменной #userregistered значение 'no'. И когда в том же profile.cgi идет проверка на запрещение входа гостям в Профиль:
Код:
if ($userregistered eq "no") {
скрипт пропускает в Профиль абсолютно всех. А IMHO по задумке разработчиков - не должен.
 
Вот я и создал дополнительное условие
Код:
    if ((!$inmembername) or ($inmembername eq "$ibtxt{'0043'}"))  { $userregistered = "no"; }  
, которое не мешает обработать файл Guest.cgi в ikon.lib:
Код:
     if (-e $filetoopen) {  
        open(FILE,"$filetoopen");  
        $filedata = <FILE>;  
        close(FILE);  
        chomp($filedata);  
        ($membername, $password, $membertitle, $membercode, $numberofposts, $emailaddress, $showemail, $ipaddress, $homepage, $aolname, $icqnumber ,$location ,$interests, $joineddate, $lastpostdate, $signature, $timedifference, $privateforums, $useravatar, $gender, $misc1, $misc2, $misc3, $personalavatar) = split(/\|/,$filedata);  
            chomp $privateforums;  
            if($privateforums) {  
            @private = split(/&/,$privateforums);  
            foreach $accessallowed (@private) {  
                chomp $accessallowed;  
                ($access, $value) = split(/=/,$accessallowed);  
                $allowedentry{$access} = $value;  
                }  
            }  
        }  
    else { $userregistered = "no"; }  
    }  
, но в то же сремя отделяет зарегившихся мемберов от Guest'а, не позволяя тем самым заходить гостям куда не следует.
 
Тогда вот как будет срабатывать скрипт:
- если мембер -> $userregistered = "", происходит чтение данных мембера из файла members/*.cgi;
- если Guest -> $userregistered = "no", происходит чтение данных мембера из файла members/Guest.cgi;
- во всех остальных случаях -> $userregistered = "no", чтение данных из файла members/*.cgi не происходит.

Всего записей: 14 | Зарегистр. 07-08-2002 | Отправлено: 16:16 15-08-2002
Alexander Ipp



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Yoda Kerr

Цитата:
Последних IMHO можно вообще не рассматривать, поскольку перейти в форум может только мембер или гость c именем Guest. Это так? По крайней мере я не смог придумать способ войти в конфу под именем, отсутствующим в папке members.  

Можно куки руками исправить. И кое-где войти как угодно...

Всего записей: 1943 | Зарегистр. 20-08-2001 | Отправлено: 19:44 15-08-2002
Yoda Kerr



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Бедем надеяться, что это никому не придет в голову. А если и придет кому-то, то у тех людей не будет серьезного повода осуществить задуманное. Все-таки хакнуть далеко не популярную конфу - не сильно крутая вешь. Разве что для обучения навыкам взлома...

Всего записей: 14 | Зарегистр. 07-08-2002 | Отправлено: 22:21 15-08-2002
Alexander Ipp



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Yoda Kerr
Хм, если будешь наглеть - могут и сломать. Прецеденты были.

Всего записей: 1943 | Зарегистр. 20-08-2001 | Отправлено: 18:55 18-08-2002
Yoda Kerr



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Нет, не надо ломать. Я IMHO ничего плохого не сделал.

Всего записей: 14 | Зарегистр. 07-08-2002 | Отправлено: 20:30 18-08-2002
Alexander Ipp



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Yoda Kerr

Да нет, просто это на будущее, здесь ты вроде пока ничего плохого не сделал.

Всего записей: 1943 | Зарегистр. 20-08-2001 | Отправлено: 21:20 18-08-2002
Yoda Kerr



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Не в моем стиле гадить в хорошем месте. Да и в плохом тоже.

Всего записей: 14 | Зарегистр. 07-08-2002 | Отправлено: 14:07 19-08-2002
   

Компьютерный форум Ru.Board » IkonBoard и другие форумы » Ikonboard v.2 » Guest может менять свой Профиль
lynx (26-06-2003 00:00): Теперь тут: Запретить гостям (Guest) создавать сообщения.


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

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

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru