Все, что мне нужно сделать, чтобы использовать это, - заставить пользователя щелкнуть форму, которая отправляет испорченную переменную «q».Если бы я был таким противным, я бы создал кнопку формы, которая выглядит как ссылка (или даже ссылка, которая записывается в форму POST с помощью Javascript, что-то вроде того, как Rails делает свою вещь link_to_remote до 3.0).
Представьте себе что-то вроде этого:
<form id="nastyform" method="post" action="http://yoururl.com/search.php">
<input type="submit" value="Click here for free kittens!">
<input type="hidden" name="q" value="<script>alert('My nasty cookie-stealing Javascript')</script>" />
</form>
<style>
#nastyform input {
border: 0;
background: #fff;
color: #00f;
padding: 0;
margin: 0;
cursor: pointer;
text-decoration: underline;
}
</style>
Если я смогу заставить пользователя щелкнуть по нему (думая, что он нажимает на какую-то невинную ссылку), то я могу опубликовать произвольные данные в поиске, который затем будет отраженна его страницу, и я могу перехватить его сеанс или сделать любые другие неприятные вещи, которые я захочу.
Публикация данных по своей природе не является более безопасной, чем получение данных;это все еще пользовательский ввод, и ему абсолютно нельзя доверять.
CSRF-атаки - это другой класс атак, где некоторые законные действия инициируются без разрешения пользователя;у него такой же вектор входа, но это классическая атака XSS, предназначенная для того, чтобы в результате внедрить вредоносный Javascript на страницу с целью получения доступа к сеансу или чего-то такого же разрушительного.