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

ホームページで管理者専用画面を作成し、
ページから、ログインIDとパスワードとIPアドレスが一致しないと
ログインできないページをPerlにて作成しました。

しかし、そのURLを直接入力してしまえば入れてしまいます。。。
それを防ぎたいのですが、

(編集ページ)edit.pl
<SCRIPT language="JavaScript">
<!--
myurl="http://domain.jp/login.pl";
ref=document.referrer;
function refcheck(){
if(ref.indexOf(myurl)<0){
window.location.href=myurl;
}
}
//-->
</SCRIPT>

JavaScriptでこれを指定したのですが、
ログインページからも弾かれ、直リンクも弾かれてしまいます。。。
どのようにすればいいのでしょうか・・・?

A 回答 (3件)

どこまで厳密に防ぎたいかにもよりますが、ブラウザによってdocument.referrerを返さないもの、またデバッガーなどでdocument.referrerを変更できます。



ですので手組するよりは、OSS等のCMSツールを利用されたほうがよいかと思います。
    • good
    • 0

ANo1です。



補足のスクリプトでやっていることは、逆のようにも見えますけれど…?

書籍やサイト等で紹介されているものを利用なさっていると思いますので、その解説を再度よくご覧になってみてください。

>のようにしていて、この状態で、実行すると
>alert(ref);が空欄で返ってきました。
ダイレクトでURLを指定した場合(ブックマークなどでも同様)はreffererは空文字を返します。
そのような場合や外部からのリンクを選別するのが目的でしょうから、『reffererが自サイト内であるか』どうかがチェックの対象になるのではないでしょうか?

全体構成を知りませんが、login.pl(=単一ページ)からかどうかをチェックするのではなく、自サイト(=ドメイン以下可能なディレクトリまで)であることをチェックしたいのではないでしょうか?

>のようにしていて、この状態で、実行すると
>alert(ref);が空欄で返ってきました
上述のようにrefreshで再読み込みをするとreferrerは空白になってしまいますので、その設定を維持する限りは、ご提示の方法ではブックマークなどからの遷移とは区別はできないと思います。
とは言っても、refreshの設定(なぜ必要なのかも不明ですが)をしているページって、login.plだけではないのですか?
(login.plのページは、直リンを弾かなくても良いページなのでは???)
    • good
    • 0

こんにちは



うまくいかない理由を調査するために・・・
一時的に、
alert(ref);
とでもして、referrerが実際にどのような値になっているかを調べてみるとわかると思います。
referrerなので、そのページを表示する前の経路をいくつか変えてテストしてみたほうが良さそうですね。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます!

<SCRIPT language="JavaScript">
<!--
myurl="login.pl";
ref=document.referrer;
function refcheck(){
if(ref.indexOf(myurl)<0){
window.location.href="myurl="http://domain.jp/login.pl";";
}
}
//-->
</SCRIPT>

このようにして、解決はしたのですが、
少し疑問があります。
ログインのページで
<meta http-equiv="REFRESH" content="5;URL=http://domain.jp/login.pl/'">
のようにしていて、この状態で、実行すると
alert(ref);が空欄で返ってきました。

上のコードにして、このメタを取り除くことにより
直でリンクできず、ログインページからしか入れませんでした。

このメタを指定しているとダメなのですか?;;

お礼日時:2017/04/19 15:44

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