日記 :: j2k.naver.com、jptrans.naver.netからの無断スクレイピング(盗用)を防ぐ方法(間に合わせ)

アクセス解析を見て以下のようなアドレスがありませんか?

h ttp://j2k.naver.com/j2j.php/korean/あなたのサイトのアドレス
h ttp://jptrans.naver.net/j2j.php/korean/あなたのサイトのアドレス

これはLWP:useragent(perlの標準機能、サーバにユーザに代わって他サイトを読み込ませたりできる)などを使用して、
あなたのサイトを、自社コンテンツとしてリアルタイムに取得しています。これをスクレイピングと言います。

自分がお金を払って借りているサーバのリソースを、他人に無断でお金稼ぎに使われるだけでなく
googleから重複コンテンツとして、こちらのサイトがインデックス削除される可能性もある大きな問題です。

で、ホスト規制をかけてもイマイチ上手く行きません。
先のLWP:useragentには、当然のことながら、IPやHOSTを偽ってアクセスする機能も備わっております
(わたし自身も試作したことがありますので分かります)ので。
相手の指定したIPを特定できない限り、防ぐことは出来ません。(アクセスログを解析できる方はそちらで規制をすれば早い)



理想は、.htaccess等で対応 > システム内で対応 > javascriptですが、
ここにあるのは、とりあえずjavascriptを使ったにわか対応ですが仕方ありません。


■ で、最初に思いついたのがコレ
if(location.host != "あなたのドメイン") location.href ="あなたのアドレス";
「もし、自分のドメイン外で表示されていたら、自分のサイトへ遷移せよ」という指示
相手のサイトもiframe内でスクレイピング先を表示していたらしく
iframeが再読み込みされると、再スクレイピングされる → 無限実行してサーバを攻撃し続ける
というなかなかイヤらしい手法をとっておりました。


■ ならば、と、いわゆるフレームブレイカー(iframeを使用した盗用、著作権侵害を防ぐJSを使った防犯手法)を使ってみた
if (window.self != window.top) window.top.location = window.self.location;
これは、「このフレームが最上位のフレームでなかったら、今のフレームを最上位のフレームにせよ(解除せよ)」という指示

確かにiframeは使っていますが、iframeの中もスクレイピングした相手のサイトなので意味が無いことを失念してました。
スクレイピングは「ブラウザを自称するサーバが取得したhtmlを、整形しなおして表示する」ものなので、この方法は意味がありません。

しかも、これもフレームを復活させようとし続け、結果的に、無限実行→サーバ攻撃をしつづけます。
おそらくフレームに読み込み元が設定されている(汗)


■ で、一応の解決ができた方法が、合わせ技のこれ
if(location.host != "あなたのドメイン") window.top.location ="あなたのアドレス";
「もし、自分のドメイン外で表示されていたら、最上位のフレームを自分のサイトにせよ」という指示
後になってみれば、なんと単純な、と思うかもしれませんが、一応これで無断利用はされません。

問題は、googleの重複コンテンツのインデックス削除です。
これは放置しておくと、確実に被害を受けるので考えなければなりません。

解決策が分かったらお知らせします。
はてなブックマークに追加 ... ツイート ... いいね ...
2012年06月23日 - 13:57 | コメント(5) | 日記

この記事へのコメント

X-FRAME-OPTIONS : deny
を使えばよいのでは?
Posted by at 2012年06月23日 14:43
アドバイスありがとうございます。
初めて聞いたのでぐぐってみました。うーむ、レスポンスヘッダのようですね、勉強になります。

相手方がスクレイピングを行う際
相手方の親フレーム>相手方の子フレーム>スクレイピング先のサイト、という順にアクセスしますが、

相手方の子フレーム上で動いているスクレイピングプログラムからは、IP、HOST、USERAGENTを含めた全てのリクエストヘッダを自由に偽装できますので、おそらく「フレーム内から呼び出されている」というヘッダすら送られないかと思われます。

この対象のサイトが、サーバ上で作成した仮想ブラウザは「Safari 7534.48.3」と宣言されていますが、
実際にそのブラウザがサーバにインストールされている必要さえもありません。
確認したわけではありませんが、ブラウザのウィンドウすら開いていない状態ですので、
もし偽装をしなくても「フレームから呼び出されている」とは伝えてこない気がします。
Posted by 桜平真琴 at 2012年06月23日 15:23
はじめまして。
アクセス解析に見慣れないjptrans.naver.net/j2j.php/korean/というのを発見、韓国語になってる自分のサイトらしきものに飛びました。
よくわからないので検索したら、こちらのサイト様が見つかり、自サイトが盗用されているということがわかりました。

でも残念ながら桜平様が書かれていることがさっぱり理解できずにいます。
間に合わせのものでも構わないので、if(location…を使いたいのですが、
どこにこの文を入れればいいのかわかりません。
自分のサイトのトップページに入れればいいのでしょうか?

こんな無知な状態でサイト運営していてはいけないことは承知しております。
でもまさかこんなことが自サイトに起こるなんて思ってもみなかったので困惑してもいます。
プログラムに入れなくてはならないのでしたら、そんなことはできないです…
無料でホームページを作成できる、フォレストページというのを使っています。
桜平様のサイトで自サイトが盗用されているのがわかってからは、すぐに閉鎖しました。

でもやっぱりサイトは続けたいので、是非教えていただけないでしょうか。
よろしくお願いします。
Posted by 匿名希望です at 2012年07月18日 11:31
> 匿名希望さん
javascriptなのでhtmlに直書きする場合はhead内に
<script type="text/javascript">
if(location.host != "○○○.com") window.top.location ="http://○○○.com/aaaa";
</script>
という形に書きます。

ただ、これだとgoogle翻訳なども弾いてしまいますので、このnaverだけを弾く場合は
if(location.host == "j2k.naver.com" || location.host == "jptrans.naver.net"){
window.top.location ="http://○○○.com/aaaa"; //←あなたのサイトトップページ
}
と書くのがいいでしょう。

すべてのhtmlに書くのは面倒なので、外部.jsを用意しておいて読み込ませると便利です。
書き替えが必要な時(他に防ぎたい相手が現れた時)に楽できます。
自信が無かったら以下をコピーしてくださいな。
http://sagaf2.com/js/base.js


まぁ、一応、韓国の翻訳サイトらしいので、naverという会社へ嫌悪感がない方は放置でも構わないかもしれないですが
今回試してみて、挙動が真っ当でははないので、うちでは弾くことにしました。
google翻訳なら、運営者が拒否することを想定しているので、このような挙動はしません。
Posted by 桜平真琴 at 2012年07月18日 19:06
桜平様

早速の回答ありがとうございます。
外部jsもよくわからないので、いちいち書き込むことにします。
手間かかってもいいです、何より盗用されてる気持ち悪さがあります。
本当に助かりました。
もしこちらのサイト様がなければ、何をされているのかわからないまま運営していたかと思うと
解析つけても読み込む力がないとダメですね。

ありがとうございました。
Posted by 匿名希望 at 2012年07月18日 21:56
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

※ブログオーナーが承認したコメントのみ表示されます。