アプリ版:「スタンプのみでお礼する」機能のリリースについて

mail.swfファイルという外部ファイルがあったとして
WEBサイトのアドレスがhttp://www.*****.com/
だとします。

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

A 回答 (4件)

外部サーバの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/do …

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 などでしょうかね。
    • good
    • 0
この回答へのお礼

sassakunさまありがとうございます。

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

本当にありがとうございました。

お礼日時:2006/01/28 15:09

.htaccessを使って、拡張子.swfを含むファイルへのアクセスは

http://www.*****.com/をリファラに含まないとforbiddenを返すという設定にしとけばいいです。余談ですが、同様のパターンで、画像への直リンクやダウンロードファイルへの直リンクをはじくことができます。

しかし、これにはひとつ問題点が ...

昨今のセキュリティソフトの中にはリファラを吐かないヤツがあるんです。それがどの程度の割合で無視できるレベル以下なのかどうか私は把握していません。
    • good
    • 0
この回答へのお礼

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

ありがとうございました。

お礼日時:2006/03/18 22:33

補足。



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

参考URL:http://www.yuzuriha.sakura.ne.jp/~akikan/kaigai/ …

この回答への補足

.htaccessというのは便利そうですね!

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

補足日時:2006/01/28 04:55
    • good
    • 0

自作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の直打ちを防止出来ます。

この回答への補足

ご教授ありがとうございます。

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

補足日時:2006/01/28 04:48
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!