ニッシー
1990年生まれ
血液型 O型

こんにちは。ITブログアルケーナム管理人のニッシーです。

詳細プロフィールへ

お問い合わせへ






2019-01-15

.htaccess を使って直リンクでデザインをパクるサイトに制裁!




他人のサイトのデザインをパクる方法の一つに、「直リンク」という方法があります。


この方法で、知らない内に自分のサイトやブログがパクられていたら許せない気持ちになってしまいますよね。


今回は、「.htaccess」を用いて、直リンクされた場合に恥ずかしい画像に差し替えたり、CSSやJSを読み込ませないようにして相手サイトのデザインをぶっ壊す方法を見てみたいと思います。










特定のサイトからの直リンクをリダイレクト



先ずは特定のサイト以外を受け入れるポジティブなやり方です。


直リンクで画像ファイルの盗用があった場合、別な画像にリダイレクトさせます。


以下の記述は、「http://pakuri_dorobo.com」というパクりサイトから、自分のサイトが直リンクにより画像が盗用されていたときに、代わりの「kawari_no_gazo」という画像にリダイレクトさせ、パクりサイトのデザインを乱すものになります。


記述例1:
1 RewriteEngine On
2 RewriteBase /
3  
4 RewriteCond %{HTTP_REFERER} !^$
5 RewriteCond %{HTTP_REFERER} ^(http|https)://pakuri_dorobo\.com/ [NC]
6 RewriteCond %{REQUEST_FILENAME} !/kawari_no_gazo\.png$
7 RewriteRule ^(.*)\.(gif|png|jpg|jpeg)$ /kawari_no_gazo\.png [NC]



この記述は、「http://pakuri_dorobo.com」からのアクセスに対してだけリダイレクトが働きます。


パクりサイトの所在が判っている場合に有効です。



画像ではなく、CSSJSをリダイレクトさせたい場合は、以下のように記述します。


この記述の6行目で指定するファイル名にリダイレクトします。


記述例2:
1 RewriteEngine On
2 RewriteBase /
3  
4 RewriteCond %{HTTP_REFERER} !^$
5 RewriteCond %{HTTP_REFERER} ^(http|https)://pakuri_dorobo\.com/ [NC]
6 RewriteRule ^(.*)\.(css|js)$ ^$ [NC]



ここで、この6行目のファイル名が「^$」となっており、存在しないファイルを指定しています。


「^$」は、正規表現の空文字を表します。


したがって、泥棒サイト「http://pakuri_dorobo.com」からのアクセスに対しては、JSとCSSは読み込まれないということと同じ意味になります。



各行の説明



各行の説明を簡単にしたいと思います。


正規表現について掘り下げることは今回はしません。



1 RewriteEngine On


.htaccessの始めに記述します。


これを省略したり、「Off」と記述していると.htaccessが機能しません。



2 RewriteBase /


どのディレクトリから.htaccessの記述を適用するかパスを指定します。


「/」は、index.html などのブラウザにページ内容を表示するファイルが入っているディレクトリ(ルートディレクトリ)を表しています。


.htaccessが、ルートディレクトリにある場合、この「RewriteBase」の記述は省略してもOKです。



4 RewriteCond %{HTTP_REFERER} !^$


HTTPリファラに記述があるときという意味です。


「HTTPリファラ」とは、現在のサイトにアクセスする前にどこのサイトにいたのかが記述されている通信データの領域のことです。


変数「%{HTTP_REFERER}」は、そのリファラの内容を見るためのものです。


正規表現で「^$」が空文字、「!」は「~でない」という否定を表す記号です。


すなわち、 空文字でない = 記述がある という意味になります。


「RewriteCond」の「Cond」は「Condition」の略省です。書き換える条件を記述します。



5 RewriteCond %{HTTP_REFERER} ^(http|https)://pakuri_dorobo\.com/ [NC]


HTTPリファラに「http(s)://pakuri_dorobo.com」と記されているときという意味です。


正規表現で「 ^(http|https) 」は、「http」 または 「https」 から開始するという意味です。


「 [NC] 」は、「大文字・小文字を区別しない」という意味のフラグ記号です。


また「.」の前の「\」は、エスケープのために付いています。


正規表現において「.」は任意の文字という意味を設定された記号なので、サーバが正規表現における任意の文字として認識してしまうのを防ぐために「\」が添えられています。


正規表現的な意味のない文字ですよ、と示すための記述となります。



6 RewriteCond %{REQUEST_FILENAME} !/kawari_no_gazo\.png$


「!」があるので、URL上に「/kawari_no_gazo.png」というファイル名がないときという意味になります。


変数「%{REQUEST_FILENAME}」は、入力されたURLに含まれるファイル名を格納しているものになります。


ちなみに、「kawari_no_gazo.png」は、「/」がファイル名の前に記してあるのでルートディレクトリに存在しているということです。


環境によって画像のあるパスは違うので、その都度に指定してください。



7 RewriteRule ^(.*)\.(gif|png|jpg|jpeg)$ /kawari_no_gazo\.png [NC]


「gif、png、jpg または jpeg」 という拡張子のファイルへのアクセスを「 kawari_no_gazo.png 」に差し替えよという意味です。


正規表現で、「^(.*) 」は任意(何でもいい)の文字列から始まる、0文字以上の文字列という意味です。


「RewriteRule」は、「RewriteCond」で指定された条件を満たしたときに書き換えを行う記述です。



具体的な動きの例




それでは具体的にどのように動作するのかを見てみます。


以下の画像を、リダイレクト用画像「kawari_no_gazo.png」とします。




以下が泥棒サイトの画像とします。


で囲われたところが、リダイレクトされる画像のある箇所です。








リダイレクトによって画像が「kawari_no_gazo.png」に差し替わります。





直リンクで盗用しているあらゆる画像が「kawari_no_gazo.png」に差し替わります。


どうしても腹立った場合、エ○画像あたりに差し替えても面白いかもしれませんね。





自身のサイト以外からの直リンクをリダイレクト



次に、特定のサイト以外受け入れないネガティブなやり方を見てみたいと思います。


以下の記述は、自身のサイトURL「http://arcanum.work」以外かのアクセスがあった場合、代わりの「kawari_no_gazo」という画像にリダイレクトさせ、パクりサイトのデザインを乱すものになります。


記述例3:
1 RewriteEngine On
2 RewriteBase /
3  
4 RewriteCond %{HTTP_REFERER} !^$
5 RewriteCond %{HTTP_REFERER} !^(http|https)://arcanum\.work/ [NC]
6 RewriteCond %{REQUEST_FILENAME} !/kawari_no_gazo\.png$
7 RewriteRule ^(.*)\.(gif|png|jpg|jpeg)$ /kawari_no_gazo\.png [NC]



自身のサイトURL以外の直リンクを全て防ぎたいときに有効です。


5行目のURLを自身のURLに変え「!」をつければ、自分のサイトURL以外のアクセスのときに画像をリダイレクトします。



こちらは、自身のサイトURL「http://arcanum.work」以外からのアクセスのときCSSとJSファイルをリダイレクトするようになっています。


記述例4:
1 RewriteEngine On
2 RewriteBase /
3  
4 RewriteCond %{HTTP_REFERER} !^$
5 RewriteCond %{HTTP_REFERER} !^(http|https)://arcanum\.work/ [NC]
6 RewriteRule ^(.*)\.(css|js)$ ^$ [NC]



5行目のURLを自身のURLに変え「!」をつければ、自分のサイトURL以外のアクセスのときに画像をリダイレクトします。



Googlebotもリダイレクトから除外



自身のサイト以外のアクセスを全てリダイレクトしてしまうため、Googlebot(クローラー)もその対象になってしまいます。


すると、折角、記事を更新しても検索結果画面にその記事が反映されません。


そこで、記述例3記述例4上の「RewriteRule」の前にクロールのアクセスでないときという条件を追加します。


記述例3:
1 RewriteEngine On
2 RewriteBase /
3  
4 RewriteCond %{HTTP_REFERER} !^$
5 RewriteCond %{HTTP_REFERER} !^(http|https)://arcanum\.work/ [NC]
6 RewriteCond %{HTTP_USER_AGENT} !Googlebot [NC]
7 RewriteCond %{REQUEST_FILENAME} !/kawari_no_gazo\.png$
8 RewriteRule ^(.*)\.(gif|png|jpg|jpeg)$ /kawari_no_gazo\.png [NC]



記述例4:
1 RewriteEngine On
2 RewriteBase /
3  
4 RewriteCond %{HTTP_REFERER} !^$
5 RewriteCond %{HTTP_REFERER} !^(http|https)://arcanum\.work/ [NC]
6 RewriteCond %{HTTP_USER_AGENT} !Googlebot [NC]
7 RewriteRule ^(.*)\.(css|js)$ ^$ [NC]



条件にこの「RewriteCond %{HTTP_USER_AGENT} !Googlebot [NC]」を追加することで、この記述は、「自身のサイト」と「Googleのクローラー」のアクセス以外をリダイレクトという意味になります。


「Search Console」「Fetch as Google」などを使用したときに、更新記事を正常にインデックスできるようになります。


クローラーさんもリダイレクト対象から除外するように注意しましょう。





直リンクとは?



そもそも直リンクとは、例えば、Aサイトで使用している画像をそのままBサイトでも使用することをいいます。


更にいうと、Aサイトで使用している画像指定用のリンクを、そのままBサイトでも使用するということです。


以下は直リンクの例を表しています。


直リンク



Aサイト(A-site.com)で使用しているリンクを、そのままBサイト(B-site.com)でも使用しています。





最後に



今回は直リンクによるサイトのデザインの盗用に対する措置を紹介しました。


しかし、自身のサイトを丸ごとダウンロードされたり、CSSと画像をコピーされた場合はパクりに対処できないので、別に対処する必要があります。


それでは、続きはまた次回にご期待を!









プロフィール

ニッシー
1990年生まれ
血液型 O型

こんにちは。ITブログアルケーナム管理人のニッシーです。

詳細プロフィールへ

お問い合わせへ