#sql-injection #security
#sql-внедрение #Безопасность
Вопрос:
Я создаю очень маленький веб-сайт (с PHP), и у меня есть 2 большие проблемы, первая из которых связана с моей формой поиска. Я создал действительно простую форму поиска, чтобы получить мой контент, затем я использовал онлайн-инструмент безопасности и показал мне, что моя форма поиска уязвима для SQLi. Я понятия не имел об этом, поэтому я начал тестировать некоторые атаки, которые я нашел на некоторых сайтах, Пока только 'OR 'x'='x
работал (он возвращает все содержимое моего веб-сайта, это плохо? Как злоумышленник может причинить мне вред? Вторая проблема касается моих фотографий, я использую папку под названием mywebsite.com/uploads / для доступа к моим фотографиям, хотя / upload защищен, подпапки uploads / temp и uploads / thumbs видны через браузер, может ли это быть вредным? Любой совет?
Ответ №1:
Внедрение SQL действительно плохо, но мне это нравится 🙂
существует много типов SQL-инъекций, таких как
удаленный SQL-инъекционный
слепой SQL-инъекционный
автоматический обход sql-инъекции
**Remote sql injection**
это простой способ получить данные от хакера сайта, использующего его как программисты
смотрите этот пример
mysql_query("SELECT * FROM `table_name` WHERE id=".$_GET['id']." ) ;
В моем коде нет безопасности
site.php?id=1
мой запрос будет выполняться как
mysql_query("SELECT * FROM `table_name` WHERE id=1 ) ;
если хакер, он уничтожит ваш код
site.php?id=1(любая вещь здесь может создать проблему, например: ` ‘ a-z A-Z / * / » )
Потому что запрос будет таким
mysql_query("SELECT * FROM `table_name` WHERE id=1' ) ;
таким образом, одинарная кавычка приведет к ошибке в вашем запросе
и хакер может атаковать подобным образом
site.php?id=1 union select 0,1,concat(user_name,0x3a,password),3,4 from users
здесь ваш запрос будет выполняться как
mysql_query("SELECT * FROM `table_name` WHERE id=1 union select 0,1,concat(user_name,0x3a,password),3,4 from users) ");
и это сработает 🙂
слепое внедрение SQL
хакер не может работать с easy way remote sql injection
потому что здесь это зависит от правильного и ложного
поэтому он будет использовать and
or
вот так
and (select user_name from users) ;
если все работает нормально, скрипт будет работать хорошо, иначе произойдет ошибка
он может знать информацию о базе данных, подобную этой
примером таблицы администратора является admin
and (select user_name from users) ; x error
and (select user_name from admin) ; fine
автоматический обход
его sql-инъекция blicd, но только истинное условие может получить доступ к администратору
mysql_query("SELECT * FROM `users` WHERE `user_name`= ".$_POST['user']." AND `password` ='".md5($_POST['pass'])."' ");
хакер может войти в систему следующим образом
пользователь = что угодно’ или 1= 1 —
таким образом, ваш запрос будет выглядеть
mysql_query("SELECT * FROM `users` WHERE `user_name`= anything or 1=1 --");
что-либо является ошибкой пользователя в базе данных
но условие или 1 = 1 верно
— будет игнорировать вашу проверку пароля
он может легко получить доступ
защита
addslashes _ mysql_real_escape_string _ intval ( with number only )
предварительное удаление папок, которые вы можете использовать
пусто index.html , index.php ,
Ответ №2:
Если вы разрешите внедрение SQL, злоумышленник может сделать все виды плохих вещей на вашем веб-сайте. Они могут вводить код для УДАЛЕНИЯ БАЗЫ ДАННЫХ, удаляя всю вашу базу данных!
Если вы входите в свой mysql как пользователь root, они потенциально могут записывать в файлы (и создавать) файлы на вашем сервере.
Внедрение;
SELECT '<?php system($_GET[''cmd'']); ?>' INTO dumpfile('./command.php');
Это был бы обычный первый шаг к проникновению на ваш сервер, позволяющий злоумышленнику выполнять произвольные команды от имени пользователя www-data. Отсюда легко подключить ваш сервер к ботнету, использовать его для рассылки спама (внесение вас в черный список за отправку электронных писем) или просто удалить все ваши файлы, чтобы испортить вам день.
Что вы должны сделать, так это очистить весь пользовательский ввод. Итак, в вашем поисковом процессоре вы должны избегать любых специальных символов из поискового запроса перед передачей его в базу данных, вы можете сделать это с помощью mysql_real_escape_string();
итак;
$search_query = mysql_real_escape_string($_POST['search']);
Затем безопасно использовать $search_query в вашем запросе mysql.
Ответ №3:
SQL-инъекции — это плохо. кто-то может выполнить любой запрос, который он хочет в вашей базе данных, найти пароли, удалить все ваши данные и т.д. вы можете избежать этого, обернув весь пользовательский ввод в свои запросы с помощью mysql_real_escape_string
что касается каталогов — это действительно зависит от предоставляемых вами прав доступа. если список файлов доступен, это на самом деле не означает, что кто-то может вносить изменения / выполнять их
Ответ №4:
Внедрение Ad SQL:
- Отображение всего содержимого может быть проблемой, если у вас есть неопубликованные статьи или статьи, доступные только для зарегистрированных пользователей и т.д.
- Попробуйте прочитать больше о SQL-инъекциях. Возможно, удастся выполнить второй запрос, который вставит новые данные в вашу базу данных — или, что еще хуже, изменит данные (например, пароли). Существует множество материалов для чтения, для начала может быть:http://php.net/manual/en/security.database.sql-injection.php Очистите весь свой ввод и помните: даже если вы не можете найти способ нанести вред через дыру в безопасности, это не значит, что никто не найдет способ 😉
Реклама в папках: вы имеете в виду, что любой пользователь может видеть содержимое папок? Если это так, пользователи могут видеть изображения, которые они не должны видеть. Если у вас была веская причина для защиты (нет списка файлов?) основной каталог, почему бы не применить его к подкаталогам temps / и thumbs /?