エンコーディングをhtmlentities() / htmlspecialcharsに渡すだけで(かなり)簡単になるかもしれません
echo htmlspecialchars($string, ENT_QUOTES, 'utf-8');
しかし、これで十分かどうかは、印刷するもの (および場所) によって異なります。
参照:
http://shiflett.org/blog/2005/dec/googles-xss-vulnerability
http://jimbojw.com/wiki/index.php?title=Sanitizing_user_input_against_XSS
http://www.erich-kachel.de /?p=415 (ドイツ語。英語で似たようなものを見つけたら -> 更新) 編集: ドイツ語に堪能でなくても要点を理解できると思います ;) 文字列
javascript:eval(String.fromCharCode(97,108,101,114,116,40,39,88,83,83,39,41))
htmlentities() を変更せずに渡します。今のようなものを考えてみましょう
<a href="<?php echo htmlentities($_GET['homepage']); ?>"
どちらが送信します
<a href="javascript:eval(String.fromCharCode(97,108,101,114,116,40,39,88,83,83,39,41))">
ブラウザに。要するに、
href="javascript:eval(\"alert('XSS')\")"
htmlentities() は要素のコンテンツに対しては仕事をしますが、属性にはあまり適していません。