• 締切済み

パスワード制限について

CGIや.htaccessが使えないサーバーのためjavascriptにてアクセス制限を掛けたいと思っております。 通常であれば以下のようなソースでできると思うのですが function check(){ var pswd = prompt("パスワードを入力して下さい:",""); location.href = pswd + ".html"; } この場合だとパスワード.htmlとなるのですが今回やりたいことはちょっとややこしいもので説明不足であれば申し訳ないのですがどのようにしたいかというと index.htmlの同階層にfile_a,file_bのフォルダを作ります。 各フォルダの中に.docや.pdfなどhtml文書ではないものを複数入れてあります。具体的には以下のような構造です。 index.html |-file_a |  | | .docや.pdfファイル |-file_b |  | | .docや.pdfファイル この状態でfile_a内のファイルにアクセスする時はパスワードをabcとしfile_b内のファイルにアクセスする時はパスワードをefgとし拡張子など関係なくフォルダごとに同じパスワードを使用したいのですがどのようにしたらできるのでしょうか?

みんなの回答

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.5

match修飾が passtext+"/index.html?"も含めた形でされてしまっているためでしょう var ss = passtext+"/index.html?"; ss += obj.href.match(/([^\/]*)$/)[1]; location.href = ss; return false; といった具合に分割してみてはいかがでしょう 最後に return false; を追加して Aタグのhrefが機能しないようにしたほうが良いようです 呼び出しも onclick="return passcheck(this);" のほうが良いでしょう

noname#65793
質問者

お礼

教えて頂いた内容で動作正常になりました!ずっと悩んでいたので本当に助かりました。 いろんな方に教えて頂きやっと解決です。皆さんありがとうございました!

  • steel_gray
  • ベストアンサー率66% (1052/1578)
回答No.4

