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чи 06.03.2012 04:20

Цитата:

Сообщение от KiriX (Сообщение 26532)
Смена расы и класса, я уж думал самому что-ли наваять в твой же кабинет, благо, там ничего особо сложного =)
Так что спасибо, уберёг от лишних телодвижений =)

там сделано по методу смены имени и внешности. Устанавливается нужный флаг в `at_login`

Вот так:
Код:

        $res = mysql_query("update `characters` set `at_login` = `at_login` | 64, `money` = `money` - "
                    . $PayMoney . " where `guid` = " . (int) $_POST['character']);


KiriX 06.03.2012 08:09


Кот ДаWINчи 29.03.2012 13:43

Спасибо пользователям, что иногда, очень редко, но тыкают меня в старые, забытые мной и богом, модули.
Сегодня подсказали дыру в modules/static.php
Как всегда, я старый маразматик, в этом на первый взгляд безобидном модуле забыл проверить $_GET на вшивость.
Вот новый вариант модуля. Всего-то надо вставить 2 раза (int) и дырка прикрыта.
Код:

<?php

if (isset($_GET['id']) and ((int)$_GET['id'] > 0))
    {
    $k_connect = mysql_connect($k_ip, $k_userdb, $k_pw);
    mysql_select_db($k_db, $k_connect);
    mysql_query("SET NAMES 'utf8'");
    $res = mysql_query("SELECT * FROM `static` where `id` = " . (int)$_GET['id'] . " limit 1");
    if (mysql_num_rows($res) > 0)
        {
        $nres = mysql_fetch_array($res);
        echo '<table width="90%" border="0" cellspacing="0" cellpadding="5">';
        echo '<tr><td align="left" class="NewsLogo">';
        if ($nres['type'] == 2)
            echo '<img src="images/no.png" align="absmiddle">';
        elseif ($nres['type'] == 1)
            echo '<img src="images/yes.png" align="absmiddle">';
        else
            echo '<img src="images/admin.png" align="absmiddle">';
        echo '</td>';
        echo '<td align="left" class="';
        if ($nres['type'] == 2)
            echo 'NewsTitleGM';
        elseif ($nres['type'] == 1)
            echo 'NewsTitlePlayer';
        else
            echo 'NewsTitleAll';
        echo '">' . $nres['title'] . '&nbsp;</td>';
        echo '<td align="right" class="NewsDate">' . $nres['date'] . '</td>';
        echo '</tr>';
        echo '<tr><td colspan=3 class="NewsContent">' . $nres['text'] . '</td></tr>';
        echo '</table>';
        }
    else
        echo $txt['234'];
    }
else
    {
    echo $txt['234'];
}
?>

извините меня, старого маразматика, за сию чудную дыру... (видать пора на пенсию).

И огромное спасибо что подсказали.

KiriX 29.03.2012 15:31

Хм... Зачем два раза? =) Вроде, одного достаточно, ведь проверка в первом условии:
((int)$_GET['id'] > 0)
может и не пройти, если там что-то не так будет.
Если я юзаю $_GET - всегда в функциях есть минипроверочка данной переменной:
PHP код:

function quote_smart(&$value)
{
    
// если magic_quotes_gpc включена - используем stripslashes
    
if (get_magic_quotes_gpc()) {
        
$value stripslashes($value);
    }
    
// Если переменная - число, то экранировать её не нужно
    // если нет - то окружем её кавычками, и экранируем
    
if (!is_numeric($value)) {
        
$value "'" mysql_real_escape_string($value) . "'";
    }
    return 
$value;


И так проверяем любую переменную, приходящую по $_GET

Кот ДаWINчи 29.03.2012 16:17

KiriX, ты и прав, и не прав одновременно. В общем плане - ПРАВ. А В конкретно данном случае - нет. т.к. здесь по $_GET должно (но не обязано ;) ) приходить ЦЕЛОЕ ЧИСЛО. а значит самым быстрым, простым и эффективным способом проверить поступившие данные - это банальное преобразование к целому.

а два раз вот зачем. Допустим вместо "4" приходит строка "4 or ....... и тут инъекция"
в сравнении if некоторые версии пхп вернут 0 (и проблем нет), а некоторые 4 ....
но сама переменная $_GET['id'] останется с инъекцией ;)


