Русское сообщество fluxbb

Быстрый лёгкий надёжный форумный движок

Вы не вошли.

Объявление

Вы можете внести свой вклад в содержание сайта. Жертвователи попадут в почетную группу "Спонсоры". Поддержать сайт.

#1 2007-01-06 11:35:21

kmb
Гость

is_admmod

Форум имеет два адреса: 1. внешний, 2. ip-адрес внутрениий. В качестве base url прописан внешний.
Теперь модераторы по внутреннему адресу не могут модерировать, всё время выскакивает сообщение о неверном источники, временно нашел такое решение, закомментировать в файлах edit.php и delete.php:

if($is_admmod)
    confirm_referrer('edit.php')

и соотвественно:

if($is_admmod)
    confirm_referrer('delete.php')

Как я понял, это не единственная ошибка, будут еще и другие...

Как можно это элегантнее исправить?

#2 2007-01-06 11:41:00

hcs
Гость

Re: is_admmod

добавить альтернативные адреса непосредственно в функцию confirm_referrer

#3 2007-01-06 11:41:39

hcs
Гость

Re: is_admmod

это не элегантнее, но  лучше чем отключать проверку вообще.

#4 2007-01-06 12:14:44

kmb
Гость

Re: is_admmod

hcs

хм. попробую.

Добавлено  01.06.2007 15:01:10:
hcs
в каком файле эту функцию искать?

#5 2007-01-06 12:23:49

kmb
Гость

Re: is_admmod

