Самописная портальная система. Устанавливается за две минуты. Включает основные средства для администрирования и размещения контента. Настройка прав доступа, гибкое управление блоками и модулями. После регистрации вы становитесь пользователем с максимально возможными правами доступа. Админстраница включает модуль работы с базами данных. Анализ всех запросов системы с указанием времени каждого запроса и запроса на который система затратила максимальное время. Регулярно пишутся статьи по решению часто возникающих задач на сайте. Оставляйте свои пожелания здесь или на форуме системы. Говорите что бы хотели видеть. Главная страница проекта http://mpak.su
mpak http://mpak.su/?m[pages]&pid=-1 Warning: Invalid argument supplied for foreach() in /srv/www/vhosts/mpak.cms/include/mpfunc.php(46) : runtime-created function on line 37 Warning: strtr() [function.strtr]: The second argument is not an array in /srv/www/vhosts/mpak.cms/include/mpfunc.php(46) : runtime-created function on line 39 Короче, работать и ещё раз работать.
Ошибка была связана с тем что данной страницы нет на сайте. Если не ставить заведомо битые ссылки на сайт то и пользователь в них попадать не будет. Входящее значение уникального номера страницы в коде перед запросом к базе данных приводится к интовому значению. Инекция исключена. Не вижу особой проблемы в этой ошибке. Но всетаки устранил вывод ошибок жестко приведя типы данных к нужным. Чтобы в админку попасть нужно зарегать себе копию. Зайти в какий нибудь не существующий домен http://чтонибудь.mpak.ru либо настроить ДНС сервера одного из своих доменов третьего уровня на ип адрес 81.177.32.154. При входе по этому адресу в первый раз увидите форму регистрации сайта. В ней нужно ввести логин и пароль администратора и дождаться окончания установки. Через минуту с вашим логином и паролем можно зайти на ваш сайт. Я вижу свой продукт как быстрое решение для мелких сайтов. Регистрация минуту. Размещение в визуальном редакторе десятка страниц тоже не долго. Админстраница с разграничением прав доступа, анализ работы баз данных, модуль для правки дизайна, модуль для хранения файлов, настройка поиска по сайту. Со временем планирую решения по частым задачам выкладывать на главной странице. В большинстве случаев для среднего проекта этого должно хватить. Есть возможность посмотреть структуру базы данных зайдя админом в Управление=>АнализСКЛ=>Запрос список таблиц SHOW TABLES; структуру DESC TABLE;
Зачем проверять что то? Чем плох вариант привести то что пришло от пользователя к интовому значению а то что получилось использовать в запросе к базе данных? Без каких то дополнительных проверок. Быстро и просто. $sql = "SELECT страница WHERE id=".(int)$_GET['pid']; В таком случае возможна ситуация что такой странице нет поэтому и приводим полученный массив со страницей к нужному типу. Я бы так и этого не делал. Если пользователь получит ошибку на несуществующей странице не страшно. А та на которой выводилась ошибка как раз к таким и относится. Страницы с отрицательным ид не может быть. Какого плана проверку вы предлагаете делать?
Не айс. ИМХО вот айс: PHP: public static function id_exists($id = NULL) { self::up_localization(); $ERROR = ERROR::getinstance(); $DB = DB::getinstance(); if(!ctype_digit($id)) { $ERROR->set(self::$lang['id_exists']['empty']); return false; } $result = $DB->query("SELECT * FROM `{prefix}tbl` WHERE `id` = ".$id); if(!$DB->num_rows($result)) { $ERROR->set(self::$lang['id_exists']['not_exists']); return false; } return $DB->fetch_assoc($result); }
Я же написал - не айс. Ты же не выводишь ошибки, а по идее это надо делать, мол так и так "записи в бд не существует".
хрень, переписывать всё http://mpak.su/pages/pid:11?m[search] login <H1>12 pass 123 sql injection Код (Text): INSERT INTO mp_sess_post (sid, url, time, method, post) VALUE (79325, '&m[forum]&vid=022'+AND+1='1', 1255969232, 'POST', 'a:4:{s:6:"$_POST";a:2:{s:4:"text";s:4:"7566";s:4:"pass";s:6:"nopass";}s:5:"$_GET";a:2:{s:1:"m";a:1:{s:5:"forum";s:0:"";}s:3:"vid";s:15:"022\' AND 1=\'1";}s:7:"$_FILES";a:0:{}s:8:"$_SERVER";a:34:{s:15:"HTTP_USER_AGENT";s:47:"Opera/9.62 (Windows NT 5.1; U; ru) Presto/2.1.1";s:9:"HTTP_HOST";s:7:"mpak.su";s:11:"HTTP_ACCEPT";s:117:"text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1";s:20:"HTTP_ACCEPT_LANGUAGE";s:23:"ru-RU,ru;q=0.9,en;q=0.8";s:19:"HTTP_ACCEPT_CHARSET";s:34:"iso-8859-1, utf-8, utf-16, *;q=0.1";s:20:"HTTP_ACCEPT_ENCODING";s:38:"deflate, gzip, x-gzip, identity, *;q=0";s:12:"HTTP_REFERER";s:42:"http://mpak.su/?m[forum]&vid=022'+AND+1='1";s:11:"HTTP_COOKIE";s:40:"mp_sess=0131cf7a9281f1b3259006f656a0ce28";s:12:"HTTP_COOKIE2";s:10:"$Version=1";s:15:"HTTP_CONNECTION";s:14:"Keep-Alive, TE";s:7:"HTTP_TE";s:42:"deflate, gzip, chunked, identity, trailers";s:14:"CONTENT_LENGTH";s:1:"9";s:12:"CONTENT_TYPE";s:33:"application/x-www-form-urlencoded";s:4:"PATH";s:189:"/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/sbin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/opt/bin:/usr/i486-pc-linux-gnu/gcc-bin/4.1.2:/usr/i686-pc-linux-gnu/gcc-bin/4.1.2";s:16:"SERVER_SIGNATURE";s:0:"";s:15:"SERVER_SOFTWARE";s:61:"Apache/2.2.11 (Unix) mod_ssl/2.2.11 OpenSSL/0.9.8k PHP/5.2.10";s:11:"SERVER_NAME";s:7:"mpak.su";s:11:"SERVER_ADDR";s:13:"81.177.32.154";s:11:"SERVER_PORT";s:2:"80";s:11:"REMOTE_ADDR";s:13:"62.220.33.130";s:13:"DOCUMENT_ROOT";s:25:"/srv/www/vhosts/mpak.cms/";s:12:"SERVER_ADMIN";s:17:"mpak@surguttel.ru";s:15:"SCRIPT_FILENAME";s:34:"/srv/www/vhosts/mpak.cms/index.php";s:11:"REMOTE_PORT";s:4:"3709";s:17:"GATEWAY_INTERFACE";s:7:"CGI/1.1";s:15:"SERVER_PROTOCOL";s:8:"HTTP/1.1";s:14:"REQUEST_METHOD";s:4:"POST";s:12:"QUERY_STRING";s:27:"&m[forum]&vid=022'+AND+1='1";s:11:"REQUEST_URI";s:28:"/?m[forum]&vid=022'+AND+1='1";s:11:"SCRIPT_NAME";s:10:"/index.php";s:8:"PHP_SELF";s:10:"/index.php";s:12:"REQUEST_TIME";i:1255969232;s:4:"argv";a:3:{i:0;s:18:"&m[forum]&vid=022'";i:1;s:3:"AND";i:2;s:4:"1='1";}s:4:"argc";i:3;}}') You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'AND+1='1', 1255969232, 'POST', 'a:4:{s:6:"$_POST";a:2:{s:4:"text";s:4:"7566";s:4' at line 1
В данном случае ты достал кукису своею и имя таблицы с логами. Есть ошибка в одной строчке зачем все переписывать? Ошибка здесь Код (Text): if($conf['settings']['del_sess']){ $func = create_function('&$val, $key','$val = strtr(stripslashes($val), array("\\\\"=>"\", \'"\'=>""", "\'"=>"'"));'); array_walk ($get = $_GET, $func); $post = $_POST; $post['pass'] = 'nopass'; array_walk ($post, $func); array_walk ($files = $_FILES, $func); array_walk ($server = $_SERVER, $func); $request = serialize(array('$_POST'=>$post, '$_GET'=>$get, '$_FILES'=>$files, '$_SERVER'=>$server)); } mysql_query("INSERT INTO {$conf['db']['prefix']}sess_post (sid, url, time, method, post) VALUE ({$sess[0]['id']}, '{$_SERVER['QUERY_STRING']}', ".time().", '{$_SERVER['REQUEST_METHOD']}', '$request')", 'Ложим данные в лог'); Данные для лога. Неудачно получился кусок кода.
Не стоит лечить голову если болит жопа. Все модульно. Не вижу нужны переписывать чести не связанные с данной ошибкой. А кусок следует переписать. Только чет не могу найти поход к проблеме. Может кто подскажет решение? Кто как с инъекциями борется?
Без наездов пожалуйста. Встретил в интернете реализацию перевода интернациональных доменов. http://mpak.su/pages/pid:16
Ссылка по которой я это нашел тоже очень прикольная. Смешной все таки этот и ICANN http://пример.испытание/Алгоритм_преобразования_интернационального_домена. Было бы не плохо форум научить таким ссылкам. Скоро они сильно потеснят пендосовские.
сомневаюсь. Кириллические домены уже ведены хер знает сколько. И много ли сайтов на них? Кремль.ру? С введением таких доменов фишинг наберет новые обороты