ps: Не забывайте, что АСР - это очень бородатый проект 2009 года. Это по сути мой первый проект, где я всё писал сам (почти не подглядывал у других, за исключением мелочей). И с высоты прошедшего времени, я скажу так. "Там много чего написано по-дилетантски ... сейчас я бы написал совершенно по другому"

ps2:
Скрытый текст (вы должны войти под своим логином или зарегистрироваться и иметь 30 сообщение(ий)):
У вас нет прав чтобы видеть скрытый текст, содержащейся здесь.

Evgeniy 29.03.2012 16:32

Код:

if (isset($_GET['id']) and is_numeric($_GET['id']) and ((int)$_GET['id'] > 0 ))
что бы точно было только число.

KiriX 29.03.2012 20:28

Кот ДаWINчи, спасибо, вот про сравнение-то мне и было интересно услышать =)
Ну и функция проверки всё-таки не лишней будет =)

P.S: Проект твой весьма неплох, лёгок очень, прост, удобен и достаточно функционален. =) Но вот чего ему не хватает, так это скриптов и аякса, в некоторые места он так и просится =)

Кот ДаWINчи 02.04.2012 14:02

Вложений: 1
доработал модуль events.php .... а то 1 апреля как-то понедельником стало. :blush::blush::blush:

Кот ДаWINчи 09.04.2012 13:08

Вложений: 1
Добрый день. После выходных, во время которых я просмотрел и проанализировал большую часть проекта, родилась куча бесценных мыслей. По сему, перед тем как их начать воплощать, я решил "зарелизить" текущее положение вещей.

И так ... Внеплановая рева проекта: 2.33.
Это обновление содержит совсем немного доработок. А именно:
1. коррекцию modules/static.php (из поста выше)
2. доработку modules/events.php (из поста выше)
3. шкурку АСР (ее я использовал при разработке предыдущей ревы, но забыл включить)

На вопрос "зачем нужна эта версия?" отвечу так: Это логический конец АСР-2. Далее что-то делать не изменив основы движка не вижу ни малейшей перспективы. Вот по этому и ставлю эту точку в конце абзаца. Теперь берусь за модернизацию и нововведения.

Главное что я собираюсь сделать - это ввести классы в движок. И начну с класса по работе с базой данных и класса аккаунта. Для этого мне придется внести изменения практически во все пхп-файлы проекта. в 2.34 будет всё тоже самое, но через новый способ подключения к базе данных. и так ... ждите mysqli и класс доступа к данным.

Кот ДаWINчи 09.04.2012 13:16

Вложений: 1
Точнее класс то вот он! уже давно написан. Теперь его надо протестировать и вставить в проект. :secret::blush:

KiriX 09.04.2012 15:05

Хорошее начинание перейти на классы =)
После первого же моего опыта работы с ними я не понял, как я делал что-то без них раньше =)
Класс ДБ - зачем??? Чем не устраивает библиотека DBSimple? Ведь в неё уже по умолчанию залито множество защит от инъекций. Элементарных, конечно, но всё же сразу чутка безопаснее =)

Кот ДаWINчи 09.04.2012 19:05

Цитата:

Но меня всегда смущает вопрос, а оно надо??? Может и вправду mysql за глаза и за уши???
Я просто думаю о будущем. Не за горами пхп 6.0! а в нем mysql будет депрекадет. ;)
Вот я заранее и перестраиваюсь. А то потом такой комок проблем навалит, что придется в срочном порядке проводить тонну работы. а я этого не хочу.

hyperion 09.04.2012 19:24

юзай PDO

Кот ДаWINчи 09.04.2012 20:32

Цитата:

Сообщение от hyperion (Сообщение 26889)
юзай PDO

Что последний пост прочел по диагонали и отвечаешь? Извини, но мы тут обсуждали mysqli, если не заметил. Так вот, я для своей работы уже выбрал mysqli. И даже класс для работы с ним написал. Переубедить меня в сторону ПДО - дохлый номер. А те кто хотят познать в чем разница - милости прошу на официальный сайт.

Тема по выбору АПИ закрыта.

