Статьи

Как выбирать веб-разработчика

Критерии выбора веб-разработчика (результаты опроса клиентов) / «Рейтинг Рунета»

сайт интерент разработка 

Современный веб-сайт - в борьбе за клиента

Борьба за клиента является основной движущей силой бизнеса вообще и интернет технологий в частности. Смещение тренда деловой активности в сторону интернет у нас в стране особенно ярко было выражено в период 2005-2010г, отчасти этому способствовал кризис 2008г. Относительно низкая стоимость вложений и огромная аудитория — два фактора, которые подвигли бизнесменов на открытие своих интернет-представительств и торговых сайтов. Огромный спрос на интернет технологии, в свою очередь, значительно продвинул в развитии и саму отрасль. Выросло количество веб-студий и фрилансеров. Однако технический и графический уровень интернет ресурсов какое-то время в подавляющем большинстве оставался на уровне простеньких сайтов, дающих клиенту минимум информации. И только в последнее время количество наконец стало влиять на качество.

веб-сайт создание сайта продвижение сайта уникальный контент функционал сайта 

Как выбрать CMS (систему управления контентом)

Во все времена информация ценилась очень высоко. Современный ритм жизни и бизнеса накладывает свой отпечаток на все средства как получения, так и предоставления информации. От того насколько быстро и полно можно найти информацию – зависит и успех в бизнесе и решение житейских забот. Интернет дал миру богатые возможности для предоставления информации. Но краеугольным камнем в настоящий момент является скорость и удобство обработки информации – насколько быстро и корректно можно разместить актуальную информацию в сети Интернет. Современные технологии создания и обслуживания веб-сайтов предлагают разработчикам, управляющим и пользователям сайтов огромный выбор готовых к использованию систем. Большинство систем управления контентом (CMS) универсальны, но у многих есть свое основное назначение, свои плюсы и минусы. Помочь разобраться в этом – цель данной статьи.

управление контентом CMS веб-сайт интернет 

Архив "Статьи"

Основная цель веб-сайта — донести до пользователя информацию и оставить благоприятное впечатление. Хороший сайт — удобен, легок, эстетичен и предоставляет всю необходимую информацию по своей тематике. Поэтому у хорошего веб-сайта должен быть хороший дизайн, хорошая навигация, современные технологии web и хорошая структура информации. подробнее...




Партнеры

ВЕБ-бюро Синий Муравей ISPServer надежный хостинг Участник проекта CMS Magazine

Метки

CMS  CSS  cтили  DDOS  DLP  freelance  Google  html  html5  JavaScript  photoshop  reset  robot.txt  schema.org  seo  SQL инъекция  VLAN  VPN  Windows 2003  аудит  базы данных  безопасность  бизнес  биржи  блоги  ботнет  броузер  веб-сайт  веб-сайты  вебмастеру  вебсайт  вёрстка  взлом  деньги  дизайн  заработок  заражение  защита  зомби-сеть  интерент  интернет  карты  киберпреступность  ключевые слова  конверсия  контекст  контекстная  контент  корпоративный  креатив  маркетинг  менеджер  микроформаты  мобильный сайт  монетизация  облако  оптимизация  оптимизация сайта  оптимизация сайтов  поведенческий фактор  поиск  Поисковая оптимизация  поисковики  поисковое продвижение  поисковые системы  провайдеры  программирование  продвижение  продвижение сайта  проект  промоушн  работа  разработка  раскрутка  рейтинг  реклама  сайт  сайты  саппорт  секция  сервер  слои  служба поддержки  создание  создание сайта  ссылки  статья  стили  схемы  удаленный доступ  уникальный контент  управление контентом  фриланс  функционал сайта  хороший сайт  хостинг  центрирование  Яндекс 

SQL инъекция

Статьи Безопасность

(оригинал — Википедия)

Инъекция SQL (англ. SQL injection — «SQL-вторжение») — один из распространённых способов взлома сайтов и программ, работающих с базами данных, основанный на внедрении в запрос произвольного SQL-кода.
Инъекция SQL, в зависимости от типа используемой СУБД и условий инъекции, может дать возможность атакующему выполнить произвольный запрос к базе данных (например, прочитать содержимое любых таблиц, удалить, изменить или добавить данные) , получить возможность чтения и/или записи локальных файлов и выполнения произвольных команд на атакуемом сервере.
Атака типа инъекции SQL может быть возможна из-за некорректной обработки входящих данных, используемых в SQL-запросах.

Разработчик прикладных программ, работающих с базами данных, должен знать о таких уязвимостях и принимать меры противодействия инъекции SQL.

Принцип атаки инъекции SQL

Допустим, серверное ПО, получив входной параметр id, использует его для создания SQL-запроса. Рассмотрим следующий PHP-скрипт:


$id = $_REQUEST['id'];
$res = mysql_query ( «SELECT * FROM news WHERE id_news = $id») ;

Если на сервер передан параметр id, равный 5 (например так: http://example.org/script.php?id=5

 
) , то выполнится следующий SQL-запрос:

SELECT * FROM news WHERE id_news = 5

Но если злоумышленник передаст в качестве параметра id строку -1 OR 1=1 (например, так: http://example.org/script.php?id=-1 + OR + 1=1

 
) , то выполнится запрос:

SELECT * FROM news WHERE id_news = -1 OR 1=1

Таким образом, изменение входных параметров путём добавления в них конструкций языка SQL вызывает изменение в логике выполнения SQL-запроса данном примере вместо новости с заданным идентификатором будут выбраны все имеющиеся в базе новости, поскольку выражение 1=1 всегда истинно).

Внедрение в строковые параметры

Предположим, серверное ПО, получив запрос на поиск данных в новостях параметром search_text, использует его в следующем SQL-запросе (здесь параметры экранируются кавычками):


$search_text = $_REQUEST['search_text'];
$res = mysql_query ( «SELECT id_news, news_date, news_caption, news_text, news_id_author
FROM news WHERE news_caption = LIKE (
' %$search_text %') ») ;

Сделав запрос вида http://example.org/script.php?search_text=Test

 
мы получим выполнение следующего SQL-запроса:

SELECT id_news, news_date, news_caption, news_text, news_id_author FROM news WHERE news_caption = LIKE  (' %Test %') 

Но, внедрив в параметр search_text символ кавычки (который используется в запросе) , мы можем кардинально изменить поведение SQL-запроса. Например, передав в качестве параметра search_text значение ') + and +  (news_id_author='1, мы вызовем к выполнению запрос:

SELECT id_news, news_date, news_caption, news_text, news_id_author FROM news 
WHERE news_caption = LIKE (' %') AND (news_id_author='1%')

Использование UNION

Язык SQL позволяет объединять результаты нескольких запросов при помощи оператора UNION

 

. Это предоставляет злоумышленнику возможность получить несанкционированный доступ к данным.

Рассмотрим скрипт отображения новости (идентификатор новости, которую необходимо отобразить, передается в параметре id):

$res = mysql_query  (  «SELECT id_news, header, body, author FROM news WHERE id_news =  «. $_REQUEST['id']) ;

Если злоумышленник передаст в качестве параметра id конструкцию -1 UNION SELECT 1,username,password,1 FROM admin, это вызовет выполнение SQL-запроса

SELECT id_news, header, body, author FROM news WHERE id_news = -1 UNION SELECT 1,username,password,1 FROM admin

Так как новости с идентификатором -1 заведомо не существует, из таблицы news не будет выбрано ни одной записи, однако в результат попадут записи, несанкционированно отобранные из таблицы admin в результате инъекции SQL.

Экранирование хвоста запроса

Зачастую, SQL-запрос, подверженный инъекции, имеет структуру, усложняющую или препятствующую использованию union. Например скрипт

$res = mysql_query  (  „SELECT author FROM news WHERE id=  «. $_REQUEST['id'].  «AND author LIKE  ('a %') “) ;

отображает имя автора новости по передаваемому идентификатору id только при условии, что имя начинается с буквы а, и инъекция с использованием UNION затруднительна.

В таких случаях, злоумышленниками используется метод экранирования части запроса при помощи символов комментария (/* или -- в зависимости от типа СУБД).

В данном примере, злоумышленник может передать в скрипт параметр id со значением -1 UNION SELECT password FROM admin/*, выполнив таким образом запрос

SELECT author FROM news WHERE id=-1 UNION SELECT password FROM admin/* AND author LIKE  ('a %') 

в котором часть запроса (AND author LIKE ('a %') ) помечена как комментарий и не влияет на выполнение.

Расщепление SQL-запроса

Для разделения команд в языке SQL используется символ ; (точка с запятой) , внедряя этот символ в запрос, злоумышленник получает возможность выполнить несколько команд в одном запросе, однако не все диалекты SQL поддерживают такую возможность.

Например, если в параметры скрипта

$id = $_REQUEST['id'];
$res = mysql_query ( „SELECT * FROM news WHERE id_news = $id“) ;

злоумышленником передается конструкция, содержащая точку с запятой, например 12;INSERT INTO admin (username, password) VALUES ('HaCkEr', 'foo') ; то в одном запросе будут выполнены 2 команды

SELECT * FROM news WHERE id_news = 12;
INSERT INTO admin (username, password) VALUES ('HaCkEr', 'foo') ;

и в таблицу admin будет несанкционированно добавлена запись HaCkEr.

Методика атак инъекций SQL

Поиск скриптов, уязвимых для атаки

На данном этапе злоумышленником изучается поведение скриптов сервера при манипуляции входными параметрами с целью обнаружения их аномального поведения. Манипуляция происходит всеми возможными параметрами:

  • Данными передаваемыми через методы POST и GET
  • Значениями [HTTP-Cookie]
  • HTTP_REFERER (для скриптов)
  • AUTH_USER и AUTH_PASSWORD (при использовании аутентификации)

Как правило, манипуляция сводится к подстановке в параметры символа одинарной (реже двойной или обратной) кавычки.

Аномальным поведением считается любое поведение, при котором страницы, получаемые до и после подстановки кавычек, различаются при этом не выведена страница о неверном формате параметров).

Наиболее частые примеры аномального поведения:

  • выводится сообщение о различных ошибках;
  • при запросе данных (например, новости или списка продукции) запрашиваемые данные не выводятся вообще, хотя страница отображается

и т. д. Следует учитывать, что известны случаи, когда сообщения об ошибках, в силу специфики разметки страницы, не отображаются в браузере, хотя и присутствуют в её HTML-коде.

Анализ инъекции

После того как выявлены скрипты, подверженные инъекции, начинается анализ, в результате которого будут выявлены:

  • примерный вид SQL-запроса, в котором происходит инъекция;
  • тип используемой СУБД, а также, возможно, версия СУБД.

Для определения типа СУБД в инъекцию подставляются SQL-конструкции, специфические для разных СУБД.

Конструкция MySQL MS SQL Oracle MS Access PostgreSQL Sybase IBM DB2 Ingres
Комментирование остатка строки /* … -- … -- … Коментирование возможно лишь внедрением в запрос NULL-байта: %00… -- … -- … -- … -- …
Получение версии version () @@version select banner from v$version

@@version select versionnumber from sysibm.sysversions dbmsinfo ('_version')
Конкатенация строк concat (string1,string2) string1 + string2

string1IIstring2 string1 + string2 string1ΙΙstring2 или string1 concat string2 string1ΙΙstring2

Защита от атак инъекции SQL

Для защиты от инъекции SQL необходимо тщательно фильтровать входные параметры, значения которых будут использованы для построения SQL-запроса.

Фильтрация строковых параметров

Предположим, что код, генерирующий запрос (на языке программирования Паскаль) , выглядит так:

statement: = 'SELECT * FROM users WHERE name = „' + userName + '“;';

Чтобы инъекция была невозможна, требуется брать в кавычки все строковые параметры. В само́м параметре заменяют кавычки на \», апостроф на \', обратную косую черту на \\ (это называется «экранировать спецсимволы“). Это можно делать таким кодом:

statement: = 'SELECT * FROM users WHERE name = ' + QuoteParam  (userName)  + ';';
function QuoteParam  (s: string) : string;
{ на входе — строка; на выходе — строка в кавычках и с заменёнными спецсимволами }
var
i : integer;
Dest: string;
begin
Dest: = '“';
for i:=1 to length (s) do
case s[i] of
''': Dest: = Dest + '\'';
'“': Dest: = Dest + '';
'\': Dest: = Dest + '\\';
else Dest: = Dest + s[i];
end;
QuoteParam: = Dest + '
«';
end;

Фильтрация целочисленных параметров

Возьмём другой запрос:

statement: = 'SELECT * FROM users WHERE id = ' + id  + ';';

В данном случае поле id имеет числовой тип, и его нельзя брать в кавычки. Поэтому „закавычивание“ и замена спецсимволов на escape-последовательности не проходит. В таком случае помогает проверка типа; если переменная id не является числом, запрос вообще не должен выполняться.

Например, на Delphi для противодействия таким инъекциям помогает код:

 id_int: = StrToInt  (id) ;
statement: = 'SELECT * FROM users WHERE id = ' + IntToStr (id_int)  + ';';

или

query.Params[0].AsInteger: = StrToInt  (id) ;

В случае ошибки функция StrToInt возбудит исключение EConvertError, и в его обработчике можно будет вывести сообщение об ошибке. Двойная конверсия (из числа в строку и обратно) , выполняющаяся в первом фрагменте явно и во втором неявно, обеспечивает корректную реакцию на числа в формате $132AB (шестнадцатеричная система счисления). На стандартном Паскале, не умеющем обрабатывать исключения, код несколько сложнее.

Усечение входных параметров

Для внесения изменений в логику выполнения SQL-запроса требуется внедрение достаточно длинных строк. Так, минимальная длина внедряемой строки в вышеприведённых примерах составляет 8 символов (1 OR 1=1“). Если максимальная длина корректного значения параметра невелика, то одним из методов защиты может быть максимальное усечение значений входных параметров.

Например, если известно, что поле id в вышеприведённых примерах может принимать значения не более 9999, можно „отрезать лишние“ символы, оставив не более четырёх:

statement: = 'SELECT * FROM users WHERE id = ' + LeftStr  (id, 4)  + ';';

Использование параметризованных запросов

Многие сервера баз данных поддерживают возможность отправки параметризованных запросов. При этом параметры внешнего происхождения отправляются на сервер отдельно от самого запроса либо автоматически экранируются клиентской библиотекой. Для этого используются

  • на Delphi — свойство TQuery.Params;
  • на Perl — через DBI::quote или DBI::prepare;
  • на Java — через класс PreparedStatement;
  • на C# — свойство SqlCommand.Parameters;
  • на PHP (при работе с MySQL) — функции mysql_escape_string, mysql_real_escape_string, addslashes.
  • на Parser — язык сам предотвращает атаки подобного рода.

безопасностьвзломбазы данныхвеб-сайтSQL инъекция 

22.08.2008, 4078 просмотров.




Яндекс.Метрика

Реклама: