• ベストアンサー

javascriptでパスワードを保護する方法

blogではperl/cgiが使えない関係で、javascriptでパスワードを掛けることを考えています。 *.htmlに(方法1)の関数を書くとソースで丸見えになります。関数を*.jsで分離しても、*.jsの所在が判るのでダウンロードされたら終わりです。(frameを使ってソースを見え難くする事はできますが.....) (方法2)のファイル名をパスワードにする(方法2)は、(方法1)よりましですが不恰好です。(直接アクセスは防げませんがファイル名が無限設定できるのでPWDを知られるのと同じsecurity level) もっと他にsecurity levvelの高いパスワード保護法は無いでしょう? よろしくお願いします。 (方法1) function GetP(s) { if (s=="hoge") { location.href = "http://***/XXX.html" } else { alert("入力された暗証番号"+s+"は間違いです!!") } } (方法2) function getPassword(subdir, ext) { pw = prompt("パスワードを入力してください:","") if(pw) { location =subdir + pw + "." + ext } else { alert("パスワードが入力されていません") } }

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

  • ベストアンサー
noname#17489
noname#17489
回答No.10

http://www.imymode.com/exp/js03.html のような考え方でも出来ないことはないと思います。 暗号化/復号化には、 http://www.hcn.zaq.ne.jp/___/JavaScrypt/ (原文:http://www.fourmilab.ch/javascrypt/ ) が利用できるかもしれない。(ただ、動作が重いのでちょっと...)

参考URL:
http://www.imymode.com/exp/js03.html,http://www.hcn.zaq.ne.jp/___/JavaScrypt/
kahata
質問者

お礼

サイトの紹介ありがとうございました。 大変興味深く、参考・勉強になりました。

その他の回答 (9)

noname#19175
noname#19175
回答No.9