KiriX 10.04.2012 07:54

Цитата:

Сообщение от Кот ДаWINчи (Сообщение 26888)
Я просто думаю о будущем. Не за горами пхп 6.0! а в нем mysql будет депрекадет. ;)
Вот я заранее и перестраиваюсь. А то потом такой комок проблем навалит, что придется в срочном порядке проводить тонну работы. а я этого не хочу.

Ну что всё-таки mysqli я точно понял =) Но меня особо радует, что ты решил пересесть на классы =)
Можно пожелание на будущее? =) Больше javascript и ajax ;)

ObeDve 11.04.2012 17:26

Присоединяюсь к пожеланиям, хоть и не пользуюсь системой (так как нет поддержки 2.4.3), но было бы куда удобней если бы были официальные обновления в виде патчей отдельных а не сразу всем сайтом по 5 мб. А так же вносить изминения и поддерживать актуальность в первом посте (cейчас там например ссылка на 32 реву).

StinK 11.04.2012 19:10

Кстати да. Давно бы уже пора на Git переехать :)

hyperion 12.04.2012 17:46

Продолжу холивар.
API supports client-side Prepared Statements No Yes
Одна эта возможность перекрывает плюсы mysqli, т.к. можно забыть про инъекции

Кот ДаWINчи 12.04.2012 19:51

холивара не будет. Я не склонен, как школоло, "меряться письками". Если кто не понял смысл постов №289 и 290, то суть такая: ВСЯ работа с базой будет реализована через один единственный класс. Кто хочет, тот переписывает его под mysql, pdo или еще что там, вплоть до mssql и oracle. ... и ваш сайт будет работать так, как вам это надо. так что главная задача отделения мух от котлет будет выполнена. а остальное - это уже ваша необходимость или "хотелка".

hyperion 13.04.2012 02:51

Вы видимо не поняли то, что я хотел сказать. PDO это уже готовый класс для работы с бд, и там не важно какой драйвер, хоть mysql, postger, sqlite и т.д и т.п. То есть вы по сути пишете тот же пдо для mysql поверх mysqli, вопрос, зачем? Производительность голого PDO сравнима с mysqli, но все, что в прилепленном вами класе уже реализовано в PDO.
Рассмотрим PDO::query(), это голый запрос. Возвращает обьект запроса или ложь в случае ошибки. Желаете узнать текст ошибки? Пожалуйста, PDO::errorInfo. Ну а если желаете узнать к-во колонок или строчек, PDOStatement::columnCount или PDOStatement::rowCount. Зачем изобретать велосипед? тем более что что mysqli это библиотека для доступа к скулю, а чистый PDO это уровень абстракции.

Кот ДаWINчи 13.04.2012 12:42

Еще раз перечитал кучу статей в инете про mysqli и pdo ... Разобрал кучу примеров. Много думал. Но Убеждение относительно АСР осталось прежним. В этом проекте останется всё так как я задумал. (Если он еще кому-нибудь нужен.) А вот в новых проектах буду уже решать что использовать.
Наткнулся на хорошее мнение:

Цитата:

большой проект - работай с PDO в любом случае большие проекты оптимизируются и ускоряются совершенно другими методами 6% для них не выигрыш
малый проект работай с MySQLi
И полностью с этим согласен.

и еще... Где-то ранее читал, но сегодня подтверждения не нашел. Но мысль была такая: разработчики PHP в 6-й версии делают ставку на развитие именно MySQLi, а не PDO. Что скоро по своему функционалу MySQLi сравняется и даже обгонит PDO. ... Но увы сегодня подтверждения этой мысли не нашел. Может за эти месяцы что поменялось в умах разработчиков? или та статейка была фейком? :sorry::pardon:

Кот ДаWINчи 21.03.2013 19:44

Привет всем. Давно не писал о проекте. Дела в нем топчутся на одном месте. Ибо времени на него после работы, халтуры и семейной жизни не остается ни сколько.

Наработки есть. Но мало. Думаю, что 34 рева будет, и будет к лету. отпишусь здесь и в своем блоге.

Хотел еще добавить, что раз я всё же сел за проект, то готов выслушать ваши "хотелки" ... вдруг какие из них реализую. ;)


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

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