Flat |
Отправлено: 16 февраля 2019 — 09:23
|
Full Member
Покинул форум
Сообщений всего: 187
Дата рег-ции: Май 2018
Откуда: Красноярский край
Репутация: 14
|
1Bot пишет:Как Вы решаете вопрос с зависимыми модами?
Полностью независимый мод это плагин. Чтобы сделать полностью независимые моды, нужна кардинальная перестройка движка. К примеру, закрываем/открываем определенные разделы в зависимости от репутации пользователя. Мод создаёт файл со списком пользователей и их репутации. Чтобы добавить, допустим, вывод информации о репе в блоке сообщения под аватаркой, мод открывает файл со списком блоков, которые находятся в ячейке таблицы сообщений, и добавляет свой блок в нужном порядке(предварительно отсортировав список если нужно). Всё. Ничего не надо править руками. Но в таком случае нужно всё выводить через конфиг-файлы со списками блоков, допустим, на главной странице, в блоках менюшек, в телах сообщений, в блоке статистики и т.п. В админцентре тоже все менюшки делаются через конфиги, поэтому чтобы добавить какую-то новую кнопку, мы просто добавляем её в конфиг, а не в текст существующего модуля. Это концепция так называемого data-driven programming, то есть программирование, которое полностью зависит от структур данных, которые отображаются в долговременную память. Вот путь к независимым модам, а не контролёры и пр. ахинея.
Самое главное это не хранить информацию в скриптах. Вся логика должна быть собрана в конфигах. При этом любой модуль может что-то туда добавить, изменить или удалить, тем самым изменив логику работы всей системы.(Отредактировано автором: 16 февраля 2019 — 09:39) |
|
|
Flat |
Отправлено: 19 февраля 2019 — 07:33
|
Full Member
Покинул форум
Сообщений всего: 187
Дата рег-ции: Май 2018
Откуда: Красноярский край
Репутация: 14
|
Полностью переписал регистрацию. Изменил логику активации аккаунта по ключу. Изменил концепцию сохранения информации о пользователе. Переписал функции по работе с файлами. Вся работа теперь идёт через одну функцию, которая вызывает подсобные, с прицелом на будущую конвертацию на мускул если кому нужно будет. Много новых функций, и много функций переписано заново. Разговор это длинный, но вкратце скажу следущее.
Касаемо пользователей.
Теперь не будет номеров пользователей, а индетификация происходит только по логину. В этом случае не нужно вести поддержку сразу двух уникальных сущностей: логина и номера. Логин и так уникален, а так как база у нас файловая нет нужды в номерах пользователей, это как в YaBB сделано. Русские логины транслитируются (функция транслита новая). При регистрации создаётся не файл пользователя, а папка пользователя. Эти папки пользователей распределяются по отдельным ппапкам, по алфавитному принципу: например папка пользователя под ником admin называется member_admin/, эта папка лежит в папке под именем members_a. Папка участника под ником georgy называется member_georgy/, и лежит она в в папке members_g/. Это позволяет распределить пользователей, чтобы не было тормозов из-за большого количества файлов в одной директории. Уже на 5000 файлов файловые системы начинают тормозить.
Новая функция удаления директорий со всем содержимым.
В пользовательской папке находятся файлы: profile.php, stats.php, posts.php, avatar.gif(расширение может быть другое), messages.php и папка uploads/ если у пользователя есть загрузки.
Теперь все пользовательские данные собраны в одном единственном месте, что намного упрощает программирование и поддержку движка, упрощает сам движок.
В файле posts.php находятся записи с инфо о местонахождении каждого сообщения пользователя примерно в таком виде:
4|6|1|34
что означает: сообщение лежит в категории под номером 4, в форуме с номером 6, в теме 1, сообщение номер 34.
Записи лежат в порядке их добавления пользователем. При этом очень легко находить сообщения пользователей по категориям, форумам и темам.
Такой формат много места не занимает.
Файл stats.php нужен чтобы разгрузить файл профиля. В этом файле инфо обновляется динмически, а в файле профиля лежат настройки пользователя, его пароль и логин. В этом случае мы не переписываем постоянно файл профиля, это для того чтобы не потерять случайно инфо о пользователе.
В куках пользователя лежит не хеш пароля, а токен. Этот же токен лежит в файле stats.php пользователя. Это для безопасности. Пароль шифруется не md5(), а sha1(). Введена соль для хэша.
Активация пароля по мылу сделана проще. Юзеру нужно ввести только ключ. При регистрации с активацией, в именах файлов вместо хэшей пишутся логины как и для всех остальных, в этом случае не нужно проверять файл tempusers на наличие логина.
Все модули подключаются через индексный файл через список модулей.
Короче говоря вся логика изменена. Надеюсь, что доведу это дело до логического конца. Мне всё нравится: я делаю так, как считаю нужным, чтобы движок, файловый движок работал именно так, как полагается, по уму.(Отредактировано автором: 19 февраля 2019 — 07:49) |
|
|
Sigurni |
Отправлено: 21 февраля 2019 — 16:32
|
Newbie
Покинул форум
Сообщений всего: 11
Дата рег-ции: Окт. 2018
Репутация: -3
|
Flat пишет:Изменена концепция входа администратора в админцентр. Вопрос на засыпку: зачем существует функция повторного залогинивания админа при входе в админ центр? Мне действительно интересно.
Если у админа украдут cookie, не важно каким способом (даже через физический доступ к его ПК), то дополнительная форма авторизации не даст злоумышленнику зайти в админку. Более того, данный способ может служить дополнительной защитой от различных CSRF и XSS-атак, с которыми в своё время сталкивался ExBB. А поскольку админка может состоять не только из функций ядра, проверенных при выпуске дистрибутива форума, но и дополняться сторонними модулями, которые не всегда есть возможность проверить у авторов движка, такой способ защиты всё ещё актуален.
Flat пишет:Насколько я знаю нигде такого нет..
Поставьте какой-нибудь другой движок. Если бы вы это сделали, то увидели бы, что такой способ используется и в phpBB, и в IP.Board, и в XenForo (пруф в видео по ссылке)
Flat пишет:И сейчас именно так и есть! Понятно что делали студенты первокурсники, это по коду сплошь видно и понятно.
Почему вы в своих сообщениях поливаете грязью предыдущих разработчиков, при этом у пользователей этого движка уже более 10 лет всё прекрасно работает, и этот форум наглядное тому доказательство? И да, покажите уже наконец ваш код.(Отредактировано автором: 21 февраля 2019 — 16:41) |
|
|
Flat |
Отправлено: 22 февраля 2019 — 03:54
|
Full Member
Покинул форум
Сообщений всего: 187
Дата рег-ции: Май 2018
Откуда: Красноярский край
Репутация: 14
|
Sigurni пишет:Если бы вы это сделали, то увидели бы, что такой способ используется и в phpBB, и в IP.Board, и в XenForo (пруф в видео по ссылке)
Во-первых по ссылке ничего не ясно, так как н понятно авторизовался пользователь как админ или нет через основную форму. Там показана только форма входа(основная или специально для админа - не понятно).
Sigurni пишет:Если у админа украдут cookie, не важно каким способом (даже через физический доступ к его ПК), то дополнительная форма авторизации не даст злоумышленнику зайти в админку.
Согласен. Но в exbb сделано так, что админ когда авторизовался через форму входа в админцентр уже может прыгать между основным форумом и центром без подтверждения через форму входа в админцентр. И представьте что будет если злоумышленник похитит кукисы после авторизации: он будет иметь прямой доступ ко всем функциям. Я забыл сказать, что у меня так не будет. У меня будет подтверждение любого действия админа через ввод пароля в самом админцентре. Естественно опционально, но по умолчанию. Даже если юзер попадёт в админцентр он ничего там не сможет сделать. К тому же файл профиля админа имеет другое расположение полей логина и пароля, в этом случае злоумышленнику придётся каким-то образом изменить файл админа, что очень сложно.
Sigurni пишет:Почему вы в своих сообщениях поливаете грязью предыдущих разработчиков
А почему вы в каждом сообщении поливаете грязью меня? Так зрелые люди себя не ведут, по всей видимости вам 14 лет от роду.
Sigurni пишет:при этом у пользователей этого движка уже более 10 лет всё прекрасно работает, и этот форум наглядное тому доказательство?
Я ставил этот движок на реальный сервер, и после того, как начали вылезать многочисленные несостыковки, по типу: закрыл одну дверцу отвалились три остальных, пришлось снести его к ч..у. Понимаете: он выглядит достаточно пристойно чисто внешне, но под капотом такой бардак, что просто диву даёшся. Действительно писали студенты. Юрий был студент, он учился в то время. Первоначальный разраб тоже. Михайлицину, который сделал несколько модов, вообще на то время было 14 лет. Это были начинающие программировать люди. Я просто сказал правду. Вам она не нравится? Так это ваши проблемы: чего же вы опять лезете сюда? Проходите мимо этой темы. Зачем троллить?
Что касается кода, то что показывать? Там только регистрация налажена. Видите ли я пошёл по пути полной переписки кода, так как видимо иначе не могу: этот бардак надо исправлять. Сейчас уже ядро практически готово. Авторизацию вчера почти доделал. Будет новый скин. Вменяемая система файлов языков. Работа в админцентре будет по другому, примерно как в PanBB.
Вам нужен код чтобы в очередной раз его высмеять? Так и над кодом Линуса Торвальдса тоже смеются, однако он работает в линуксах у многих причём с успехом. Там вы тоже не найдёте своего любимого ооп.. Нет уж: когда будет рабочая вещь, тогда и выложу. Возможно даже, что надо будет делать отдельный форум поддержки, так как рождается совершенно новый движок, а тут кроме насмешек ничего не будет..(Отредактировано автором: 22 февраля 2019 — 04:03) |
|
|
Flat |
Отправлено: 26 февраля 2019 — 02:56
|
Full Member
Покинул форум
Сообщений всего: 187
Дата рег-ции: Май 2018
Откуда: Красноярский край
Репутация: 14
|
Yamaliya , я почему молчу.. Я ещё в первый день протестил. В файле fm.class.php в функции _Authorization() нужно за комментировать строчки:
CODE:else {
header("Location: loginout.php?action=loginadmin");
exit;
}
В файлах: admincenter.php, а также в тех файлах, на которые ведут ссылки из админцентра, а их достаточно много если считать файлы модов, после строчки
CODE:include('./include/common.php');
$fm->_GetVars(TRUE);
Надо вставить
CODE:if($fm->user['id'] != 1)exit();
Я тестировал немного, вроде всё нормально. Однако дело в том, что в движке перемешано определение "админской сущности". Там и через константу IS_ADMIN определяется, и через user['id'], и через сессии... То есть нет единого механизма идентификации, что плохо. Почему так? Потому что над движком работали последовательно много людей. Один сделал вот так, а следующий добавил вот эдак, а третий наплевав на двух предыдущих сделал по своему, и всё это осталось и ужасно удивительно до сих пор работает, и неплохо.. А проблемы возникают тогда, когда мы хотим внести какие-то изменения. Представьте: один модуль определяет админа по сессиям, другой модуль по id, третий.. Ну вы поняли. Поэтому тут надо ДОЛГО тестировать чтобы случайно не вылезли косяки. Поэтому в сомнениях: а стоит ли вообще лезть в этот улей с пчёлами?.. |
|
|
Flat |
Отправлено: 27 февраля 2019 — 06:19
|
Full Member
Покинул форум
Сообщений всего: 187
Дата рег-ции: Май 2018
Откуда: Красноярский край
Репутация: 14
|
NordWest пишет:Что то мне не сильно нравится этот код в плане безопасности. Может конечно и ошибаюсь, но похоже на дыру для SQL инжекции.
В смысле модулей, которые используют sqlite? Вполне возможно. Я вообще против пихания в чисто файловый движок каких-либо sql, sqlite и прочих баз данных. Это не наш путь, от слова совсем. Мы идём чисто файловым путём, а все те, кто вам будет говорить об обратном либо по хорошему ошибаются, либо лукавят. Вменяемых файловых движков и так кто наплакал..
Что касается данного случая, то тут видимо придётся ещё проверять сессионые переменные и константу IS_ADMIN. У меня, сейчас честно говоря голова занята конкретно своим проектом, да и приболел, поэтому не хочу тратить время на другое. Если буду растрачивать себя то ничего не выйдет..
Программирование очень серьёзная тема, тестирование ещё серьёзней и время-затратней. Тут надо быть полностью сосредоточенным на одном.
Что касается дела, то переписал авторизацию, надеюсь, что окончательно. К тому же сейчас делаю подсчёт онлайн посетителей, и посетителей за сутки. Сейчас число посетителей за день одномоментно сбрасывается, что на мой свежий взгляд несколько не верно. Делаю так, что будет проверятся время по каждому посетителю, в течение суток, и сбрасываться будет каждый отдельный посетитель при исчерпании времени. В этом случае, юзер, который зашёл на сайт во время сброса списка, не увидит пустое поле числа пос. за день, а увидит число пос. которые уже были здесь в течении прошедших часов.
Также будет учтены "свежие" или "старые" гости, то есть уникальные гости. Подсчитываться будут только уникальные гости, это чтобы небыло накрутки гостей. Статистика буде более полно отражать существующую картину посещений. Сейчас этого нет. Есть только разделение гостей на ботов и не ботов.(Отредактировано автором: 27 февраля 2019 — 06:28) |
|
|
|