• 締切済み

パスワード制限について

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とし拡張子など関係なくフォルダごとに同じパスワードを使用したいのですがどのようにしたらできるのでしょうか?

noname#65793
noname#65793

みんなの回答

  • 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

  • アクセス制限でパスワードが通らないのですが・・・

    ほとんど初心者です。わかりやすくお教えいただけると助かります。 .htaccessでアクセス制限をしたいのですが、IDとパスワードを 入力する画面にはなるのですが、パスワードが通らなくて困っています。いろいろ調べていたのですが、あるサイトでは、そういった場合.htaccessファイルの中の絶対パスが間違っている可能性があると書いてありました。.htaccessファイルはマイドキュメント内のフォルダに入っているのですが。絶対パスの調べ方というのはあるのでしょうか?また他に原因が考えられるとしたら何かありますか? お分かりになる方いましたら、ご返答お願いします。

  • パスワード制限について

    javascriptでパスワード制限を掛けています。 (サーバーがjsしか使えない為) リンクをクリックするとプロンプトが表示されそこに パスワードを入力し適正であればリンク先のファイルを 表示させる仕様です。 【通常の動作】 パスワードを入力し適正であればroot/abc_data/hoge.pdf 【プロンプトが表示されない場合】 root/hoge.pdfとなるので該当ページがなく当然NotFoundになります。 現在のフォルダ階層は以下のようになっています。 root/index.html   |-abc(フォルダ)   |  |-index.html   |   |-abc_data(フォルダ)   |  |-hoge.pdf ・rootのindex.htmlのリンクに下記を記述 <a href="hoge.pdf" onclick="return pass(this);">リンク</a> ・root/abc/index.htmlに以下の記述 <html> <head> <script type="text/javascript"> location.href="../abc_data/"+location.search.replace(/^./,''); </script> </head> <body></body> </html> ・root/abc_data内にhoge.pdfを配置 動作については問題ないのですがユーザーの環境によりリンクを クリックしてもプロンプトが表示されない事があるようで ソースにどこかおかしい箇所があるのかな?と思い質問させて 頂きました。 ブラウザのjavascriptが無効に設定されている事を除き プロンプトが表示されないというケースを考えるとどのような事が 考えられるでしょうか?

  • ホームページのパスワード制限について(初心者です)

    ホームページ上で見つけた以下のソースを使って、簡易なパスワード制限を かけたいと考えています。 URLの一部をパスワードとして使用する方法だと理解しているのですが、 もうひと工夫したいと思い、質問させていただいています。 例えば、入力したパスワードの真ん中7桁を切り出す等して、 パスワード=URLの一部とならないような工夫はできないでしょうか。 (ソースにパスワードが記載されないようにもしたいです) <script type="text/javascript"><!-- function checkpw(){ var pswd = prompt("パスワードを入力してください:",""); location.href = pswd + ".htm"; } //--></script> <form><center> <input type="button" value="ログイン" onClick="checkpw();"> </center></form> 宜しくお願い致します。

  • アクセス制限について

    初めまして。 質問の内容ですが、www直下においてある.htaccessに動作確認の為自分のホストをdenyするように記述しても、フォルダBにあるファイルにアクセスできてしまいます。フォルダAのバナーは表示されなくなるのですが…。 ロボ避けが働かないと困るので、何とか機能させたいと思っています。ディレクトリの構成と内容は以下の通りです。 | .htaccess | フォルダA(直リンクバナーを置いています)   |-.htaccessなし | フォルダB(サイト本体です)   |-.htaccessあり | フォルダC(制限にかかった時表示するファイルを置いています)   |-.htaccessあり ==========直下の.htaccess=========== DirectoryIndex index.html .ht order allow,deny allow from all deny from xxx.xxx.xxx.xxx deny from 自分のホスト名 <Files ~ "^\.ht"> deny from all </Files> <Files robots.txt> order deny,allow allow from all </Files> ==========フォルダB=========== DirectoryIndex index.html .ht ErrorDocument 403 /フォルダC/403.html order allow,deny allow from all deny from yyy.yyy.yyy.yyy <Files ~ "^\.ht"> deny from all </Files> ====================== です。長くてすみません。 以前動作確認した時はちゃんと弾かれていたのですが、最近フォルダBにある.htaccessを編集した時に再度動作確認してみると弾かれなくなっていました。 フォルダBに自分のホストをdenyするように書くとちゃんと機能します。どの辺りをいじればいいでしょうか?

    • ベストアンサー
    • HTML
  • .htaccess によるパスワード認証

    [.htaccess]と、[.htpasswd]を使ってパスワード認証が必要なページを作成しました。 例) ・http:www.abc.com/cde/index.html  [cde]ディレクトリの中に[.htaccess]と、[.htpasswd]が置いてあります。  もちろん、そのおかげで[http:www.abc.com/cde/index.html]にアクセスするとID・パスワード聞いてくるのですが、  [http:www.abc.com/cde/fgh/index.html]、cdeより下の階層のファイルにアクセスした場合もID・パスワードを聞かれてしまいます。  ただ、下の階層でID・パスワードを聞かれるのは構わないのですが、  一度、[http:www.abc.com/cde/index.html]でID・パスワードを入力したのだから、それより下の階層ではIDパスワードを聞かれないような仕組みにする方法はありますか。

    • 締切済み
    • CSS
  • phpとhtaccessのリダイレクト

    aというフォルダの中のhtmファイルからphpファイルを通して bというフォルダの中のファイルにアクセスさせています。 htmファイルからのリンクはxxx.php?file=../b/xxx.xxxのようにしています。 bのフォルダがサーバ容量を圧迫しているのでbのフォルダを読み込むときだけ別サーバから読み込むよう.htaccessでリダイレクトを Redirect permanent b/ http://xxxxx.com/b/ のようにしました。 直接bのフォルダの中を読み込めばリダイレクトされるのですが、aのフォルダからphpを通してbのフォルダにアクセスするとリダイレクトされません。 どのようにすれば動作させることができるでしょうか?

    • 締切済み
    • PHP
  • 「CGI+Flash」の「BASIC認証パスワード制限システム(01)

    「CGI+Flash」の「BASIC認証パスワード制限システム(01)」に関して質問です。 配布CGIをダウンロード後、設定などを行っていた時の事なのですが、 「member」のフォルダ内に「.htaccess」のファイルが実在していませんでした。 あと、「.htaccess」のファイルだけで完成の所でした。 「.htaccess」のファイルだけは、自分で作成しないといけないのでしょうか? もし、自分で作成しないといけないなら、書き方などを教えて頂けませんでしょうか? また、配布されているのであれば、教えて頂けませんでしょうか? 書き方やどのように「BASIC認証パスワード制限システム(01)」のCGIと繋げれば良いのかが分かりません。 具体的に教えて頂ければ嬉しいです...

    • 締切済み
    • CGI
  • パスワードによるアクセス制限について

    ロリポップ!のサーバーでHPを運営しています。 ロリポップ!のマニュアル(http://lolipop.jp/manual/hp/htaccess-02/)を参考にして、 あるディレクトリにパスワード制のアクセス制限をかけました。 このアクセス制限をかけてから数日ほど経ちますが、 アクセス制限をかけたディレクトリ以下のアクセス履歴を参照したところ 多くの訪問者の方は、無事アクセスできているようです。 ですが本日、とある方から、 ユーザー名・パスワード共に正しいものを入力したにも関わらず、 アクセスが出来ないとの連絡を頂きました。 なぜその方はアクセス出来なかったのか、理由が分からず困っています。 正しいユーザー名・パスワードを入力しても、一部の方のみ アクセス出来ないということにはどんな原因が考えられるのでしょうか。 HPを運営している身でありながら知識が足りなくて申し訳ありませんが、 原因について何かご存知の方は回答をどうかよろしくお願いします。

  • INDEXは表示、リンク先以降にパスワード

    CGI、SSI、.htaccess利用可能なさくらインターネットというサーバをレンタルし、主にサーバのファイルマネージャーを使ってサイトを作っています。 HTMLもサイト作成も初心者です。宜しくお願いします。 INDEX (.htaccessでロボットをブロック ここにパスワードのヒントを書く) ↓この間にパスワード画面が出てほしい HOME(サイト内容のトップ) と、こうしたいです。 INDEXページ以外のファイルは全てフォルダに入れており、そこに.htaccessでパスワードを設置しました。 /home/アカウント名/www   (元のアカウントは表示できないよう.htaccessで制限)    サイト全体のフォルダ  (ここにINDEXとロボット制限)        HOME以下のフォルダ   (ここに全ファイルと.htaccessと.htpasswd) ですが アクセスするとまずユーザー名、パスワードの入力画面が出て、表示させたいINDEXページの内容が出ません。 入力画面でキャンセルをすればページが見れるようになり、ユーザー名、パスワードを入れると正常にHOMEに入れます。 なにか良い解決策はないでしょうか。 あちこちのHTML解説サイトの見よう見まねで作成しているので、どのアクセス制限が問題なのかもわかりません…。 元のアカウントの制限には DirectoryIndex .ht AuthUserFile /home/アカウント名/www/.htpasswd AuthType Basic AuthName "Web access" Satisfy all Order deny,allow Allow from all INDEXにおいた.htaccessの最後に DirectoryIndex (INDEX名).html .ht AuthType Basic AuthName "Web access" Satisfy all Order deny,allow Allow from all HOMEの.htaccessの最後には ErrorDocument 403 /403.html ErrorDocument 404 /404.html ErrorDocument 500 /500.html AuthUserFile /home/アカウント名/www/(サイト全体フォルダ)/(HOMEフォルダ)/.htpasswd AuthType Basic AuthName "Web access" Require valid-user Satisfy all Order allow,deny Allow from all と記述しています。問題のあるところをご指摘していただきたいです。 自分なりに問題解決のため検索をかけ、さくらインターネットのルーティングは一癖あるという解説も読んだのですが、許容オーバーでわたしには難しく理解できませんでした…。 あと、エラーログでときどき INDEXページの背景画像や外部CSSが「user not found」でヒットしています。自分で確認したところ、ほとんどのブラウザは表示できているのですが、firefoxではできていないように思います。 こちらの改善策もできればお願いします。

  • .htaccessのRewriteRuleの設定

    Sabelというフレームワークでtest用プロジェクトを作成して、 testフォルダ  addonフォルダ  appフォルダ     ・     ・     ・  publicフォルダ   .htaccessファイル というフォルダ構造で、publicフォルダの中に.htaccessファイルがあり内容は [.htaccessファイル] <IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{REQUEST_URI} \/\..+$ RewriteRule .* /notfound [R,L] RewriteCond %{REQUEST_FILENAME} !-f RewriteRule !\.(js|ico|gif|jpg|png|bmp|swf|css|html)$ index.php [QSA,L] </IfModule> URLからのアクセスは、 http://localhost/test/public/index.php/index/index と入力するとちゃんとindexコントローラのページが表示できます(http://localhost/test/public/index.phpでもアクセスできます) ですが自分としては、 http://localhost/test/public/index/index とindex.phpを抜かしてアクセスさせたいのですが、 この.htaccessファイルのままでは、 「404 Not Found 該当するページが見つかりません。 ページは削除されたか、移動された可能性があります。 」 のページになってしまいます・・・ なにを記述すればindex.phpなしでアクセスできるようになるのでしょうか? Sabel ドキュメントとか(非公式) http://ebine.org/sabel/doc/index.html

    • 締切済み
    • PHP

専門家に質問してみよう