結局独自の暗号化スクリプトを作るか、DQ9さんの出されているURLのライブラリを使って、URLとパスワードを暗号化するくらいだと思います。 とはいえ、URLは復号できるものじゃないと、location.hrefに入れられないので、 パスワードはわからなくても、復号部分をとりだすことでURLを見つけられるんですけどね。(´・ω・`) つまり、解析を恐れながらlocation.hrefを使う時点で、パスワード=ファイル名の一択になるんじゃないでしょうか? パスワード=ファイル名というのは、 総当たりされるとサーバーへのアクセスが無駄に増えたりするので、あまり勧められたものではないんですけどね。 HTMLごと暗号化して、解析のやる気をなくさせるというのがベターだと思いますが、 あまりにやりすぎると、アクセスできないー>アクセスできないなら来る必要がない、つまり訪問者減少につながりかねませんので、ご参考まで。

kahata
質問者

お礼

ありがとうございます。 >結局独自の暗号化スクリプトを作るか、DQ9さんの出されているURLの >ライブラリを使って、URLとパスワードを暗号化するくらいだと思い >ます。 原理的には、自前であろうと既成であろうと、encode/decodeのスクリ プトを完全に隠蔽しない限り、プロのハッカーには五十歩百歩と思いま すが... >パスワード=ファイル名というのは、総当たりされるとサーバーへの >アクセスが無駄に増えたりするので、あまり勧められたものではない >んですけどね 総当りまで考えると原理的に全てのファイルが閲覧可能になります が、そんなヒマなことをする物好きがどれほど居るかだと思います。

  • UKY
  • ベストアンサー率50% (604/1207)
回答No.8

すみません。余計に誤解を招きそうなので私の先ほどの回答 (No. 7) の前半部分は撤回します。

  • UKY
  • ベストアンサー率50% (604/1207)
回答No.7

一つ誤解がないようにいっておきますけど、No. 4 の DQ9 さんが紹介されたスクリプトはソースコードの難読化によくある「JavaScriptのメソッドや配列を使って複雑にしているにすぎない」ものではありません。 で、パスワードをファイル名にする方法は古典的ですが確実なので私もこの方法を薦めます。 「長いファイル名だと不便なこと、同じパスワードで別のリンクを参照するときにはディレクトリを別にする必要がある」などの欠点 (?) はスクリプトを使えばある程度緩和できます。

参考URL:
http://www.geocities.jp/hiro00312/source/sample/011/index.html
noname#17489
noname#17489
回答No.6

パスワードで保護したい部分を暗号化して、利用者にパスワードを入力させたパスワードを用いて復号化するスクリプトを入れておけば多少はどうにかなります。 また、ファイル名をパスワードにするなら、パスワードとファイル名を連結させた文字列のハッシュを実際のファイル名にするといいかもしれません。管理が多少は自動化できそうです。 ハッシュを求めるのは#4の参考リンクで。

noname#22259
noname#22259
回答No.5

#4のURLのjsファイルを見ての感想: JavaScriptでパスワードを掛ける問題とHTMLのソースを見られない ようにする問題は、ひと頃のNGや掲示板で盛んに論じられた問題で、 古典的な結論の出ている問題といっても過言ではない。 どんなに隠蔽してもソースがそこにあるかぎり、絶対に解読されないと いうことはない。たかだか、JavaScriptのメソッドや配列を使って複雑 にしているにすぎない。パスワードを隠蔽する最も安全なコードは、 既に回答したことだが、何らかの文字列(エスケープ関数を経た文字 列でも)と照合するのではなく、リンク先をパスワードにするのが最も 隠蔽性が高いと思う。パスワードの更新も楽だ。

kahata
質問者

補足

ありがとうございます。一つの正解ですね。私もそう思います。ただあまり長いファイル名だと不便なこと、同じパスワードで別のリンクを参照するときにはディレクトリを別にする必要があるなどの特徴(欠点?)もあります。

noname#18558
noname#18558
回答No.4

これはどうですか。 絶対解けないと思います。

参考URL:
http://www.onicos.com/staff/iz/amuse/javascript/expert/
noname#19206
noname#19206
回答No.3

じゃぁ、HTMLのソースをJavaScriptで暗号化してみてはどうでしょう?少しは分かりにくくなります。 やり方がわかればソースを複合化することは簡単ですが、分からない人には有効です。

参考URL:
http://www.vector.co.jp/soft/win95/net/se342771.html,http://www.vector.co.jp/soft/win95/util/se341054.html
kahata
質問者

お礼

ありがとうございます。 こんなソフトがあると知りませんでした。色々応用できそうですね。 早速試してみたいと思います。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

サーバーサイドの仕組みがなければ何をやっても バレバレでしょう。 せめて.htaccessでもつかえれば別ですが。

kahata
質問者

お礼

正論正解です。.htaccessが使える本格的なサーバは別として、無料のblogで済まそうとしているのでこんな質問をしております。 せめて素人さんに簡単にはバレない方法があればよいのですが....

noname#22259
noname#22259
回答No.1

単純にテキストフィールドに入力させてから、 その値を拾って飛ばせばいいのでは? (パスワードはファイル名で) document.getElementById('inputId').value

kahata
質問者

お礼

ありがとうございます。 私のscriptより格好よくなりますね。

関連するQ&A

  • パスワード認証付きのページ

    簡単なパスワード認証付きのページを作成しています。 入力したパスワードが隠し文字の「*」で表示されず、普通に表示されてしまいます。 どのようにしたらよいでしょうか? 教えてください。 ======================================== <script language="JavaScript"> <!--// function Password() { pw = prompt("パスワードを入力してください:","") if(pw) { location = pw + ".html" } else { alert("パスワードが間違っています") } } //--> </script>

  • [jQuery] クリックで連番関数を順番に実行

    ボタンをクリックする度に連番で作成した関数を順番に実行したいのですが、スマートな書き方がわかりません。 下記のコードで一応動くのですが、関数が100個とかに増えた場合すごくコードが長くなってしまいます。 もっとスマートに書く方法はないものでしょうか? ▼サンプルコード <html> <head> <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script> <script> $(function(){ function s1(){alert('s1');}; function s2(){alert('s2');}; function s3(){alert('s3');}; var num = 1; $('p').click(function() { if(num == 1){s1();} else if(num == 2){s2();} else if(num == 3){s3();} num++; return false; }); }); </script> </head> <body> <p>click</p> </body> </html>

  • javascriptの簡易パスワード認証について

    javascriptでのパスワード簡易認証で、 次のようなスクリプトをネットからコピペしてホームページに使用しようとしました。 <script type="text/javascript"> function gate(){ // ▼ユーザの入力を求める var UserInput = prompt("パスワードを入力して下さい:",""); // ▼入力内容をチェック if( /W+/g.test(UserInput) ) { // ▼半角英数字以外の文字が存在したらエラー alert("半角英数字のみを入力して下さい。"); } // ▼キャンセルをチェック else if( UserInput != null ) { // ▼入力内容からファイル名を生成して移動 location.href = UserInput + ".html"; } } </script> しかし、上記のようにすると、パスを入力後に生成されるダイアログはデザインが質素で、がっかりしています。 「ぱすワードを入力してください」のダイアログボックスのデザインを良くするには、上記のプログラムをどう修正すればよいでしょうか?  そして、このダイアログは何故か、画面上部に表示されてしまいます。画面中央に表示するには、上記のjavascriptをどうすればよいでしょうか? せめて、「javascrptで可能か否か」だけでも教えていただければ幸いです。

  • リファラの抜け道

    <script> function jump(){if(document.referrer.indexOf("index.html")==-1){location.href="index.html";} else{alert("ok")}} </script> コレはリファラのソースです。 どうやったら、index.htmlに戻らずにアドレス入力でalert関数にたどり着けるのか教えてくださいよろしくお願いします。

  • JAVAで作るパスワード制ホームページの作り方

    以前JAVAを使った簡単なパスワード制のHPを作りました。 ですが、どこのサイトから下記のタグを持ってきたのか 自分で忘れてしまって・・・^^; ソースを見てパスワードがバレバレになりすぎないように 一工夫したのは覚えているのですが、 作成したのがかなり前のことだったので、パスワードの文字を示す65%とか26%が、 それぞれどの文字に対応するのかが自分でわからなくなってしまいました^^; ↓これが以前私がどこかから持ってきたタグです。 <html> <head> <title>タイトル</title> <SCRIPT language="JavaScript"> <!-- //パスワードのチェック関数 function enter(){ myPwd = prompt("パスワードを入れてね♪",""); if(myPwd == unescape("%6D%65%61%74%26%62%65%65%72")){ location.href = "***.html"; } else if(myPwd == null){ } else{ alert("パスワードが間違っています。"); enter(); } } //--> </SCRIPT> </head> <BODY onLoad="enter()"> HP作成に詳しい方いらっしゃいましたら、65%などがどのような意味を持つのか、 また、対応表などが書かれているURLなどを教えて頂けると助かります。 宜しくお願いします。

    • ベストアンサー
    • HTML
  • javascriptでわからないことがあります。

    javascriptで判定ボタンを押したらぐ偶数、奇数の判定をするプログラムを作っているのですが数値以外が入力されたら2回目のelse ifで「数値を入力してください」と表示したいのですが調べてもよくわかりません。 また、判定ボタンを押したときにテキストボックスの中が空白であったり、数値以外が入力された場合に「数値を入力してください」と表示しますが続けて偶数、奇数の判定もしてしまうので困っています。 ソースコードです↓ function han2(){ var frm_txt1=document.F1.han1.value; var frm_txt2=parseInt(frm_txt1); if(frm_txt2=="") { alert("数値を入力してください"); } else if() { alert("数値を入力してください"); } if(frm_txt2%2==0) { alert(frm_txt2+"は偶数です"); } else { alert(frm_txt2+"は奇数です"); } } 文章が下手ですみませんがよろしくお願いします。

  • 新しいウインドウの開き方

    1年前、OKWEBでパスワードを入力するとリンク出来るページの作り方を教えてもらい、使用してました。 そのリンク先のページを「新しいウインドウ」で表示させたいのですが、ビルダーの機能には方法が無いようです。 今の状況は↓です。お願いします。 <!-- function myEnter(){ myPassWord = prompt("パスワードを入力してください。",""); if ( myPassWord == "sra0304" )location.href = "http://www.リンク先.htm"; else alert( "パスワードが違いますよ~♪" ); } function myPrompt(){ prompt(" これが,prompt の入力ウィンドウです! ",""); } // -->

  • javascriptのパスワードっぽいもの

    現在入力したキーワードが合っていれば、リンクに飛ぶというページが作りたくて 苦闘しているのですが、「オブジェクトを指定してください。」というエラーが出て 上手くいきません。 考えてみても心当たりがないのですが、何がいけないのでしょうか? 以下にページのソースを記述いたしましたので、何かお気づきな点がございましたら、 ご教授いただければ幸いです。 よろしくお願いいたします。 <html> <head> <title>判定</title> <spript language = "JavaSpript"> <!-- function pass(moji) { if(moji==777){ location.href="link.html"; }else{ window.alert("間違ってます"); } } //--> </spript> </head> <body> <form name="form"> <input type="text" size="5" name="txt"> <input type="button" value="クリック" onclick="pass(document.form.txt.value)"> </form> </body> </html>

  • md5.jsとbase64.jsがスクリプトのJavaScriptのパ

    md5.jsとbase64.jsがスクリプトのJavaScriptのパスワード設定について、教えて下さい。 JavaScriptを扱っているサイトで、以下のを使用しているのですが、そのサイトであまり詳しい説明が書かれてないので四苦八苦しています。 契約しているサーバーのセキュリティー上、CGIとPHPが使えないので、JavaScriptを使用したいと思っています。 インデックスページに設置して、パスワードが通ったらトップページに移動するようにさせたいと思っています。 以下ので、どこが不備なのか分からないので、教えて下さい。 JavaScriptに関しては初心者なのですが、初心者で以下のは難易度が高いのでしょうか? また、md5.jsとbase64.jsそのものの設定が問題なのでしょうか? 本当に困っていますので、是非とも教えて下さい。 お願いします。 <html> <Head> <script language="JavaScript" src="md5.js"></script> <script language="JavaScript" src="base64.js"></script> <script language="JavaScript"><!-- var pwmd5 = ""; function passchk() { var pw; pw = document.f.passwd.value; pw = base64encode(pw); pw = MD5_hexhash(pw); if(pw ==pwmd5 ) else alert("パスワードが違います"); } // --> </script> <body> <form name="f"> <input type=text name="passwd"><input type=button value="入室" onClick="passchk()"></form></body> </Head> </html>

  • Javascriptの正規表現で変数を利用する方法

    入力データの文字数をチェックする汎用JavaScript関数を作りたいのですが、正規表現の中で変数を利用する方法がわからなくて困っています。 すみませんが分かる方がいらっしゃいましたら教えてください。 よろしくお願いします。 //================================ //入力データチェック関数 checkfield //引数1 data 入力データ //引数2 number 文字数 //================================ function checkfield(data, i) { if(data.match(/^[0-9]{number}$/)!=-1){ alert('NG'); }else{ alerl('OK'); } }