現在、<script type=”text/javascript”>

<!--
var keyword = ”0000”
function key(){
var key = prompt(”パスワ−ドプリ−ズ!”,””)
if(keyword != key)
location.href=”http://www.withmama.info/
}
key()
// -->
</script>
というもので、htmlページにパスワード制限をしていますが、この場合は「0000」を入力すると、これが置いてあるhtmlページが開きます。この仕組みでもうひとつパスワードを追加して、「0000」と「oxoxo」の二つを使うようにするには、どうしたらよいでしょうか?

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2005/03/08 07:54:29
  • 終了:--

回答(13件)

id:FMR No.1

FMR回答回数406ベストアンサー獲得回数02005/03/08 09:00:57

ポイント19pt

http://www.hatena.ne.jp/1110236069

現在、<script type=”text/javascript”> <!-- var keyword = ”0000” function key(){ var key = prompt(”パスワ−ドプリ−ズ!”,””) if(keyword != key) location... - 人力検索はてな

<script type=”text/javascript”>

<!--

var keyword = ”0000”

var keywords = ”oxoxo”

function key(){

var key = prompt(”パスワ−ドプリ−ズ!”,””)

if(keyword != key || keywords != key )

location.href=”

http://www.withmama.info/

withママへ、ようこそ!

}

key()

// -->

</script>

これでどうでしょう

id:kgi No.2

kgi回答回数34ベストアンサー獲得回数02005/03/08 09:42:46

ポイント19pt

こんな感じでしょうか。

var keyword = ”0000”;

var keyword2 = ”oxoxo”;

function key(){

var key = prompt(”パスワ−ドプリ−ズ!”,””);

if(keyword != key || keyword2 != key) {

location.href=”

http://www.withmama.info/

withママへ、ようこそ!

”;

}

}

id:Chaborin No.3

ちゃぼりん回答回数189ベストアンサー獲得回数72005/03/08 10:04:34

ポイント19pt

質問の答えは以下の通りです:

<script type=”text/javascript”>

<!--

var keyword = ”0000”

var keyword2 = ”oxoxo”

function key(){

var key = prompt(”パスワ−ドプリ−ズ!”,””)

if((keyword != key) && (keyword2 != key))

location.href=”

http://www.withmama.info/

withママへ、ようこそ!

}

key()

// -->

</script>

このスクリプト、パスワード制限が簡単に突破されてしまうのはご存じですよね?老婆心ながら一応…

id:english No.4

english回答回数304ベストアンサー獲得回数02005/03/08 10:12:42

ポイント19pt

http://www.broadband-xp.com/hidesource/

HTMLソースを隠す方法

「”」は全角文字ですね。半角の「”」を使わないと動かないはずです。これは「はてな」のシステム上で変換しているのかもしれませんが・・・。

下記のソースで動くはずです。

<script type=”text/javascript”>

<!--

var keyword = ”0000”;

var keyword_b = ”oxoxo”;

function key(){

var key = prompt(”パスワ−ドプリ−ズ!”,””);

if(keyword != key & keyword_b != key)

location.href=”

http://www.withmama.info/

withママへ、ようこそ!

”;

}

key();

//-->

</script>

ただし、これをHTMLファイルのヘッダー部分に入れていると、ソースを除けばパスワードが丸わかりですので、パスワードの役割を果たさないような気がします。HTMLソースの暗号化を行えば幾分、この問題は緩和されるでしょうが、パスワードでの制御をお考えなら、CGIによる認証もしくは.htaccessによる認証をオススメします。

http://www.shtml.jp/htaccess/

.htaccess実践活用術

id:katzumi No.5

katzumi回答回数24ベストアンサー獲得回数02005/03/08 12:01:53

ポイント19pt

http://www.forest.impress.co.jp/article/2001/12/04/okiniiri.html

窓の杜 - 【今日のお気に入り】HTMLを暗号化する「XORHTML」v1.0

こんなかんじでしょうか?IEとFireFoxで確認しました。

>> ここから

var keylist = new Array(”0000”, ”oxoxo”);

function key() {

var key = prompt(”パスワ−ドプリ−ズ!”,””);

for (i in keylist) {

if (keylist[i] == key) {

return;

}

}

location.href = ”

http://www.withmama.info/

withママへ、ようこそ!

”;

}

<< ここまで

ただパスワードをJavaScriptで書くのはお勧めしません。

本来ならBASIC認証やcgi等でパスワードを管理したほうがよいです。

参考URLはHTMLを暗号化するソフトです。

id:izayoimizuki No.6

izayoimizuki回答回数302ベストアンサー獲得回数02005/03/08 12:07:52

ポイント19pt

<script type=”text/javascript”>

<!--

var keyword = ”0000”

var keyword2 = ”1111”

function key(){

var key = prompt (”パスワ−ドプリ−ズ!”,””)

if (keyword != key && keyword2 != key) {

location.href = ”

http://www.withmama.info/

withママへ、ようこそ!

}

}

key ()

// -->

</script>

といった感じでしょうか。

ソースを見ればパスワードが丸見えなので

制限の効果は無いですよ。

id:typista No.7

typista回答回数359ベストアンサー獲得回数72005/03/08 12:10:09

ポイント18pt

以下のような記述で可能です。

keywordは、配列としているので、例のようにパスワードを3つ以上追加していくことも可能です。

→ パスワードの個数は keyword.length になります。

<script type=”text/javascript”>

<!--

function key(){

var keyword = new Array(”0000”,”oxoxo”,”abc”);

var key = prompt(”パスワ−ドプリ−ズ!”,””);

var flag = false;

var i;

for( i = 0; i < keyword.length; i++ ) {

if( keyword[ i ] == key ) {

flag = true;

}

}

if( flag != true ) {

location.href=”

http://www.withmama.info

withママへ、ようこそ!

”;

}

}

key();

// -->

</script>

id:aki73ix No.8

aki73ix回答回数5224ベストアンサー獲得回数272005/03/08 14:43:46

ポイント18pt

ソースにパスワードを書いたのでは、JavaScript を一度無効にしてしまえば、パスワードが分かってしまって意味がありません

まず、1番目のURL

<HTML>

<meta http-equiv="Content-Type" content="text/html; charset=shift_jis">

<BODY>

<SCRIPT LANGUAGE="javaScript">

var PS="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";

var PSCount=PS.length;

function Encode(inp){

var s1="",result="";

m=inp.length;

for(i=1;i<=m;i++){

j=Math.floor((Math.random()*1000000)%PSCount);

s1=s1+PS.substr(j,1);

k=(inp.charCodeAt(i-1)-0x21);

l=j+(k%10)+i;

l=l%PSCount;

s1=s1+PS.substr(l,1);

j=Math.floor((Math.random()*1000000)%PSCount);

s1=s1+PS.substr(j,1);

l=j+Math.floor(k/10)+i;

l=l%PSCount;

s1=s1+PS.substr(l,1);

}

while(s1.length){

result=result+s1.substr(0,1)+s1.substr(s1.length-1,1);

s1=s1.substr(1,s1.length-2);

}

return result;

}

</SCRIPT>

<FORM name="ENC" action="#">

元のパスワード<input name="inp"><BR>

暗号化<input name="out" size="64"><BR>

<input type=button value="暗号化" onclick="JavaScript:document.ENC.out.value=Encode(document.ENC.inp.value);">

</form>

</BODY>

</HTML>

で、暗号化パスワードを作った上で

<HTML>

<HEAD><TITLE></TITLE>

<meta http-equiv="Content-Type" content="text/html; charset=shift_jis">

<SCRIPT LANGUAGE="javaScript">

var PS="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";

var PSCount=PS.length;

function Decode(){

var keyword1="";

var s1,s2,result,safe=0;

var inp=new Array(’AJGE4S6Je9l5F1It’,’xI66058syz7nouyjg8ry’); //ここに暗号化したパスワード

key=prompt("パスワードプリーズ","");

for(keys=0;keys<inp.length;keys++){

len=inp[keys].length;

result="";

s1=inp[keys];

s2="";

i=0;

while(s1.length){

s2=s2.substring(0,i)+s1.substring(0,2)+s2.substring(i,9999);

s1=s1.substring(2,9999);

i++;

}

i=1;

while(i<=len){

l=PS.indexOf(s2.substr(i,1))-PS.indexOf(s2.substr(i-1,1))-Math.floor(i/2)+result.length-1;

while(l<0){

l+=PSCount;

}

l2=PS.indexOf(s2.substr(i+2,1))-PS.indexOf(s2.substr(i+1,1))-Math.floor(i/2)+result.length-1;

while(l2<0){

l2+=PSCount;

}

result=result+String.fromCharCode(0x21+l+l2*10);

i+=4;

}

if(key==result)safe=1;

}

if(!safe)location.href="

}

Decode();

</SCRIPT>

</HEAD>

<BODY>

<SCRIPT LANGUAGE="javaScript">

<!--

var contents=’¥

こんにちは<BR>¥

<IMG SRC="image.gif">¥

’;

document.write(contents);

// -->

</script>

<noscript>

読めません

</noscript>

</BODY>

</HTML>

というような形にして

<BODY></BODY>の中を

document.writeなどで書くようにして、JavaScriptを無効にしていると読めないようにしておくと良いと思います

var inp=new Array(’AJGE4S6Je9l5F1It’,’xI66058syz7nouyjg8ry’); //ここに暗号化したパスワード

の行に暗号化したパスワードを増やすことによって、パスワードを増やすことができます

なお、ソース内の ¥と’が全角に化けているので注意してください

id:ikairoku No.9

ikairoku回答回数8ベストアンサー獲得回数02005/03/08 21:00:09

ポイント18pt

var keyword = ”0000”

の下に

var keyword2 = ”oxoxo”;

を追加して

if(keyword != key)

if(keyword == key||keyword2 == key)

に置き換えます。

id:ozaki

ソースを簡単に見られてしまうというご指摘がありましたので、以下「簡単に見られないやり方」を教えてください。具体的に記述していただければ、ありがたいのですが・・・。

2005/03/08 22:44:29
id:dasm No.10

dasm回答回数66ベストアンサー獲得回数02005/03/08 23:49:12

ポイント18pt

初めに申し上げておきますが、JavaScript による完全に安全な認証は無理といって

過言ではないでしょう。

今までに挙がった回答全て、簡単にパスワードが見破られてしまいます。

特に 8 番目の回答者はダラダラ長い回答をしていますが、(はてなにより削除しました)、この回答による認証も簡単に破られてしまいますので気をつけて下さい。

それでも JavaScript で認証を行いたい場合に、ファイル名を password とする

方法もありますが(二番目の URL)、これも google などで捕捉されたら終わり

なので、完全というわけではありません。

より安全な認証をしたければ、.htaccess による認証(三番目の URL)や ssl を

通したり、或いは CGI による認証をお勧めします。

最後に、この質問はキャンセルした方がよいでしょう。

http://allabout.co.jp/computer/hpcreate/closeup/CU20041220A/

簡単閲覧制限!JavaScriptでパスワード認証 - [ホームページ作成]All About

http://www.shtml.jp/htaccess/basic.html

.htaccessでBasic認証にチャレンジ

id:mady No.11

mady回答回数86ベストアンサー獲得回数02005/03/10 13:06:08

ポイント18pt

http://www.microsoft.com/japan/msdn/library/default.asp?url=/jap...

ご指定のページが見つかりません

10.回答者:dasmさんの言うような「JavaScriptによる完全に安全な認証」は絶対に無理です。

というかそもそも、どんなシステムを利用しても、どんなにコストと時間をかけても「完全に安全な認証」を構築することに成功した例は人類史上存在しないし、これからも存在し得ないでしょう。

守るべき対象に対し、どの程度のコストをかけどの程度の安全度を保つべきかという判断が重要になります。

質問は「JavaScriptを使用した認証において簡単に見られないやり方」だと思います。であるので、その方法として挙げられるのは、8.回答者:aki73ixさんの言うような方法がなかなかいいと思います。

その上で、スクリプトエンコーディングをするなどすると、より安全度が高まります。ただし、使用できるブラウザがIEに限られてしまいます。

http://www.microsoft.com/downloads/details.aspx?FamilyID=2976ee9...

ダウンロードの詳細 : Windows Script Encoder

id:mady No.12

mady回答回数86ベストアンサー獲得回数02005/03/10 16:01:42

ポイント18pt

10.回答者:dasmさんの「特に 8 番目の回答者はダラダラ長い回答をしていますが、(はてなにより削除しました)」の意味がいまさらわかりました。

先ほど「8.回答者:aki73ixさんの回答でも対応可能」という趣旨の文章を書きましたが、間違いでした。ソース自体が意味の無いダミーコードです。

このソースでは「暗号」はランダムに行われ、毎回異なる「暗号」を行い、複合が不可能なので、どんな文字列も許可されてしまうようになっていました。

ソースの解析もせずに無条件で「使える」等と無責任なことを言ってしまいすみませんでした。

いまさらですが、暗号化されたパスワードをソースに書いておき、入力された文字列も暗号化し比較するという仕組みでもいいかと思います。

暗号化するのは比較的容易であるが、複合化するのが困難(時間がかかる)ロジックにするとセキュリティが高くなります。

セキュリティの度合いは非常に低いのですが、パスワードをbase64エンコーディングしたものをソースに書き、入力文字列もbase64エンコーディングしたのち、両者を比較するという方法にすると非常に簡単にできます。

id:aki73ix No.13

aki73ix回答回数5224ベストアンサー獲得回数272005/03/10 21:57:32

ポイント18pt

前回の回答に簡単に見破れるとの指摘もありますが、机上計算で見破れる人はいないので安心してください

前回のソースの欠点は、ソースを見れば、表示はできないものの、大体どういうことが書かれているかはわかってしまうことです

また、そこからのリンクがあれば、リンク先に飛ぶことで、パスワードの意味がほとんどなくなってしまうことですね

そこで、もう少し、セキュリティを高くしたいということですので、次のようなロジックに強化してみました

・まず、見れるサイトの中は秘密のURLにしておきます

・URLとパスワードを混ぜたものを暗号化して作成します

・それを正しいパスワードのときだけ復号します

・パスワードが正しければ、復号できたアドレスにジャンプ、間違っていれば、エラー先に飛ばします

暗号のロジックはそれほど複雑ではありませんが、机上計算では確かめることができないので、簡単にはパスワードが分からないようになっています

飛び先のアドレスが、どこかに漏洩してしまった場合は

アドレスを変更することで通知したパスワードを変えなくても良いというメリットがあります

一番上に、ソースファイルをまとめたファイルが入っています

hatena122b.htm 暗号化用ソース

<HTML>

<meta http-equiv=”Content-Type” content=”text/html; charset=shift_jis”>

<BODY>

<SCRIPT LANGUAGE=”javaScript” src=”hatena122b.js”></SCRIPT>

<FORM name=”ENC” action=”#”>

ジャンプ先のURL(要[http:// or https://])<input name=”adr” value=”” size=”64”>

パスワード<input name=”inp”>

暗号化結果<input name=”out” size=”128”>

<input type=button value=”暗号化” onclick=”JavaScript:document.ENC.out.value=Encode(document.ENC.inp.value,document.ENC.adr.value);”>

</form>

</BODY>

</HTML>

hatena122b.js 暗号化用JavaScriptソース

//暗号キーを変えても良い

var PS=”0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz”;

var PSCount=PS.length;

function Encode(inp,data){

var s1=””,result=””;

m=inp.length;

n=data.length;

for(i=0,p=0;i<m;i++){

p+=inp.charCodeAt(i)-0x21;

}

p+=inp.length;

for(i=1;i<=n;i++){

i2=(i-1)%m;

if(inp.length)k=(inp.charCodeAt(i2)-0x21);

else k=0;

j=Math.floor((Math.random()*1000000))%PSCount;

s1=s1+PS.substr(j,1);

k2=(data.charCodeAt(i-1)-0x21);

l=j+((k+k2)%12)+i+p%16;

l=l%PSCount;

s1=s1+PS.substr(l,1);

j=Math.floor((Math.random()*1000000))%PSCount;

s1=s1+PS.substr(j,1);

l=j+Math.floor((k+k2))/12+i+Math.floor((p/16)%16);

l=l%PSCount;

s1=s1+PS.substr(l,1);

}

while(s1.length){

result=result+s1.substr(0,1)+s1.substr(s1.length-1,1);

s1=s1.substr(1,s1.length-2);

}

return result;

}

暗号化用は特に編集しなくてそのまま使っていただいて結構です

hatena122c.htm 復号化用ソース

<HTML>

<HEAD><TITLE></TITLE>

<meta http-equiv=”Content-Type” content=”text/html; charset=shift_jis”>

<SCRIPT LANGUAGE=”javaScript” src=”hatena122c.js”></SCRIPT>

</HEAD>

<BODY>

認証・・・

</BODY>

</HTML>

hatena122c.js 復号化用JavaScriptソース

var PS=”0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz”;

var PSCount=PS.length;

function Decode(){

var s1,s2,result;

var inp=new Array(’KiN5HHTfqhuzjax1kYpsZGoeKLYjpC4f13APyQAoQib5QCcbUeg2xrAOmL2lW4pXjav2OuiKEiOEUQpxtPCq0XL8SxpRKYg1jFwjOfnC55JfMwmYaswSn1Eh5RP33IPsYTq5’ //”0000”用

,’KgdtBhXpGgXn6VVj6yR8q1F90SRgD5dIStr4gM2XzfQrxpJAb20F8dWx4cashDAQOrn8IpnB5CVXVL0fqmP33aYvJQtj1OYevDOXAqj7HSisfyGKrnTCxmYFatALI6oQq3LU’); //”oxoxo”用 ここにアドレスごと暗号化したパスワードを入れます

key=prompt(”パスワードプリーズ”,””);

n=key.length;

for(i=0,p=0;i<n;i++){

p+=key.charCodeAt(i)-0x21;

}

p+=key.length;

for(keys=0;keys<inp.length;keys++){

result=””;

s1=inp[keys];

len=s1.length;

s2=””;

i=0;

while(s1.length){

s2=s2.substring(0,i)+s1.substring(0,2)+s2.substring(i,9999);

s1=s1.substring(2,9999);

i++;

}

i=1;

while(i<=len){

l=PS.indexOf(s2.substr(i,1))-PS.indexOf(s2.substr(i-1,1))-Math.floor(i/2)+result.length-1-(p%16);

while(l<0){

l+=PSCount;

}

l1=PS.indexOf(s2.substr(i+2,1))-PS.indexOf(s2.substr(i+1,1))-Math.floor(i/2)+result.length-1-Math.floor((p/16)%16);

while(l1<0){

l1+=PSCount;

}

i2=Math.floor((i-1)/4)%key.length;

if(key.length)

result=result+String.fromCharCode(0x21+l+l1*12-key.charCodeAt(i2)+0x21);

else

result=result+String.fromCharCode(0x21+l+l1*12);

i+=4;

}

if(result.indexOf(”://”)>0){

location.href=result;

return;

}

}

location.href=”

http://www.withmama.info/

withママへ、ようこそ!

”;//認証失敗先に飛ばす

}

Decode();

暗号化した復号コードを var inp=new Arrayの後の’’の中に入れます

ソースを見てもパスワードがばれないレベルであれば

JavaScriptでも、これで十分です

2番目のリンクは暗号化サンプル

3番目のリンクは復号化のサンプルです

実際に試してみて頂ければ、なんとなく感覚はつかめると思います

なお、JavaScriptを無効にするとサイトが見えるようにするよりは、無効にしたらサイトが見えない仕組みにする方が望ましいです

このまま貼り付けると 「”」と「’」と「¥」が全角になっているので、

をダウンロードして解凍して使ってください

※なお、jsファイルはメモ帳で編集してください

  • id:dasm
    また現れていますが

    JavaScript で無理にごちゃごちゃやるよりも、.htaccess や PHP か何かで認証した方がはるかに楽で安全です。
    そもそも、client に実行させる JavaScript で認証させる、という考え自体が終わってます。
    悪いことは言わないので JavaScript で認証などという考えは捨てましょう。
    (はてなにより削除しました)
  • id:takasiym
    質問の趣旨

    質問の趣旨はjavascriptでどうやって認証させるか、という話ですので、
    javascriptでできるだけ安全に認証させる方法を考えて回答する、
    というのもありだと思います。
    もちろん、javascriptによる認証は危険だと示唆する回答もありだと思います。
    他のユーザの回答を回答およびいわしで名指し批判するのはなしだと思います。
    ところで認証方法についてですが、
    自分はPHP+MySQLで認証する方法がいいんでないかなと思います。
    泥臭いけどかなり有効な手段だと思います。
    認証情報をファイル上ではなくDB内に保管、
    の方が安全ではないでしょうか。。。
    PHPのソースコードはapache使っていれば、
    通常外部から読めないわけですから、
    ましてどのテーブル内のレコードを呼び出しているかなどは、
    もっと分からないと思われます。
  • id:takasiym
    (投稿者削除)

  • id:takasiym
    Re:質問の趣旨

    誤字を発見したので再投稿。。。

    >他のユーザの回答を回答およびいわしで名指し批判するのはなしだと思います。
    失礼、さすがに名指しはしてないようですね。。。
    でもあからさまではなくとも、
    やってることは同じことだと思うのですが、どうでしょう^^
    あと、ご自身の回答に自信があるのでしたら、
    回答に殊更他の回答者云々を述べ立てる必要はないかと思います。。。
  • id:shampoohat
    JavaScrypt

    古いいわしなんで、書いてもだれも読まないかもしれないと思いつつ。

    >質問の趣旨はjavascriptでどうやって認証させるか、という話ですので、

    http://www.hcn.zaq.ne.jp/___/JavaScrypt/

    これが咄嗟に頭にうかぶんですよねー。
    それをどう認証ゲートに使うかはともかくとして。

    >自分はPHP+MySQLで認証する方法がいいんでないかなと思います。
    >泥臭いけどかなり有効な手段だと思います。
    >認証情報をファイル上ではなくDB内に保管、
    >の方が安全ではないでしょうか。。。

    パスワードのdigest化は忘れずに。
    (SHA1などでのdigest化を行うという意味です)

    あと、 Form Based認証は、HTTPSと組み合わせて使わないと、セキュリティ上非常に問題があります。

    >PHPのソースコードはapache使っていれば、
    >通常外部から読めないわけですから、
    >ましてどのテーブル内のレコードを呼び出しているかなどは、
    >もっと分からないと思われます。

    ご存じかと思いますが、システムは、外部のみ意識していれば十分とは
    いえず、内部の人を意識する必要もあります。
    # 例えば、はてなのシステムを作る時に、はてなスタッフの方に、はてなユーザーの
    # パスワード(平文)を見せてはいけないように作らないといけない。
    ## DBを直接アクセスされても、わからないようにしないとダメ、みたいな話です。

    適当なURLが見つかりませんでしたが。

この質問への反応(ブックマークコメント)

トラックバック

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません