Статьи ⇒ XML ⇒ XQuery инъекция

XQuery инъекция

Опубликовано: 3 дек 2012 в 22:21
Автор: freeeeez  

XQuery-инъекция является чрезвычайно опасным методом атак на XML приложения. Своего рода это SQL-инъекция только в XML. Как и в SQL, основной задачей инъекции ялвяется нарушение логики запроса. Возникнуть это может в результате недостаточной фильтрации входящих данных от пользователя. Даже одна единственная ошибка может позволить злоумышленнику выполнять произвольные запросы и команды на сервере. Более подробную информацию про инъекции кода можно узнать в других статьях или же на форуме программистов http://www.cyberforum.ru/.

Для примера рассмотрим следующий XML-документ:

<?xml version="1.0" encoding="ISO-8859-1"?>
<userlist>
<user category="group1">
  <uname>jpublic</uname>
  <fname>john</fname>
  <lname>public</lname>
  <status>good</status>
</user>
<user category="admin">
  <uname>jdoe</uname>
  <fname>john</fname>
  <lname>doe</lname>
  <status>good</status>
</user>
<user category="group2">
  <uname>mjane</uname>
  <fname>mary</fname>
  <lname>jane</lname>
  <status>good</status>
</user>
<user category="group1">
  <uname>anormal</uname>
  <fname>abby</fname>
  <lname>normal</lname>
  <status>revoked</status>
</user>
</userlist>

Типичный XQuery запрос для данного документа может выглядеть так:

doc("users.xml")/userlist/user[uname="mjane"]

Результатом выполнения такого запроса будет:

<user category="group2">
  <uname>mjane</uname>
  <fname>mary</fname>
  <lname>jane</lname>
  <status>good</status>
</user>

Это может быть использовано при выводе информации в личном кабинете пользователя. Предполагается, что переменная uname получена от пользователя. При отсутствии фильтрации пользователь может ввести что-то типо:

something" or "1"="1

В итоге XQuery запрос превращается в:

doc("users.xml")/userlist/user[uname="something" or "1"="1"]

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

Защитится от данной уязвимости можно с помощью фильтрации переменных, приходящих от пользователя. Однако об этом в следующей статье. 

Тэги: 
Нет комментариев
2 282 просмотра


Оставить комментарий:

Имя:
Email:
Сайт:
Комментарий:

Допустимые теги: <em> • <strong> • <u> • <sub> • <sup> • <blockquote>

Проверочный код:

Введите проверочный код, для подтверждения, что вы не робот.
P.S. Если вы робот, то, к сожалению, вы
не сможете прочитать символы с картинки.