Читатели като вас помагат в подкрепа на MUO. Когато правите покупка чрез връзки на нашия сайт, ние може да спечелим комисионна за партньор. Прочетете още.

Cross-Site Scripting, широко известен като XSS, е един от най-опасните методи за атака, използвани от киберпрестъпници, така че е жизненоважно всеки разработчик и изследовател по сигурността да знае какво е това и как да предотвратяване на атаки. И така, как можете да предприемете действия срещу XSS уязвимостта? Използвате HTML, JavaScript или DOM, за да покажете данните, които даден уебсайт получава от потребителя. Една или повече от тези три различни области могат да работят заедно.

Как да предотвратите XSS с помощта на HTML

XSS позволява на атакуващите да инжектират злонамерени кодове или скриптове в уеб страници, насочени към нищо неподозиращи потребители, посещаващи сайта. Това може да открадне лични данни, да пренасочи посетителите към друг сайт, създаден от киберпрестъпника, или по друг начин да промени външния вид на уеб страницата. Но можете да предотвратите това да се случи; например, като ги спрете да вмъкват HTML.

instagram viewer

Представете си, че имате уебсайт с книга за гости. Да приемем, че вашите посетители, използващи тази книга за гости, могат да напишат имената и съобщенията си тук и съобщенията им могат да бъдат публично разглеждани. Хакер, който иска да направи XSS тест във вашата книга за гости, ще използва областта, която сте разпределили за писане на съобщение. Този киберпрестъпник ще изпълни JavaScript код тук. Например, нападател може да използва JavaScript код като:

<сценарий>тревога("XSS!")</script>

Нападателят трябва да използва таг на скрипт, за да бъде това успешно. Ако не го направят, JavaScript кодът няма да работи. Трябва да кодирате оператора

Как да предотвратите XSS с помощта на JavaScript

Логиката в HTML също е такава валиден в JavaScript. В някои приложения е възможно да се отпечатат данните, получени от уебсайта от потребителя с JavaScript код.

Помислете за това кодиране:

<p id="печат"></стр>
<сценарий>
document.getElementById("тест").innerHTML = "";
</script>

Представете си, че уебсайт използва кодов блок като този по-горе. Разработчикът е използвал тук маркер "p", наречен "print". Както можете да видите от кода, стойност ще дойде от параметъра „търсене“ и разработчикът иска да покаже тази входяща стойност в тага „p“. Програмистът, който извърши тази операция, искаше да използва функцията innerHTML на JavaScript.

Сега нека да разгледаме ситуацията от гледна точка на кибератака. В такъв случай нападателят ще извърши XSS тест в тага "script". За това атакуващият не трябва да рестартира тага, тъй като тагът "скрипт", който вече се използва. Тогава нападателят може да напише тест като този:

име на файл.php? търсене=а" тревога("XSS!"); f= "

Този код ще се появи на уебсайта като:

document.getElementById("тест").innerHTML = " а" тревога("XSS!"); f="";

Тази атака ще бъде успешна. За да разберем по-добре проблема, нека разгледаме още една примерна техника, която атакуващият може да използва. Хакерът може да е приложил XSS тест като:

име на файл.php? търсене=";</script><ем>Фатих</em>

Ето как ще изглежда, когато се гледа от уебсайта:

document.getElementById("тест").innerHTML = "";</script><ем>Фатих</em>";

Това може да изглежда малко странно, защото атакуващият е затворил първия таг "скрипт", използвайки структура като "/скрипт" тук. И така, атакуващият може да рестартира всеки JavaScript и HTML код, който пожелае.

Ако помислите за тези два различни примера, защитата от XSS изглежда доста проста. Необходимата предпазна мярка е да се кодира " и ' символи, които виждате в първия пример. Във втория пример кодирайте знаците < и >.

Как да предотвратите XSS с помощта на DOM

В този вариант на XSS данните, които уебсайтът получава от потребителя, могат да се намесват в свойството на DOM елемент. Например информацията за цвета, която сайтът получава от потребителя, може да повлияе на цвета на фона на таблица или на целия фон на страницата. Така че потребителят неволно се намесва в стиловите оформления на корпуса и масата. Следният код е добър пример за това:

<тяло bgcolor="<?php ехо $_GET['цвят']; ?>"/>

С това уебсайтът използва параметъра "color", получен от потребителя директно в свойството "bgcolor" на елемента "body". И така, какво може да направи един нападател в този момент? Те биха могли да изпълнят този зловреден код:

име на файл.php? цвят=червен" onload="тревога('XSS!')

Това изглежда така, когато се гледа от уебсайта:

<тяло bgcolor=" червен" onload="тревога('XSS!') "/>

За да предотврати това да се случи, разработчикът ще трябва да кодира " характер.

Има обаче още един важен елемент в JavaScript, който трябва да се отбележи. Следният кодов фрагмент е пример за това:

<a href="javascript: предупреждение('XSS!')">

Това означава, че е възможно да стартирате директно някакъв JavaScript код. Една от най-добрите превантивни мерки е да се уверите, че уебсайтът проверява дали данните, които получава от потребителите, са истински URL адрес. Най-простият метод е да се уверите, че има изрази като "HTTP" и "HTTPS" (сигурната версия на HTTP) във връзката.

Примерна функция за предотвратяване на XSS с PHP

Видяхте някои примери за това как да защитите приложение или уебсайт от XSS атаки. Можете да използвате кодовите фрагменти в тази таблица с PHP:

Кодирайте в HTML

htmlspecialchars($str, ENT_COMPAT)

Кодиране в JavaScript и DOM атрибут

htmlspecialchars($str, ENT_NOQUOTES)

URL проверка

'/^(((https?)|(\/\/))).*/';

Имайте предвид, че това са само примери и ще варират в зависимост от софтуерния език, който използвате.

Можеш създаване на уеб приложение с PHP и опитайте кодовете, които виждате по-горе, за да ги изпратите чрез SMS. Ако се чудите как да използвате всички тези методи, можете да получите някои идеи от блока с PHP код по-долу, който би трябвало да е полезен дори ако използвате различен език:

<?php
$данни = $_GET['данни'];

функцияin_attribute($str){
връщане htmlspecialchars($str, ENT_COMPAT);
// ENT_COMPAT ще кодира знака за двойна кавичка (").
}

функцияin_html($str){
$връзка = '/^(((https?)|(\/\/))).*/';
ако(!preg_match($link, $str))
{
връщане "/";
}
връщане $str;
}

$данни = in_attribute($данни);
$данни = in_html($данни);
$data = real_url (данни);
?>

Защитете уебсайта си от XSS и други

XSS е популярен вектор за атака, използван от хакери. Обикновено стойност на пътя в URL адреса, всяко поле на вашия уебсайт, където могат да се въвеждат данни (като полета за формуляри и коментари), може да се използва за тестване за XSS уязвимост. Но разбира се, има много различни методи, които киберпрестъпниците могат да използват, за да атакуват сайт, особено ако имате уебсайт, който има много потребители и крие тяхната информация.