Ru-MaNGOS

Ru-MaNGOS (http://mangos.ytdb.ru/index.php)
-   WWW (http://mangos.ytdb.ru/forumdisplay.php?f=23)
-   -   [control panel] ACP - Панель управления учетными записями. (http://mangos.ytdb.ru/showthread.php?t=115)

Кот ДаWINчи 08.03.2010 07:27

[control panel] ACP - Панель управления учетными записями.
 
Вложений: 1
Описание
ACP (Account Control Panel) – предназначена для управления игроками аккаунтами и персонажами. (Он же личный кабинет). Написана на PHP. Главный девиз программы «чем проще - тем лучше». Но некоторой "паранойи", в виде подтверждений по емайлу, не помешает.

Функционал
* регистрация нового аккаунта
* восстановление пароля к аккаунту по средствам электронной почты
* просмотр информации об аккаунте и персонажах
* смена пароля,
* смена емайла,
* смена типа аккаунта (wow, tbc, wotlk)
* lock / unlock аккаунта
* вытаскивание персонажа из застреваний
* переименование персонажа
* перенос персонажа на другой аккаунт
* телепортация персонажа в дружественную столицу
* просмотр информации о банах
* просмотр доступных команд сервера
* просмотр объявлений autobroadcast-a
* логирование всех важных операций

Требования
* PHP 4.x - 5.3.3
* MySQL 4.x и выше
* Mangos 3.1.3 сборка 8072 или выше
* Патч Autobroadcast (не обязателен).
* register_globals = Off
* safe mode off


Установка
Установка проходит в 2 этапа:
1. Импортируйте SQL/acp.sql в БД acp(lk)
2. Отредактируйте config/config.php (все пояснения для настройки есть в самом файле.)
3. Внести данные о реалмах в config/realmlist.php

Заметки
Это мой первый полный проект. До этого ограничивался подгонкой под себя того что уже есть. Но в определенный момент понял, что нормального, в моем особом понимании этого дела, личного кабинета не существует. Со всем уважением к TIMzs, но его кабинет не давал мне того, чего хотелось. Вот я и решил сделать всё сам. Понимаю, что некоторые участки кода можно переделать и оптимизировать, но познания в PHP растут вместе с этим маленьким проектом….
Большое количество шкурок вызвано моим интересом «а как ACP будет смотреться в дизайне вон того сайта?»…
Забыл добавить, что в файле английского интерфейса(include/text.en.php) залиты русские тексты в utf-8. Кому понадобиться, тот переведёт.

Последняя версия - 2.33 (2 - версия движка, 33 - ревизия).


ВНИМАНИЕ! Первая версия движка никогда мной не была доведена до ума и полной работоспособности. На определенном этапе разработки АСР, был написан с нуля движок 2-ой версии. Работы по первой версии были полностью и бесповоротно прекращены. Те администраторы, которые используют старый движок должны знать, что в нем есть куча дыр, неисправностей и прочих косяков. За утрату информации сервера, при использовании АСР-1, вы сами несете ответственность.

--------
Послесловие
Выражаю огромную благодарность Камекадзе, TIMzs, Antimatrix и другим участникам форума, из чьих работ я брал идеи для своего проекта.







----------------------------
tempura
Автор очередного вопроса на тему "что дальше?", "когда будет?" и т.п. - автоматически вылетает в Рид-Онли на пару недель. В соответствии с общепринятым правилом "сначала читайте шапку, потом всю ветку".

Alucard 09.03.2010 05:38

А changelog_и какие-то сохранились ? На подобии rev.|change.

Кот ДаWINчи 09.03.2010 05:54

Цитата:

Сообщение от Alucard (Сообщение 794)
А changelog_и какие-то сохранились ? На подобии rev.|change.

Посмотри в репозитории через черепашку! :thank_you:

Desperado 09.03.2010 09:31

Таки не добавил :)

/modules/charedit.php

Код:

                echo '<br>'.$txt[132]; // revive member
                $res = mysql_query("DELETE FROM `corpse` WHERE `player` = ".$_POST['character']);
                if ($res) echo $txt[92].'<br>';
                else echo $txt[93].'<br>';

include/text.ru.utf8.php

Код:

132=> 'Воскрешение - ',

Кот ДаWINчи 09.03.2010 21:07

Цитата:

Сообщение от Desperado (Сообщение 812)
Таки не добавил :)

Добавляю. Хотя не надо было ;) ....

