Статьи

Запобігання міжсайтових атак з впровадженням сценарію шляхом кодування HTML-відповідей

  1. Міжсайтовий атаки з впровадженням сценарію
  2. Малюнок 1. Малюнок 1. Типова XSS-атака
  3. наслідки XSS
  4. Запобігання XSS-атак
  5. Таблиця 1. Імена об'єктів для символів HTML
  6. Додавання HTML-коду в додаток Java на стороні сервера
  7. Лістинг 1. Перетворення символів в імена об'єктів HTML
  8. Таблиця 2. Десяткові значення об'єктів HTML
  9. Ресурси для скачування

Міжсайтовий атаки з впровадженням сценарію

Під час межсайтовой атаки з впровадженням сценарію (XSS) атакуюча сторона впроваджує в легальну Web-сторінку шкідливий код, який потім запускає шкідливий сценарій на стороні клієнта. При відвідуванні користувачем зараженої сторінки сценарій завантажується в браузер користувача і там запускається. Ця схема має безліч різновидів. Шкідливий сценарій може отримувати доступ до cookie-файлів браузера, сеансовим маркерами або інша вразлива інформація, що зберігається в браузері. Проте все атаки діють за схемою, показаної на малюнку 1.

Малюнок 1. Малюнок 1. Типова XSS-атака

уразливості XSS

В ході типовою XSS-атаки атакуюча сторона знаходить спосіб впровадження рядки на Web-сторінку сервера. Припустимо, атакуючий впровадив на Web-сторінку наступний рядок: <script> alert ( "ви атаковані") </ script>. При кожному відвідуванні користувачем цієї сторінки його браузер завантажує цей сценарій і запускає його разом з рештою вмісту сторінки. В даному випадку в результаті запуску сценарію користувач побачить спливаюче вікно з текстом "ви атаковані".

наслідки XSS

Якщо атакуючому вдалося скористатися XSS-вразливістю Web-додатки, він може впровадити в сторінку сценарій, який надасть доступ до даних облікового запису користувача. При цьому зловмисники можуть виконувати безліч шкідливих дій, наприклад:

  • викрасти обліковий запис;
  • поширити віруси;
  • отримати доступ до історії відвідування сторінок і вмісту буфера обміну;
  • отримати можливість дистанційного керування браузером;
  • просканувати і використовувати програмно-апаратні ресурси і додатки у внутрішній мережі.

Запобігання XSS-атак

Для запобігання XSS-атак додаток має шифрувати вихідні дані сторінки перед передачею їх кінцевому користувачу. При шифруванні вихідних даних розмітка HTML замінюється альтернативними уявленнями - об'єктами. Браузер відображає ці об'єкти, але не запускає їх. Наприклад, <script> перетворюється в & lt; script & gt ;.

У таблиці 1 показані імена об'єктів для деяких поширених символів HTML.

Таблиця 1. Імена об'єктів для символів HTML
Результат Опис Ім'я об'єкта Номер об'єкта Нерозривний пробіл & nbsp; & # 160; <Менше ніж & lt; & # 60; > Більше ніж & gt; & # 62; & Амперсанд & amp; & # 38; ¢ Цент & cent; & # 162; £ Фунт & pound; & # 163; ¥ Йена & yen; & # 165; Євро & euro; & # 8364; § Параграф & sect; & # 167; © Авторське право & copy; & # 169; ® Зареєстрований товарний знак & reg; & # 174 ™ Товарний знак & trade; & # 8482;

Коли браузер зустрічає об'єкти, вони перетворяться назад в HTML і роздруковуються, але вони не запускаються. Наприклад, якщо атакуючий запровадить в змінне поле Web-сторінки сервера рядок <script> alert ( "ви атаковані") </ script>, то при використанні описаної стратегії сервер поверне рядок & lt; script & gt; alert ( "ви атаковані") & lt; / script & gt ;.

Коли браузер завантажить зашифрований сценарій, він перетворює його до виду <script> alert ( "ви атаковані") </ script> і відобразить сценарій в складі Web-сторінки, але не запустить його.

Додавання HTML-коду в додаток Java на стороні сервера

Щоб код шкідливого сценарію не міг виводитися разом зі сторінкою, ваше застосування повинне шифрувати всі рядкові змінні перш, ніж вони відобразяться на сторінці. Шифрування полягає в простому перетворенні кожного символу в відповідне ім'я об'єкта HTML, як показано в коді Java, наведеному в лістингу 1.

