広告ブロック

無料のレンタルサーバーによくあることなのですが、勝手にJavascript製の広告が挿入されることがあります。

本来、それの表示を妨げる行為はレンタルサーバーの利用規約違反だったりしますが、合法的に表示出来なくする方法があります。

しかも、セキュリティー強化にもなります。むしろ、そっちの方がメインです。


CSP

コンテントセキュリティーポリシーをヘッダーに設定すると、異物(例えば勝手に挿入されたスクリプト)を制御出来ます。

これは、レスポンスヘッダーに設置する方法と、HTMLのheadタグに挿入する方法があります。お勧めはヘッダーの方です。

<?php
#サイト内でJavascriptを一切使用しない場合
header("Content-Security-Policy:script-src 'none';");

#サイト内でJavascriptを使用する場合(後方互換性のため'unsafe-inline'を併記)
$nonce = base64_encode(random_bytes(random_int(64, 100))); //乱数を生成
header("Content-Security-Policy:script-src 'nonce-{$nonce}' 'unsafe-inline';");

//$nonce をscriptタグのnonce属性に追加

こうすることで、異物のJavascriptを実行出来なくすることが出来ます。つまり、広告ブロックとXSS対策が出来て一石二鳥です。

これは最初の「content-type:text/html;charset=UTF-8」と同じようにheader関数で送信します。php以外の言語でやる場合は、「header」「二回の改行」「HTML等の本文」の順番で出力します(header関数ではなく通常の標準出力です)。webのルールです。


htaccess

サイト全部にheaderを適応したい場合、.htaccessを使うと簡単です。

<IfModule mod_headers.c>
    Header set Content-Security-Policy "script-src 'none';"
</IfModule>

mod_headersが有効であればこの方法が使えます。


サーバーサイド言語が使えない場合

HTMLしか使えない場合は、metaタグを挿入しましょう。

これをheadタグ内に入れて下さい。

<meta name="Content-Security-Policy" content="script-src 'none';">


面倒な場合

ヘッダーなどという小細工を使わなくとも、スマートな方法もあります。

スクリプトの挿入はbodyタグやiframeタグに反応するらしいので、それを使わなければ良いのです。divに置き換えましょう。

文法的に問題がありますが、裏サイトごときでは些末なことです。



次回: 荒らし対策


前回: デザイン




広告