Ждите новую реву.

Desperado 09.03.2010 21:12

отчего же. По мере необходимости ещё выставить добавление марки, что бы не злоупотребляли :)

Кот ДаWINчи 09.03.2010 21:36

рев. 11 в репозитории.

Код:

- Все правки за последние месяцы.
- Перевод под 3.3.2.
- смена пола (есть проблемы с парикмахерами).
- улучшение защиты скрипта.
- патч от Desperado


Desperado 09.03.2010 22:05

Зачем так официально)
поставил и фиг с ним :) кому-то пригодится.
Тем более назвать 6 строк кода патчем - как-то язык не выворачивается

angelShlesser 10.03.2010 03:03

Вложений: 1
Хорошо если бы добавили донат систему! И что бы можно было выбрать включить или выключить!
Так же нашёл мелкий баг в acp

Desperado 10.03.2010 03:15

не нужно портить хороший ЛК всяким гамном типа донат системы.
Аналогичные функции выполняет изложенный в соседней теме.

sinnerjan 10.03.2010 08:38

это только у меня? или на самом деле на свн стоит лог и пасс?

VinD 10.03.2010 08:42

Цитата:

Сообщение от sinnerjan (Сообщение 1092)
это только у меня? или на самом деле на свн стоит лог и пасс?

это ты коммит или апдейт с свн пытаешься сделать? :)

KiriX 10.03.2010 12:27

Кот ДаWINчи, я читал, что ты собираешься забрасывать свою разработку ЛК и в последующем он будет выходить лишь в составе более крупного какого-то проекта.
Почему? Прекрасный ЛК (не считая недоработанный модуль баг-трекера, который, как мне кажется, можно было бы довести до ума и он был бы очень удобен). Глобальных проектов много. И они очень неплохие (CSWOWD, AOWOW), но вот хорошего ЛК реально не хватает... Может не стоит забрасывать это дело? Пжалста!!! =)

Кот ДаWINчи 10.03.2010 18:48

KiriX, то ли я не правильно выразился, то ли народ не понял мои невнятные объяснения. Но дело обстоит совсем не так.

Итак, объясню свою позицию общественности - в стиле "от и до...":

Эта история началась где-то год назад. Кто давно на этом форуме (getmangos.ru), те наверное помнят тему с ЛК Тimz-a. То как они с Камекадзе делили авторство.... и т.п. В то время я, как и многие другие, попытался помогать в разработке ЛК Тimz-a. Но все мы получили интересный ответ от автора: "Вам надо, вы и придумывайте дополнительные опции к ЛК...". Вот тогда я и понял, что спасение утопающих...

В марте, апреле я сел за плотное изучение PHP и MySQL, а к концу Мая родилась мысль сделать свой ЛК. И вот тогда я совершил свою первую ошибку. Я начал делать ЛК, не продумав все до мелочей. В результате по осени пришлось переходить на АСР2.

И вот сейчас та же проблема. Мои "хочу" и "могу" ушли выше возможностей, созданного движка. Порой, я открываю давно написанные мной файлы, и с новых высот моего познания (с табуретки ;)) вижу столько огрех, что охота сесть и переписать всё с нуля. Поэтому, чтобы не тратить время зря, я решил сделать более интуитивный движок для ЛК. Сразу же в нем продумать и заложить некоторые избыточные функции, а так же особое внимание уделить на защиту от проникновения на сервер, удобность, гибкость и понятность для пользователя у движка.
Сделать всё модульным. Те кто видел joomly 1.0.xxx со стороны администрирования поймут меня. Вот к этому я и стремлюсь. Эдакая джумла в миниатюре, ориентированная на работу с мангосом, в особенности с аккаунтами и героями. Новый проект - это просто очередной виток развития АСР, но я не хочу называть его "АСР 3"... Будет новое имя.

