• ベストアンサー

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より格好よくなりますね。