• ベストアンサー

SWFファイルに直リンクできなくする方法はありますか?

mail.swfファイルという外部ファイルがあったとして WEBサイトのアドレスがhttp://www.*****.com/ だとします。 http://www.*****.com/の最後にmail.swfを 付け足して、 http://www.*****.com/mail.swfとしてアクセスされると その外部ファイルに直リンクされてしまうと思うのですが これを防ぐ方法はりますか?

質問者が選んだベストアンサー

  • ベストアンサー
noname#35109
noname#35109
回答No.3

外部サーバのHTMLからの Flash のリンク貼り付けではなく, リンクからの直アクセスだったのですね。 Flash 作成ソフトをお持ちでなければできないことですが,私は以下のように対処しています。 いつもこんなことをしているわけではありませんが, 事情があって,以下のようにした経験はあります。 Flash 作成ソフトをお持ちでなければすみません。以下は参考にはなりません。無視してください。 ある変数が整った時だけ,gotoAndPlay(); などをするようにしておけば良いと思います。 gotoAndPlay(); か何かはわかりません。 とにかくある変数にちゃんとした値が入ったときだけ,SWFファイルをマトモに動かせるようにすれば良いのです。 ===方法1================= まず,「mail.swf」の置き場所ですが, http://www.*****.com/flash/mail.swf などHTMLとは違うフォルダ内に置きます。 flash でも何でも良いですが,HTMLとは違うフォルダ内に SWF を置きます。 それと,それを読み込む同じステージのサイズのSWFを作ります。 名前を「index.swf」としておきます。 そして,同じフォルダに置きます。 http://www.*****.com/flash/index.swf 「index.swf」ですが, ステージの左上に小さなムービークリップを作って, そのムービークリップにインスタンス名を付けます。 ここでは,インスタンス名を yomikomu_mc とでもしておきます。 そして,タイムラインの フレーム1 に, ------------------------------------ hensuu = "xyzabc"; _root.yomikomu_mc.loadMovie("flash/mail.swf"); ------------------------------------ と書きます。 これで,mail.swf が yomikomu_mc に読み込まれます。 loadMovie("flash/mail.swf"); ですが,この flash/mail.swf は,HTML から見たときのパスになります。 次に「mail.swf」ですが, フレーム1に以下のように書きます。 ------------------------------------ stop(); if (_parent.hensuu == "xyzabc"){ gotoAndPlay(2); } else { stop(); } ------------------------------------ _parent(親) の 変数hensuu の値が "xyzabc" でない限り,再生しないということです。 これで, http://www.*****.com/flash/mail.swf に直アクセスされても,親(index.swf)が存在しないため,Flash は再生されません。 http://www.*****.com/flash/index.swf に直アクセスされても,そこには, loadMovie("flash/mail.swf"); と書かれてあるため, http://www.*****.com/flash/flash/mail.swf をロードしようとします。 そんなところには「mail.swf」は存在しないため何も表示されません。 これは,直アクセスだけでなく,外部からのリンク貼り付けでも有効です。 ===方法2================= これは,直アクセスの時のみ有効な手段です。 外部HTMLへなどのリンク貼り付けには有効ではありません。 FlashVars を使います。 http://www.macromedia.com/jp/support/flash/ts/documents/fl0284.html OBJECTタグ内に, NAME=FlashVars VALUE="hensuu=xyzabc" を付け加え, EMBEDタグ内に, FlashVars="hensuu=xyzabc" を付け加えます。 そして, 次に「mail.swf」フレーム1に以下のように書きます。 ------------------------------------ stop(); if (hensuu == "xyzabc"){ gotoAndPlay(2); } else { stop(); } ------------------------------------ 変数hensuu の値が "xyzabc" でない限り,再生しないということです。 ひょっとしたら,フレーム1 では FlashVars によって変数がFlash内に届いていない可能性もありますから, フレーム2 くらいに上のスクリプトを書く方が無難かもしれません。 直アクセスでは,再生されません。 リンク貼り付けでは,タグを真似されると貼り付けされてしまいます。 最初に書きましたが,方法1も2も Flash 作成ソフトを持っている場合の話です。 お持ちでなければ,ちょっとわかりません。 使ったことはないですが, .htaccess などでしょうかね。

noname#124617
質問者

お礼

sassakunさまありがとうございます。 こんな方法もあるのですね!ほんと勉強になります。 .htaccessは私のサーバーでは使えないようなので、sassakunさま の方法1を試してみます。 本当にありがとうございました。

その他の回答 (3)

  • DM9
  • ベストアンサー率37% (43/115)
回答No.4

.htaccessを使って、拡張子.swfを含むファイルへのアクセスはhttp://www.*****.com/をリファラに含まないとforbiddenを返すという設定にしとけばいいです。余談ですが、同様のパターンで、画像への直リンクやダウンロードファイルへの直リンクをはじくことができます。 しかし、これにはひとつ問題点が ... 昨今のセキュリティソフトの中にはリファラを吐かないヤツがあるんです。それがどの程度の割合で無視できるレベル以下なのかどうか私は把握していません。

noname#124617
質問者

お礼

ご教授ありがとうございます。 やはり.htaccessを導入することにしました。 ありがとうございました。

  • chie65536
  • ベストアンサー率41% (2512/6032)
回答No.2

補足。 過去のQ&Aを検索してみたところ http://www.yuzuriha.sakura.ne.jp/~akikan/kaigai/kaigai21.html と言うのがありました。

参考URL:
http://www.yuzuriha.sakura.ne.jp/~akikan/kaigai/kaigai21.html
noname#124617
質問者

補足

.htaccessというのは便利そうですね! もう少し詳しく説明いたしますと、 index.htmlのenterを押すとポップアップでメインのFlashの ページが読み込まれる感じなのですが、indexページで仮に メインのSWFファイルにhttp://www.*****.com/main.swfのような 感じでアクセスされるのがなんか嫌でして。(このようなユーザー は稀だと思いますが。)

  • chie65536
  • ベストアンサー率41% (2512/6032)
回答No.1

自作CGIが設置出来れば可能です。 ./cgi-bin/swfread.cgi にCGIを設置し、htmlに記述する場合は、 http://www.*****.com/swfread.cgi?file=mail.swf とします。 このCGIの中ではHTTP_REFERERが自サイト内を指しているか判定します。 自サイト内であれば、CGIで 「Content-Type: application/futuresplash」 「(空行)」 の2行をを出力した後、fileパラメータで指定されたファイル(swfファイル)の実体をcatコマンド等で標準出力へ出力します。 そうでない(HTTP_REFERERがない、HTTP_REFERERが空文字、自サイトでない)場合は 「Content-Type: text/html」 「(空行)」 「<HTML></HTML>」 の3行を出力します。 これで、自サイト内以外からリンクされたり、URLの直打ちを防止出来ます。

noname#124617
質問者

補足

ご教授ありがとうございます。 BBSやmailフォームのCGIはいじったことがあるのですが、 chie65536のおっしゃる方法はその程度の知識では難しい ですよね?