データベース (MySQL) からの出力で htmlspeciachars を使用する場合、XSS を防ぐために他に何を考慮する必要がありますか?
データベース (この場合は MySQL) からデータをフェッチするときに、出力で htmlspecialchars を使用すると XSS を防止できるというのは正しいですか? この場合、HTML は HTML ドキュメントに表示されますか? 他に考慮すべきことはありますか?他にどのような場合に XSS に対して脆弱になる可能性がありますか?
ユーザーが新しい投稿を投稿するためのログインシステムを作成したWebサイトがあり、ここでユーザーはこれらのニュース投稿を削除できますが、JavaScript関数がalertbox()で使用され、ユーザーが本当にこのニュースを削除したいのですが、そうであれば、ニュース ID は次のようなリンクによって URL を介して渡されます。
echo '<a class="btn-small btn-danger" onclick="deleteNews('. htmlspecialchars($newsidfk) .')" ">Delete news</a>';
Javascript 関数:
//alert deleteNews
function deleteNews($newsidfk)
{
var ans = window.confirm(Are you sure you want to delete this news post?');
if (ans == true)
{
window.location.href="delete.php?news_id_fk="+$newsidfk;
}
}
XSS を防ぐために考慮すべきことが他にありますか、またはここで XSS を実行できませんか? 数値の代わりに文字列を持っているとしましょう。JavaScript エンコーディングを行う必要がありますか?encodeURI() 関数でしょうか?
htmlspecialchars を使用して、たとえば script-tags、link-tags、img-tags の実行を防止するのは正しいですか? そして、これが XSS の仕組みです。たとえば、誰かがユーザーの個人情報を盗むことができるからです。
データベースからの出力を表示するときは常にサニタイズする必要があることを学びましたが、データベースに保存されている入力はどうですか? これもサニタイズする必要がありますか、それとも PDO の準備済みステートメントを使用するだけで十分ですか?
wiki のこの記事から HTML サニタイズについて読みました: http://en.wikipedia.org/wiki/HTML_sanitization