Я все так же противник так называемой "админки". Интерфейс будет единый, но вот функционал... Он будет расширятся или ограничиваться в зависимости от gmlevel-а посетителя.

Но сразу скажу, это будет всё тот же кабинет, только более расширенный.

Сейчас идет стадия осмысления и написания основы движка, потом начну переносить в него модули. Часть работы уже сделана, но это пока капля в море. Что-то более менее работоспособное появится летом.

CruncH 10.03.2010 21:38

Кот ДаWINчи, я думаю все осмыслить сразу сложно =) поэтому и бывает рефакторинг кода
а по поводу авторства и тп,(смотреть под какими лицензиями были те проекты не хочется, лениво =) ), но если они под свободными Open Source лицензиями GNU GPL, BSD и тп, можно спокойно форкать и продолжать дело самому, соответственно соблюдая все каноны лицензии, и авторы того проекта могут только по "фырчать" в твою сторону и не более. На то они и свободные =)

Ну а по поводу нового или правильного кода(сам не смотрел что там и как написано), лучше для больших( и вообще) писать код и потом выделять его в классы и отдельные функции. Так чтобы потом не писать с "0", а использовать готовые наработки. Да и другим будет удобнее.

sinnerjan 10.03.2010 21:57

Цитата:

Сообщение от VinD (Сообщение 1095)
это ты коммит или апдейт с свн пытаешься сделать? :)

ну взял сцилку со второй ревой и запихнул ее в тортилу. нажал качать и хрен там. просит лог и пас.

KiriX 10.03.2010 23:01

Цитата:

Сообщение от sinnerjan (Сообщение 1223)
ну взял сцилку со второй ревой и запихнул ее в тортилу. нажал качать и хрен там. просит лог и пас.

Я вчера совершенно нормально скачал исходники без всякого пароля и логина.
Ввиду этого настоятельно рекомендую вам научиться пользоваться TortoiseSVN и выкачивать SVN репозитории. В противном случае если вы напишете ещё раз пост (в любой теме), в котором будет написано, что "черепаха" требует логин и пароль, я буду вынужден на неделю лишить вас права писать на данном форуме...

FWS 13.03.2010 10:20

Возникла проблема с кодировкой в ACP2.
Дефолтовое значение utf8 в config.php работает нормально, но постоянно приходится переключатся между кодировками в браузере. Если выставить в конфиге cp1251, ЛК зависает, а веб сервер выдает ошибку "falied to open stream: No such file or directory in D:\xxxxx\acp2\index.php on line 7".

В первом ACP все работает как часы, а здесь нет.

rsa 13.03.2010 10:31

Хотелось бы всех предупредить, что в коде этого весьма полезного продукта есть несколько ошибок, позволяющих без проблем за 5-10 минут взломать Ваш сервер, получить админские права (прямо через сайт), вынуть или уничтожить в базе любую информацию (только если sql-сервер глядит в Сеть). Методы защиты - стандартные от sql poison.

tempura 13.03.2010 10:55

FWS
http://ru-mangos.ru/showthread.php?t=274
тут про кодировки специально написал



rsa
Не могли бы вы в приват автору описать что и как? Я понимаю, ему будет удобнее иметь пример перед глазами, для исправления?

Deen 13.03.2010 13:05

Всем добрый день, возникла такая прорблема на версии ACP 1 при использование модуля смены пароля аккаунта, менялся пароль только для ACP, тоесть пароль для входа в игру каким то образом оставался прежним. Скажите, на версии 2 это уже не так? Я конечно понимаю что скачать и настроить дело пары минут, но всё же буду благодарен если кто то отпишеться на счёт этого :)

Кот ДаWINчи 13.03.2010 14:04