Лістинг 1. Перетворення символів в імена об'єктів HTML
public class EscapeUtils {public static final HashMap m = new HashMap (); static {m.put (34, "& quot;"); // <- менше ніж m.put (60, "& lt;"); // <- менше ніж m.put (62, "& gt;"); //> - більше ніж // Користувач повинен зіставити всі об'єкти html з відповідними десятковими значеннями. // Відповідність об'єктів десятковим значенням показано в наведеній нижче таблиці} public static String escapeHtml () {String str = "<script> alert (\" abc \ ") </ script>"; try {StringWriter writer = new StringWriter ((int) (str.length () * 1.5)); escape (writer, str); System.out.println ( "encoded string is" + writer.toString ()); return writer.toString (); } Catch (IOException ioe) {ioe.printStackTrace (); return null; }} Public static void escape (Writer writer, String str) throws IOException {int len ​​= str.length (); for (int i = 0; i <len; i ++) {char c = str.charAt (i); int ascii = (int) c; String entityName = (String) m.get (ascii); if (entityName == null) {if (c> 0x7F) {writer.write ( "& #"); writer.write (Integer.toString (c, 10)); writer.write ( ';'); } Else {writer.write (c); }} Else {writer.write (entityName); }}}}

У коді Java в лістингу 1 виконується кодування HTML-рядки String String "<script> alert (\" abc \ ") </ script>". Використовуйте наступну процедуру:

  1. 1. Створіть hashmap всіх об'єктів HTML і їх десяткових значень. У прикладі показані тільки три об'єкти. В цій карті вам потрібно зіставити всі об'єкти HTML з їх десятковими значеннями. Деякі найбільш поширені об'єкти і їх десяткові значення показані в таблиці 2. Повний перелік всіх об'єктів наведено в довіднику по об'єктах HTML в розділі ресурси .
  2. Створіть StringWriter буфера, в 1,5 рази перевищує довжину вхідного рядка.
  3. Передайте цей StringWriter і вхідні рядок методу escape, який бере по черзі кожен символ рядка і отримує відповідне символу цілочисельне значення.
  4. Передайте цілочисельне значення в карту, створену в кроці 1, візьміть ім'я об'єкта і запишіть це значення в StringWriter.

    Кожен символ рядка буде перетворений в ім'я об'єкта.

В результаті на виході з'явиться наступна рядок: & lt; script & gt; alert (& quot; abc & quot;) & lt; / script & gt ;.

У таблиці 2 показано відповідність об'єктів HTML їх десятковим значенням.

Таблиця 2. Десяткові значення об'єктів HTML
Десяткове значення Об'єкт Опис 160 & nbsp; Нерозривний пробіл 60 & lt; Менше ніж 62 & gt; Більше ніж 38 & amp; Амперсанд 162 & cent; Цент 163 & pound; Фунт 165 & yen; Єна 8364 & euro; Євро 167 & sect; Параграф 169 & copy; Авторське право 174 & reg; Зареєстрований товарний знак 8482 & trade; Товарний знак

висновок

Міжсайтового впровадження сценарію є одним з найпоширеніших способів атаки на комп'ютер користувача. Проте ви можете істотно послабити здатність атакуючого інфікувати ваше Web-додаток шкідливим кодом. Створюючи додаток, уважно поставтеся до шифрування всіх вихідних значень сторінки перед відправкою їх в браузер кінцевого користувача.

Ресурси для скачування

Схожі теми

  • Оригінал статті: Prevent cross-site scripting attacks by encoding HTML responses .
  • Довідник по HTML ISO-8859-1: познайомтеся з ISO-8859-1 - стандартним для більшості браузерів набором символів - і символами, зарезервованими для HTML.
  • Загальномовне пакет Apache містить корисні методи для виконання шифрування та інших спільних операцій. Для конкретного випадку, описаного в цій статті, можна використовувати статичний метод перетворення рядків org.apache.commons.lang3.StringEscapeUtils.escapeHtml4 (String input).

Підпишіть мене на повідомлення до коментарів

Новости

Как создать фото из видео
Кризис заставляет искать дополнительные источники дохода. Одним из таких источников может стать торговля на валютном рынке Форекс. Но чтобы не потерять свои деньги необходимо работать с надежным брокером.

Как оформить группу в вконтакте видео
Дано хотел свой магазин в вк, но не знал с чего начать его делать. Так как хотелось не банальный магазин с кучей ссылок и фото, а красиво оформленный. С меню, с аватаркой. После просмотра видео создал

Как оформить диск малыш от рождения до года из фото и видео
Оформить диск "Малыш от рождения до года" из фото и видео можно совершенно разными способами! Кто-то для достижения данной цели идет на шоу-таланты, кто-то пользуется услугами профессионалов, а кто-то