function confirm_referrer($script)
{
        global $pun_config, $lang_common;

        if (!preg_match('#^'.preg_quote(str_replace('www.', '', $pun_config['o_base_url']).'/'.$script, '#').'#i', str_replace('www.', '', (isset($_SERVER['HT
TP_REFERER']) ? $_SERVER['HTTP_REFERER'] : ''))))
                message($lang_common['Bad referrer']);
}

можно подсказать как это сделать?

Добавлено  01.06.2007 15:01:31:
так правильно?

код:

function confirm_referrer2($script)
{
        global $pun_config, $lang_common;
$mybase_url = "";
        if ((!preg_match('#^'.preg_quote(str_replace('www.', '', $pun_config['o_base_url']).'/'.$script, '#').'#i', str_replace('www.', '', (isset($_SERVER['HT
TP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '')) )  ) and (!preg_match('#^'.preg_quote(str_replace('www.', '', $mybase_url).'/'.$script, '#').'#i', str_replace('www.', '', (isset($_SERVER['HT
TP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '')) ))) ;
}

Редактировался kmb (2007-01-06 13:08:17)

#6 2007-01-06 15:52:47

Dexus
Гость

Re: is_admmod

Вопрос: Что там значит "and"
Насколько я знаю в PHP такого ключевого слова нет. Есть &&.
Это первое.
Второе. Я сталкивался со схожей проблемой - когда у форума было два адреса.  Обошел я это на мой взгляд достаточно элегантно:
1. добавил переменную 'o_base_url2' в конфиг (в таблицу config).
2. функция confirm_referer стала такой:

function confirm_referrer($script)
{
    global $pun_config, $lang_common;
    $ref=$_SERVER['HTTP_REFERER'];
    if (!$ref) $ref='';
    $pat=pun_preg_quote($pun_config['o_base_url2'].'/'.$script);
    if (!preg_match('#^'.$pat.'#i', $ref))
        message($lang_common['Bad referrer']);
}

и еще добавил функцию (перед confirm_referer):

// Make sure that HTTP_REFERER matches $pun_config['o_base_url']/$script
// Symbols (,),[,],|,? are used as regexped, all others are quoted.
function pun_preg_quote($quote)
{
    $pat=preg_quote($quote);
    $a=array('\(','\)','\|','\?','\[','\]');
    $b=array( '(', ')', '|', '?', '[', ']');
    $pat=str_replace($a,$b,$pat);
    return $pat;
}

3. в admin_option.php после

<th scope="row">Base URL</th>
<td>
<input type="text" name="form[base_url]" size="50" maxlength="100" value="<?php echo $pun_config['o_base_url'] ?>" />
<span>The complete URL of the forum without trailing slash (i.e. http://www.mydomain.com/forums). This <strong>must</strong> be correct in order for all admin and moderator features to work. If you get "Bad referer" errors, it's probably incorrect.</span>
</td>
</tr>

добавил

<tr>
<th scope="row">Forum referer confirmation </th>
<td>
<input type="text" name="form[base_url2]" size="50" maxlength="100" value="<?php echo $pun_config['o_base_url2'] ?>" />
<span>This URL is like above (maybe exact copy), but it can contain regexp symbols "[]()?|" for multiple forum domain acception (such as localhost or intranet address).</span>
</td>
</tr>

В результате этих манипуляций в опциях у нас будет возможность вводить адрес для конфирма. Старый адрес остается как бы "визуальный", официальный, а второй - в виде упрощенного regexp'а, для подтверждения.
Еще там имеется ссылка на конфирмейшн в misc.php во время отсылки сообщения пользователю через email. Этот момент я не прорабатывал.

У меня это поле равно (для примера) http://(10.8.109.242|localhost|127.0.0.1)/forum

Редактировался Dexus (2007-01-06 15:57:44)

#7 2007-01-06 18:04:21

maximum
Гость

Re: is_admmod

Да, эта защита очень уж не кстати.

После мод реврайта перестали работать какие - либо правки вообще. big_smile

#9 2007-01-06 18:30:20

Dexus
Гость

Re: is_admmod

На самом деле confirm_referer - защита "от дурачка". Потому как любым псевдо-браузером (более менее продвинутый хакинг) можно подставить любого реферера и симулировать переход с нужной страницы.

#10 2007-01-06 19:31:59

hcs
Гость

Re: is_admmod

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

#11 2007-01-06 19:43:27

Dexus
Гость

Re: is_admmod

hcs
Мне тоже кажется, что перенос админки в отдельный каталог и закрытие его через authorization - наиболее грамотное решение.

#12 2007-01-06 23:23:22

kmb
Гость

Re: is_admmod

Dexus
как это нет?? smile)) убрали что ли? smile))) вроде есть...
честно сказать, мне моё решение больше нравиться, правда пока не знаю работает или нет...
щас смотрю, и думается мне мне надо and на or поменять...

#13 2007-01-07 15:23:27

Dexus
Гость

Re: is_admmod

kmb
В php нет ни or ни and. Не глупи.

#14 2007-01-07 17:41:47

hcs
Гость

Re: is_admmod

в пыхе действительно нет  ключевых слов "АND" и "OR"

#15 2007-01-07 18:16:35

Griffon
Гость

Re: is_admmod

а конструкции типа:

$fd = fopen(...) or die(...)

?

#16 2007-01-07 19:05:58

hcs
Гость

Re: is_admmod

тут есть smile

#17 2007-01-07 21:49:54

Dexus
Гость

Re: is_admmod

вы еще скажите про

$fd = fopen(...) and die(...)

smile
Просто товарищ kmb видимо дельфист.

Редактировался Dexus (2007-01-07 21:50:16)

#18 2007-01-09 22:15:21

kmb
Гость

Re: is_admmod

ну тада вам сюда - http://ru2.php.net/manual/ru/language.o … ogical.php

или посмотрите PHP core language keywords в гугле smile

#19 2007-01-10 00:45:35

Dexus
Гость

Re: is_admmod

Смысл двух разных вариантов для операторов "and" и "or" в том, что они работают с различными приоритетами

Это для тех, видимо, кто забыл как пользоваться скобками. Однако очень хорошо шарит в приоритетах...

Честно говоря этот идиотизм в PHP для меня новость.

#20 2007-01-10 09:30:16

kmb
Гость

Re: is_admmod

Dexus пишет:

Смысл двух разных вариантов для операторов "and" и "or" в том, что они работают с различными приоритетами

Это для тех, видимо, кто забыл как пользоваться скобками. Однако очень хорошо шарит в приоритетах...

Честно говоря этот идиотизм в PHP для меня новость.

не очень понял, почему это "идиотизм" smile мне например чем && удобнее применять and или вместо || применять or, имхо более понятнее, если кто-то чужой будет в коде разбираться и при этом особо программировать не умеет smile

Добавлено  01.10.2007 12:01:08:
и как это может быть новостью, если это существует с самого начала пхп smile в любой книжке по пхп это будет написано smile

#21 2007-01-10 13:49:57

Dexus
Гость

Re: is_admmod

kmb
Обыкновенно. Я воспринимаю PHP как синтаксически аналогичный C/Java (он изначально так и позиционирвоался). А там, разумеется, никаких and/or нет. И нарушать синтакчического единообразия (php/java) совсем не собираюсь. Если применять and/or, тогда уж и then и begin/end впридачу smile

#22 2007-01-10 14:11:57

kmb
Гость

Re: is_admmod

Dexus
вообще-то в с++ есть операторы and и or, а значит и си они быть должны tongue про яву ничего сказать не могу smile

Добавлено  01.10.2007 17:01:54:
для интереса посмотрел в гугле, они и в Джаве есть smile без них ни куда smile

#23 2007-01-10 17:28:07

Dexus
Гость

Re: is_admmod

kmb
Я вообще-то про сам язык говорю, а не библиотеки где делаются #define and && и #define or ||
дефайнами в си и не только or/and можно состряпать.
И в JavaSctipt нет ни or ни and.
Не надо шокировать программистов еретическими воззрениями smile

#24 2007-01-10 19:54:53

Slavik
Гость

Re: is_admmod

Dexus пишет:

Не надо шокировать программистов еретическими воззрениями

Гы smile

Короче я вас тут послушал и сделал вывод что pascal рулит определенно (сначала я подумал про васик, но слава богу вовремя передумал)

#25 2007-01-10 20:06:38

hcs
Гость

Re: is_admmod

pascal устарел. щас какбы рулит питон smile

Подвал доски

Под управлением FluxBB. Хостинг Hostens