Цитата:

Сообщение от FWS (Сообщение 1745)
Возникла проблема с кодировкой в ACP2.
Дефолтовое значение utf8 в config.php работает нормально, но постоянно приходится переключатся между кодировками в браузере. Если выставить в конфиге cp1251, ЛК зависает, а веб сервер выдает ошибку "falied to open stream: No such file or directory in D:\xxxxx\acp2\index.php on line 7".

В первом ACP все работает как часы, а здесь нет.

в АСР2 я не стал замарачиваться с двумя кодировками и перешел полностью на юникод. Если вам всё же нужна виндовая кодировка, то найдите все текстовые файлы с именем *.utf8.* и скопируйте их с перекодировкой в *.cp1251.* (там их вроде 2)

Цитата:

Сообщение от rsa (Сообщение 1746)
Хотелось бы всех предупредить, что в коде этого весьма полезного продукта есть несколько ошибок, позволяющих без проблем за 5-10 минут взломать Ваш сервер, получить админские права (прямо через сайт), вынуть или уничтожить в базе любую информацию (только если sql-сервер глядит в Сеть). Методы защиты - стандартные от sql poison.

В последнем коммите часть дырок исправлено. большинство из оставшегося правится банальным (int) в запросах. Я просто не прошелся по всем файлам и не вставил. (Видимо придется эту работу провести перед уходом на новый движок)... Еще смею напомнить, Все читаем надпись в красной рамке внизу. Этот сайт делается сугубо в образовательных целях, а не для коммерческого использования!

Цитата:

Сообщение от Deen (Сообщение 1770)
Всем добрый день, возникла такая прорблема на версии ACP 1 при использование модуля смены пароля аккаунта, менялся пароль только для ACP, тоесть пароль для входа в игру каким то образом оставался прежним. Скажите, на версии 2 это уже не так? Я конечно понимаю что скачать и настроить дело пары минут, но всё же буду благодарен если кто то отпишеться на счёт этого :)

пофиксино. Это происходит из-за патча на авторизацию, который был в сентябре. Необходимо просто при смене пароля занулять поля сессий в таблице аккаунтов.

rsa 13.03.2010 15:31

Цитата:

Сообщение от Кот ДаWINчи (Сообщение 1793)
В последнем коммите часть дырок исправлено. большинство из оставшегося правится банальным (int) в запросах. Я просто не прошелся по всем файлам и не вставил. (Видимо придется эту работу провести перед уходом на новый движок)... Еще смею напомнить, Все читаем надпись в красной рамке внизу. Этот сайт делается сугубо в образовательных целях, а не для коммерческого использования!

коммит "на посмотреть" я брал сегодня, все самые опасные дырки на месте. банальным int (наверное имелось ввиду intval($_GET['id']) и тп ?) там правится далеко не все, еще надо кучами расставлять addslashes().
страдает недержанием также и генератор рандома для восстановления паролей.

Кот ДаWINчи 13.03.2010 16:58

Цитата:

Сообщение от rsa (Сообщение 1809)
коммит "на посмотреть" я брал сегодня, все самые опасные дырки на месте. банальным int (наверное имелось ввиду intval($_GET['id']) и тп ?) там правится далеко не все, еще надо кучами расставлять addslashes().
страдает недержанием также и генератор рандома для восстановления паролей.

Уважаемый, опять одна абстракция! Пожалуйста, ткните мне конкретно, где ОБЫЧНЫЙ пользователь может провести инъекцию. А то хаять все умеем, а вот дельные советы давать...
Я с большим удовольствием приму ваш багрепорт, и внесу изменения в скрипты.

Ко всему прочему, поясните, чем провинился генератор рандома. (Тоже желательно на фактах).

Добавлено:
Не стал дожидаться ответа rsa. Подключил protect.php :beee:
Код:

