XSS-ін’єкція
В даній статті розглянемо методи захисту від такого типу вразливості Веб-додатків як XSS ін’єкція. Що ж таке XSS ін’єкція?
XSS - (англ. Сross Site Sсriрting) - міжсайтовий скриптинг, тип вразливості комп’ютерної системи. Особливістю даного типу атак є те, що замість безпосередньої атаки сервера, використовується вразливий сервер в якості засобу для атаки на клієнта.
Cross-site scripting - це одна з найбільш поширених вразливості Веб-додатків. При такому типу атаки, атакуючий розміщує шкідливий JavaScript або інший вміст на Веб-сторінці (наприклад повідомлення на форумі), який пізніше може бути виконаний цим Веб-додатком. Тут ми говоримо про скрипти, які можуть бути вставлені в HTML-код, і потім виконані браузером користувача.
Розрізняють п’ять найбільш поширених таких скриптів:
- <script>: часто використовується для вставки JavaScript або VBScript;
- <object>: часто використовується для вставки Flash, ActiveX-компонентів та ін;
- <applet>: використовується тільки для Java applets; все частіше замінюється на <object>;
- <iframe>: використовується для вставки фреймів;
- <embed>: використовується для програвання медіа файлів; все частіше замінюється на <object>;
Варто зазначити, що картинка обробляється браузером з використанням тегу <img>, і є особливою формою <object>, а отже теж може використовуватися для XSS-ін’єкції.
Як же ж забезпечити захист від XSS-ін’єкції? Нехай в додатку присутня деяка форма, яка передає дані в базу, які потім відображаються в самому додатку (наприклад гостьова книга). Необхідно ретельно перевіряти дані, що приходять з форми і не сподіватися на толерантність і культуру користувачів. Наприклад, користувач може в полі електронної почти ввести наступний код <script>аlert('Взламаний!');</script>. Результат виконання додатку який виведе введені дані буде, м’яко кажучи, неочікуваним.
Одним з методів фільтрування введених даних є їхня перевірка з використанням деякого шаблону. Найкращим чином ще можна зробити з використанням функції preg_match. Ця функція порівнює введену в неї в якості параметра стрічку з наперед заданим шаблоном. В разі співпадіння функція повертає TRUE. Наприклад,
preg_match("/^[a-z0-9_-]{1,20}@(([a-z0-9-]+\.)+(com|net|org|mil|edu|gov|ru|info|biz |inc|"."name|[a-z]{2})|[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})$/is",$mail).
Дана стрічка перевіряє правильність написання електронної адреси. З допомогою функції eregi можна перевірити правильність вводу імені, наприклад:
eregi("[^a-za-я0-9_]",$nick).
В самому повідомленні користувача необхідно відфільтрувати введені ним HTML теги, особливо тег <script>. Це можна виконати функцією strip_tags, причому другим параметром цієї функції є список тих тегів, які не будуть фільтруватися. Приклад:
$string = strip_tags($string, "<a><b><i>");
В даному прикладі функція відфільтровує всі HTML-теги, за виключенням тегів <a>, <b> і <i>.
Іншим можливим варіантом є заміна потенційно небезпечних символів їхніми еквівалентами. Так використання функції htmlspecialchars() з параметром ENT_QUOTES дає можливість замінити деякі символи, які мають особливе значення в контексті HTML. Так,
- & амперсанд замінюється на "&";
- " двійні лапки замінюються на """ тільки якщо не встановлений параметр ENT_QUOTES;
- ' одинарна лапка замінюються на "'" тільки коли встановлений ENT_QUOTES;
- < замінюється на "<";
- > замінюється на ">";
Приклад використання:
$string = htmlspecialchars($tring, ENT_QUOTES)
Принциповою різницею між функціями htmlspecialchars і strip_tags є те, що перша замінює деякі особливі символи, після чого відфільтровані дані будуть відповідати оригіналу. strip_tags в свою чергу повністю усуває HTML-теги, розміщені між символами < і >.
Отже, використання простих правил по перевірці і фільтруванню введених користувачем даних дає можливість значно зменшити ризик XSS-ін’єкції.
Recent comments
12 years 52 weeks ago
13 years 2 weeks ago
13 years 36 weeks ago
13 years 43 weeks ago
14 years 28 weeks ago
14 years 51 weeks ago
15 years 5 weeks ago
15 years 11 weeks ago
15 years 13 weeks ago
15 years 27 weeks ago