Пассивный XSS
- это XSS который сработает только при передаче пользователем определённых данных, то есть при атаке Вы должны каким либо образом заставить пользователя вызвать XSS. Данный вид XSS очень шумный, т.к. пользователь может заподозрить что-то неладное просто посмотрев на ссылку с опасным кодом. Ещё данный способ неудобен из за того, что ссылки с опасным кодом получаются просто очень огромные, и если Вы собираетесь дать её администратору сайта, то он врядли пройдёт по ней.

Давайте поподробнее рассмотрим наш случай на примере поиска по сайту. Допустим, этому скрипту передаётся поисковый запрос через параметр s, и этот параметр не фильтруется скриптом. Плюс ко всему заданный скрипту запрос отображается на страничке результатов. Тогда ссылка будет следующая:
search.php?s=[то что нужно искать]

Соответственно Вам нужно будет отправить ссылку с html-кодом, вместо значения параметра, например:
search.php?s=<h1>hacked</h1>

Если Вы заставите пользователя пройти по этой ссылке то пользователь увидит страницу, на которой крупными буквами будет отображаться слово hacked. На первый взгляд Вам может показаться трудным заставить пользователя пройти по ссылке, особенно если с жертвой Вы не знакомы. Вы можете просто сказать, что там расположена какая то картинка, или что ни будь интересное. За место <h1>hacked</h1> может быть и код, который перехватит сессию или cookies (об этом ниже). Вы можете и маскировать ссылку следующим образом - за место определённых символов Вы можете вставить их шестнадцатиричное значение, перед которым нужно ставить знак процента (%). Если не продвинутый пользователь, хотя бы немного знает html то он может сразу заметить что в ссылке
search.php?s=<h1>hacked</h1>

имеются html-тэги, а вот ссылку
search.php?s=%3Ch1%3Ehacked%3C/h1%3E

он врятли опознает.
Обратите внимание на то, что при ссылке
search.php?s=<h1>hacked</h1>
значение параметра передаётся методом GET. Если Вы дадите пользователю опасную ссылку на скрипт, который принимает данные методом POST, то ничего не выйдет. Для этого нужно будет писать html-форму, которая методом POST отправляет данные пользователя скрипту. В принципе Вы можете вставить опасный код и в скрытые поля формы, а можно вообще скрыть всю форму и написать на javascript код, который сам отправит данные (об этом далее). Когда пользователь зайдёт на Вашу страничку, то сработает javascript-код, который тут же отправит пользователя на уязвимый сайт, и передаст нужные параметры скрипту.

Активный XSS

Активный XSS (непосредственная вставка html кода) лучше пассивного тем, что не нужно пользователя каким либо образом заставлять выполнить XSS. Достаточно просто чтоб пользователь зашёл на определённую страницу, где уже имеется опасный html-код, вставленный взломщиком через активный XSS. Данный вид XSS-атак является самым опасным, и при этом почти не заметным.

Активный XSS, в основном, распространён в гостевых книгах, в различных форумах и блогах. Вобщем там, где пользователь может оставлять сообщения которые смогут увидеть много посетителей.
Чтобы сама техника атаки была понятна, рассмотрим ниже приведённый пример.
Возьмём гостевую книгу, которая сохраняет в базе данных (или в файле) отзывы посетителей сайта, и при выполнении главного скрипта, отображает все запись из таблицы отзывов (соответственно и Ваш "отзыв" с вставленным в него вредным кодом).
Если программист, который писал гостевую книгу, не позаботился о фильтрации html-тегов, то в текст отзыва можно без проблем вставить определённый html-код, который сохранится в базе, и будет выполняться каждый раз, когда любой пользователь посмотрит все отзывы.
Например текст отзыва может быть следующий:
Классный сайт, <script>alert('hacked')</script> только XSS страдает.

Надо сказать, что гостевые книги не все поголовно страдают XSS. В гостевой книге используется очень мало переменных, поэтому, при написании скриптов, можно легко проследить - какие переменные подлежат фильтрации, а какие нет. Чаще всего данному типу XSS-атак подвергаются форумы, или любые скрипты, где используется огромное количество переменных и за каждой просто невозможно уследить.