Guest werstey Posted March 7, 2015 Report Share Posted March 7, 2015 Всем привет. Я довольно часто использую cms доски объявлений joker board, и знаю несколько дыр. Я расскажу их вам, а если знаете что то Вы, дополните меня. 1. Самая популярная: sql inj через файл export.php Лечения не знаю (кроме того как удалить этот файл) Кто знает, поделитесь 2. Все файлы в папке (А) общедоступны, т.е. каждый может управлять некоторыми функциями в админке не проходя авторизацию (пример - сайт.ру/a/drop_expired.php и неактуальные объявления удалены ). Лечение: 1 способ, добавить в самом верху файла запрос на авторизацию 2 способ, переименовать их. 3 способ, удалить их (только если Вы не нуждаетесь в этих функциях) BlackMaN333 1 Quote Link to post Share on other sites
LetSevI 322 Posted March 7, 2015 Report Share Posted March 7, 2015 1. Фильтровать данных, поступающие от пользователя Quote Link to post Share on other sites
Guest werstey Posted March 7, 2015 Report Share Posted March 7, 2015 1. Фильтровать данных, поступающие от пользователя Если даете ответ, давайте конкретно! Это тоже самое, если бы я у вас спросил "как раскрутить сайт" Вы бы мне ответили "нужно привлечь больше пользователей" BlackMaN333 and sairon 2 Quote Link to post Share on other sites
LetSevI 322 Posted March 7, 2015 Report Share Posted March 7, 2015 Достаточно конкретный ответ. Но если хотите подробней, то несколько вариантов: - Если передается заведомо целочисленный параметр, то и типизировать его как таковой $id = (int)$_GET['id']; То же самое с логическими и числами с плавающей запятой. - Строковые данные заключать в кавычки - Использование placeholder'ов $stmt = $dbh->prepare("SELECT * FROM REGISTRY where name LIKE ?"); $stmt->execute(array("%$_GET[name]%")); $data = $stmt->fetchAll(); - Использование библиотек, в которых встроена защита от SQL Injection, к примеру IdiORM(рекомендую), либо SafeMySQL. serjin, BlackMaN333 and campusboy 3 Quote Link to post Share on other sites
Модератор files 2798 Posted March 7, 2015 Модератор Report Share Posted March 7, 2015 1) Вместо строк: $number=$_GET['n']; $cat=$_GET['c']; $city=$_GET['r']; пишем: $number=$_GET['n']; if (!preg_match("|^[\d]+$|", $number)){exit ("неверный формат запроса");} $cat=$_GET['c']; if (!preg_match("|^[\d]+$|", $cat)){exit ("неверный формат запроса");} $city=$_GET['r']; if (!preg_match("|^[\d]+$|", $city)) {exit ("неверный формат запроса");} 2) Можно поставить дополнительную авторизацию (вверху файлов добавляем): $phpkd['username'] = "admin"; $phpkd['password'] = "password"; $index['public'] = $index['public']; if(!$index['public']){ if($_SERVER['PHP_AUTH_USER'] != $phpkd['username'] || $_SERVER['PHP_AUTH_PW'] != $phpkd['password']){ Header("WWW-Authenticate: Basic realm=\"Highly Secured\""); Header("HTTP/1.0 401 Unauthorized");echo "<head><title>Unauthorized</title></head><body bgcolor='#000000'><center><br> <a href=\"../index.php\" style=\"text-decoration: none\" target=\"_blank\"> <font face=\"MS Sans Serif\" color=\"#FFFFFF\" size=\"8\"><b><br>Enter Here Only<br></b></a></body></html>";exit;}} BlackMaN333, campusboy and serjin 3 Quote Link to post Share on other sites
Darza58 0 Posted August 10, 2015 Report Share Posted August 10, 2015 Всем привет. Я довольно часто использую cms доски объявлений joker board, и знаю несколько дыр. Я расскажу их вам, а если знаете что то Вы, дополните меня. 1. Самая популярная: sql inj через файл export.php Лечения не знаю (кроме того как удалить этот файл) Кто знает, поделитесь 2. Все файлы в папке (А) общедоступны, т.е. каждый может управлять некоторыми функциями в админке не проходя авторизацию (пример - сайт.ру/a/drop_expired.php и неактуальные объявления удалены ). Лечение: 1 способ, добавить в самом верху файла запрос на авторизацию 2 способ, переименовать их. 3 способ, удалить их (только если Вы не нуждаетесь в этих функциях) Простой способ в решении задачи) В папке /a/ есть файл .htaccess В нем разрешаем доступ к данной папке только со своего IP адреса Quote Link to post Share on other sites
rafonets 508 Posted August 13, 2015 Report Share Posted August 13, 2015 1) Вместо строк: $number=$_GET['n']; $cat=$_GET['c']; $city=$_GET['r']; пишем: $number=$_GET['n']; if (!preg_match("|^[\d]+$|", $number)){exit ("неверный формат запроса");} $cat=$_GET['c']; if (!preg_match("|^[\d]+$|", $cat)){exit ("неверный формат запроса");} $city=$_GET['r']; if (!preg_match("|^[\d]+$|", $city)) {exit ("неверный формат запроса");} Каждому свое... но (как я понял с CMS не работал): $number = intval( $_GET['n'] ); $cat = intval( $_GET['c'] ); $city = intval( $_GET['r'] ); if( $number < 1 || $cat < 1 || $city < 1 ){ exit('Неверные входные параметры') } Как-то так, прегматчить слишком затратно)) Особенно если таких штук 1000 по всему CMS раскидано, сайт посещаем и хостинг Lite какой-нить... (сугубо мое мнение, оно может не совпадать с реальностью). campusboy 1 Quote Link to post Share on other sites
Александр74 26 Posted August 21, 2015 Report Share Posted August 21, 2015 А мне интересно а у разработчика этого скрипта на форум автор топика был? или у вас не офф скрипт? А так все дыры закрыты на форуме разработчика не одна тема была про это. Quote Link to post Share on other sites
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.