<?php
//Обработка $_POST
reset($_POST);
while ($post_name = current($_POST)) {
    $_POST[key($_POST)] = addslashes($post_name);
    $union_post = strpos(strtoupper($post_name),'UNION');//Если найдем UNION, то обрубаем строку!
    if ($union_post != false) $_POST[key($_POST)] = substr($post_name,0,$union_post);
    unset($union_post);
    next($_POST);
}
//Обработка $_GET
reset($_GET);
while ($get_name = current($_GET)) {
    $_GET[key($_GET)] = addslashes($get_name);
    $union_get = strpos(strtoupper($get_name),'UNION');//Если найдем UNION, то обрубаем строку!
    if ($union_get != false) $_GET[key($_GET)] = substr($get_name,0,$union_get);
    unset($union_get);
    next($_GET);
}
?>

Коммит 12 - залит.

mozilla 13.03.2010 19:09

Почему-то не пишутся логи. Базу создал, sql в нее залил, в конфиге прописал.
И наверно вот это можно добавить:

Кот ДаWINчи 13.03.2010 19:56

mozilla, только что проверил - логи ведуться. Может какая одна функция отвалилась? Напиши что не сохранилось!

mozilla 13.03.2010 20:05

Ни одна операция не логируется

Кот ДаWINчи 13.03.2010 20:11

Цитата:

Сообщение от mozilla (Сообщение 1849)
Ни одна операция не логируется

включи в конфиге показ ошибок и посмотри что выдаст. У меня логи идут исправно. И на сервере, и на тесте.

mozilla 13.03.2010 20:36

Показ ошибок включил. Где их выводить он должен, не понял :scratch_one-s_head:
Поменял в конфиге базу для лк на realmd, залив туда sql. Логи стали вестись. Что я упустил? :resent:

Кот ДаWINчи 13.03.2010 21:01

Цитата:

Сообщение от mozilla (Сообщение 1855)
Показ ошибок включил. Где их выводить он должен, не понял :scratch_one-s_head:
Поменял в конфиге базу для лк на realmd, залив туда sql. Логи стали вестись. Что я упустил? :resent:

мммм..... кодировку базы может.....?????

mozilla 13.03.2010 21:04

Создавал так:
PHP код:

CREATE DATABASE `lk` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci


rsa 13.03.2010 21:07

Цитата:

Сообщение от Кот ДаWINчи (Сообщение 1823)
Уважаемый, опять одна абстракция! Пожалуйста, ткните мне конкретно, где ОБЫЧНЫЙ пользователь может провести инъекцию. А то хаять все умеем, а вот дельные советы давать...
Я с большим удовольствием приму ваш багрепорт, и внесу изменения в скрипты.