構成の確認をしてください。 index.html(各ファイルへのリンクがあるhtml) ┣<abc> ┃┗index.html(回答#1の振り分けhtml) ┣<def> ┃┗index.html(回答#1の振り分けhtml) ┣<file_a> ┃┗test.pdf ┣<file_b> ┃┗test.doc あと、うまくいかないのとは無関係ですが、 function passcheck は一回書けばOKです。(リンクの数やパスワードの数に応じて増やさなくてもいいです)

noname#65793
質問者

補足

index.html(各ファイルへのリンクがあるhtml) ┣<abc> ┃┗index.html(回答#1の振り分けhtml) ┣<def> ┃┗index.html(回答#1の振り分けhtml) ┣<file_a> ┃┗test.pdf ┣<file_b> ┃┗test.doc 構成は確認しましたが間違いありません。 試しに/abc/index.htmlを直接開くとfile_a内のファイルを表示し /def/index.htmlを直接開くとfile_b内のファイルを表示します。 複数のリンクをする際にはfunctionを増やせばいいと思っていたのですが >function passcheck は一回書けばOKです。とのことでindex.htmlを以下のように修正しました。 <script type="text/javascript"> function passcheck(obj){ var passtext = prompt("パスワードを入力して下さい:",""); location.href=passtext+"/index.html?"+obj.href.match(/([^\/]*)$/)[1]; } </script> <a href="test.pdf" onclick="passcheck(this)">pdf</a> <a href="test.doc" onclick="passcheck(this)">doc</a> この状態でテキストリンクをクリックしプロンプトにabcまたはdefとパスワードを入力したのですが hoge.com/file_a/test.pdfではなくhoge.com/test.pdfが開いてしまいます。

  • steel_gray
  • ベストアンサー率66% (1052/1578)
回答No.3

#1です。 zipにしたら、って提案は複数のファイルを一つに、って事ではなくて、 ・Javascriptによるパスワード制限は「無理やり感」があってセキュリティも高くない事、 ・通常のリンクならリンク先をダウンロード、とかを選ぶ事もできるけど、仕掛けを入れると環境によっては常にブラウザ上で開いてしまう不便さを嫌ったので。(逆にブラウザ上で開く事はできなくなるんだけど、あんまり問題ないかなぁって…感覚は私的なものかもしれませんが) スクリプトの改造ですが、hrefはuriを返すのでファイル名部分を抜き出すようにしてやります。 location.href=passtext+"/index.html?"+obj.href.match(/([^\/]*)$/)[1];

noname#65793
質問者

補足

お返事ありがとうございます。 以下ように変更してみたのですがなぜかうまくいきません。 どこが悪いかもわからない状態です・・・ <script type="text/javascript"> function passcheck(obj){ var passtext = prompt("パスワードを入力して下さい:",""); location.href=passtext+"/index.html?"+obj.href.match(/([^\/]*)$/)[1]; } function passcheck2(obj){ var passtext = prompt("パスワードを入力して下さい:",""); location.href=passtext+"/index.html?"+obj.href.match(/([^\/]*)$/)[1]; } </script> <a href="test.pdf" onclick="passcheck(this)">pdf</a> <a href="test.doc" onclick="passcheck2(this)">doc</a> リンクをクリックするとプロンプトが開くのですがパスワードを入力すると認識できないようです。 通常であればパスワードがabcとするとhoge.com/abc/test.pdfが開くのですが現状は、hoge.com/test.pdfを開いてしまいます。 宜しくお願い致します。

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.2

アンカータグ Aのvalueプロパティは無いので hrefなどを使うといいでしょう function passCheckPDF(obj) {   var passtext = prompt("パスワードを入力して下さい:","");   location.href=passtext+"/index.html?"+obj.href; } と言った具合です # 字下げ(インデント)は全角スペースです

  • steel_gray
  • ベストアンサー率66% (1052/1578)
回答No.1

提案。 リンク先がhtml以外ならば パスワード付きのzipにしてダウンロードそのものは普通に出来るようにしておいては? パスワード付きのzipは自動解析プログラムでパスワードが抜かれる可能性があるからパスワードをめちゃくちゃ長くしておく。 長いパスワードの解析には数日かかるから諦めてくれるでしょう。 で、javascriptを使った案は以下。 ■リンク元 □javascript <script type="text/javascript"> function passcheck(obj){ var passtext = prompt("パスワードを入力して下さい:",""); location.href=passtext+"/index.html?"+obj.value; } </script> □リンクする為のボタン <input type="button" value="xxxx.pdf" onclick="passcheck(this)"> ■パスワードからの振り分けhtml パスワードを「abc」にしたければ、元のhtmlと同じ階層に「abc」という名前でディレクトリをつくり、 その中にindex.htmlを置く index.htmlの内容 <html> <head> <script type="text/javascript"> location.href="../file_a/"+location.search.replace(/^./,''); </script> </head> <body></body> </html>

noname#65793
質問者

補足

お返事ありがとうございます。 特にまとめてダウンロードさせたいわけではなく詳細は、 index.htmlが1つありサイト全体で20程度のhtml以外のファイルがあります。(全てindex.htmlからリンクされている) 全体で20のファイルでも例えば5個のファイルへのアクセス(拡張子は関係なく)はパスワードをabcとし 8個のファイルへのアクセス(拡張子は関係なく)はパスワードをefgとし・・・ と複雑な内容になっているのでこの際、フォルダで区別させたほうが早いものかと思い質問させて頂きました。 早速ですが教えて頂いた方法を試してみたところ成功でした! <script type="text/javascript"> function passcheck(obj){ var passtext = prompt("パスワードを入力して下さい:",""); location.href=passtext+"/index.html?"+obj.value; } function passcheck2(obj){ var passtext = prompt("パスワードを入力して下さい:",""); location.href=passtext+"/index.html?"+obj.value; } </script> <input type="button" value="test.pdf" onclick="passcheck(this)"> <input type="button" value="test.doc" onclick="passcheck2(this)"> とすると正常にリンクするのですが <a href="test.pdf" onclick="passcheck(this)">pdf</a> とテキストリンクにしたいのですがどうもうまくいきません。 location.href=passtext+"/index.html?"+obj.value; としているので問題はそこだと思うのですが応用の方法がわからずで引き続き教えて頂ければと思います。

関連するQ&A

専門家に質問してみよう