XSS対策について

本日はSQLインジェクションとXSSについて、学習しましたが、その中でもXSSの対策法について調べてみたのでご紹介します。

1.<>“&は文字参照にする 

$str = htmlspecialchars($str, ENT_QUOTES, 'UTF-8');

HTML中に悪意あるコードを埋め込めなくするためには、特殊な意味合いをもつ<>“&の文字をエスケープする必要があります。 こうすると、<は<に、>は>に、&は&に、”は”e;に、’は’に変換されます。このように文字参照に変換してしまえば、悪意あるコードを無力化できます。

2.hrefやsrcの値がURLか確認する

<a href="javascript: alert('js!');">js</a>
function isUrl($url) {
    return (boolean)preg_match('/A(https?://|/)/',$url);
}

Javascriptはscriptタグの中だけでなく、aタグのhref属性や、imgタグのsrc属性の中でも実行することができます。だから、aタグのhref属性などにjavascriptが埋め込まれていないかを確認する必要があります。これは、1.で紹介したhtmlspecialcharsを使っても取り除けないので注意です。このような正規表現などを使って、本当にURLが指定されているかを事前に確認します。