本日は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が指定されているかを事前に確認します。