частично уже внесено. дырка в char.php заткнута через (int) (хотя я бы не стал на это полагаться, лучше все же через новую переменную и intval()
Дырка в charedit.php (возможно) заткнута через новую проверку, но надо тестировать.
Давать советы дело неблагородное, я лучше кину несколько строк из реально имевшей место атаки. Я себе дырки позатыкал но уже не помню где и как конкретно.

"GET /ACP2/index.php?modul=gilds&page=1&show=66+union+select+ 1--+

"GET /ACP2/index.php?modul=charedit%27+union+select+1--

"GET /ACP2/index.php?modul=char&id=106197+UNION+SELECT+1/* HTTP/1.1"

"GET /ACP2/index.php?modul=char&id=106197)+and+1=union+select +*+from--

"GET /ACP2/index.php?modul=char&id=106197)+union=(select+*+fr om(select+*+from(select+name_const(

"GET /ACP2/index.php?modul=char&id=-999.9%20UNION%20ALL%20SELECT%200x31303235343830303 536

строки не окончены, они длинные. но понять куда и как целились можно.

mozilla 13.03.2010 21:26

Баг: если на аккаунте уже есть дк, то туда никого больше не перенести.

Кот ДаWINчи 13.03.2010 22:57

Цитата:

"GET /ACP2/index.php?modul=gilds&page=1&show=66+union+select+ 1--+
Проглядел. Закрываю.

Цитата:

"GET /ACP2/index.php?modul=charedit%27+union+select+1--
Это было закрыто в 11 реве. mainform.php и menu.php теперь проверяют модули на наличие в модуль_листе.

Цитата:

"GET /ACP2/index.php?modul=char&id=106197+UNION+SELECT+1/* HTTP/1.1"

"GET /ACP2/index.php?modul=char&id=106197)+and+1=union+select +*+from--

"GET /ACP2/index.php?modul=char&id=106197)+unionselect+*+fr om(select+*+from(select+name_const(

"GET /ACP2/index.php?modul=char&id=-999.9%20UNION%20ALL%20SELECT%200x31303235343830303 536
закрыто (int)

Кот ДаWINчи 13.03.2010 23:20

Цитата:

Сообщение от mozilla (Сообщение 1865)
Баг: если на аккаунте уже есть дк, то туда никого больше не перенести.

Это в августе-октябре горячо обсуждалось на старом форуме. К общему мнению тогда не пришли, но решили, что "рассадник" ДК путем переноса делать нельзя.

mozilla 14.03.2010 16:16

С ним теперь ни одна функция чаредита не работает. Выбираешь действие, нажимаешь выполнить и выскакивает пустая страница.

Кот ДаWINчи 14.03.2010 19:26

Цитата:

Сообщение от mozilla (Сообщение 2014)
С ним теперь ни одна функция чаредита не работает. Выбираешь действие, нажимаешь выполнить и выскакивает пустая страница.

Не стоило вчера работать за компом до полтретьего ночи.:blush2::lazy3:

Пока разбирался с ДК... потер вчера пару скобок. Сегодня взял версию с СВН и нормально внес правку.

Коммит 14 уже залит.

FWS 16.03.2010 19:57

Спасибо за заботу о кодировках, теперь все работает как надо :)

Но возник еще вопрос. В управлении учетной записью отсутствует возможность смены адреса электронной почты. В конфиге нет никаких параметров для данной функции. Это ошибка или временная мера?

Кот ДаWINчи 16.03.2010 21:49

это моя переделка "под себя".

файл modules/acc.php строчки 48 и 49 должны быть такими:

Код:

    <td height="40" align="center" valign="middle"><input name=id type=radio value='2' /></td>
    <td height="40" valign="middle"><?php echo $txt[7]; ?></td>


Kujbor 17.03.2010 10:21

Цитата:

Сообщение от Кот ДаWINчи (Сообщение 2309)
это моя переделка "под себя".

файл modules/acc.php строчки 48 и 49 должны быть такими:

Код:

    <td height="40" align="center" valign="middle"><input name=id type=radio value='2' /></td>
    <td height="40" valign="middle"><?php echo $txt[7]; ?></td>


Не могли бы вы оформить это в виде патча? Наподобие:

PHP код:

---<?php if ($ra_email == '')  echo "<input name=id type=radio value='2' >";
+++<?
php if ($ra_email == '') echo "<img src='images/no.png' align='absmiddle'>";

Чтобы было понятно что менять, а то боюсь запутаться в строках и заменить не то что нужно)))

И еще одно.. При попытке залогиниться получил следующую ошибку:

Цитата:

Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at Z:\home\192.168.0.100\www\include\config.php:1) in Z:\home\192.168.0.100\www\include\auth.php on line 9

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at Z:\home\192.168.0.100\www\include\config.php:1) in Z:\home\192.168.0.100\www\include\auth.php on line 9

Warning: Cannot modify header information - headers already sent by (output started at Z:\home\192.168.0.100\www\include\config.php:1) in Z:\home\192.168.0.100\www\include\auth.php on line 18
Интуитивно с включением некоторого количества памяти думаю что проблема в отсутствии/отключенности какого-то модуля в пхп, вот только какого совсем не помню.. А может и не в этом дело.. Помогите пожалуйста.


Текущее время: 21:23. Часовой пояс GMT +3.

ru-mangos.ru - Русское сообщество MaNGOS