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
13 years 13 weeks ago
13 years 15 weeks ago
13 years 49 weeks ago
14 years 4 weeks ago
14 years 42 weeks ago
15 years 13 weeks ago
15 years 19 weeks ago
15 years 24 weeks ago
15 years 26 weeks ago
15 years 41 weeks ago