【作ってみた】ブログまるコピ対策用、画像呼び出しプログラム

この記事は4年以上前の記事です。情報が古い場合がありますのでお気を付け下さい。

ブログを全文パクられたので本気で対抗してみたら – Togetterまとめ

昔っから無くならない、ブログまるコピ。
人様のモン盗むたぁふてえやろうです。

その対策になるかどうか分かりませんが、本日のお昼休みを利用してプログラム書いてみました。

今回対策したのは、「画像は自分のブログからしか呼び出せない」プログラムです。
RSSでパクられたら、この方法でブロックできるんじゃないでしょうか。

デモ

別のURLから呼び出したデモ

言語はPHP、サーバはApacheです。

bc.php

# Acquire Data
$img = file_get_contents(stripslashes($_GET["img"]));
if(!$img) die();

### START MAIN SCRIPT
$ref = $_SERVER["HTTP_REFERER"];
$host = $_SERVER["HTTP_HOST"];
if(preg_match(sprintf("@^http://%s/@",$host),$ref,$match)){
  if($type = outputImgHeader($img)){
    header("Content-type: ".$type);
    echo $img;
  }
}
exit();

# function for this script
function outputImgHeader($data){
  if (strncmp("\x89PNG\x0d\x0a\x1a\x0a", $data, 8) == 0) {
    // PNG
    return "image/png";
  } else if (strncmp('BM', $data, 2) == 0) {
    // BMP
    return "image/bmp";
  } else if (strncmp('GIF87a', $data, 6) == 0 || strncmp('GIF89a', $data, 6) == 0) {
    // GIF
    return "image/gif";
  } else if (strncmp("\xff\xd8", $data, 2) == 0) {
    // JPEG
    return "image/jpeg";
  } else {
    return false;
  }
}

 

画像フォーマットの判定には下記の記事を参考にしています。

れぶろぐ – [PHP] 画像フォーマットのファイルヘッダ

呼び出し側のHTMLでは、下記のように記述します。

bc.html

<img src="bc.php?img=img/test.jpg" alt="test" />

引数のimgは相対パスで記述してくださいまし。

最後に、格納しているimgディレクトリに.htaccessを指定します。

order deny,allow
deny from all

これで、本体のブログ以外からは画像の参照が出来なくなります。
ただ、この方法だと、画像を単体で表示することが出来なくなりますのでご注意を。

適当に書いてあるので、穴があるかと思います…
ダメじゃん的なご指摘はtwitterとかで御連絡ください。

需要がありそうでしたら、WordPressのプラグインとかにします。
(よく調べないで書いたけど、もうあるのかな?)

[追記 2014/6/10 13:00]
これだったら.htaccessだけでもいい気がしてきたので、あとでちょっと変えますね

4年前