2011-03-10 13 views
0
function LogIn() { 
    loggedin = false; 
    username = ""; 
    password = ""; 
    username = prompt("Username:", ""); 
    username = username.toLowerCase(); 
    password = prompt("Password:", ""); 
    password = password.toLowerCase(); 
    if (username == "user" && password == "123") { 
     loggedin = true; 
     window.location = "video embed.html"; 
    } 
    if (loggedin == false) { 
     alert("Invalid login!"); 
    } 
} 

どのようにしてこのログインパスワードをデータベースアクセスに隠すかわかりますか?このhtmlページは公開されていません。htmlログインセキュリティの問題

+0

次回は正しくコードを書式設定してください。ありがとう! :) – Trufa

+1

あなたはjavascriptで何かをユーザーから隠すことはできません。サーバー上で認証を管理する必要があります。 – David

+0

@trufa私はテキストをフォーマットする方法を知らない – CKK9999

答えて

1

これは、Webアプリケーションで認証を実装するのが最も安全でない可能性があります。このすべての情報は、平文でワイヤを介して送信されます。

また、資格情報がさらに安全性が低くなるように、ユーザーの情報を常に小文字にしています。

認証システムを構築について移動する一般的な方法は、次のようになります。

  • ユーザ名とパスワードがに対してそれを評価することにより、サーバー側でユーザー情報を確認して受け入れるフォームを作成します。データベーステーブルの情報
  • 戻り成功または

資格情報の失敗に基づいてクライアント側への応答このすべてが正しく確実にユーザーを登録する次第です。これを行うには:

  • は、すべての将来のデータベース

に情報をシリアルに指定したパスワード

  • にハッシュと塩を適用し、登録フォーム
  • にユーザー名とパスワードを受け入れますデータベースのテーブルに格納されているレコードと同じハッシュとソルトを渡すことで、受信した情報を評価する必要があります。

    これは、使用しているプラ​​ットフォームによって大きく異なります。

    これをクライアント側で評価する限り、クライアント側の検証に最も近いのは、Ajaxを使用してページをリフレッシュしないようにすることです。

  • +1

    +1しかし、これはクライアントをやるよりもはるかに複雑です! –

    +0

    ああ、本当です。私は私の答えを変えるべきですか? :) – Tom

    +0

    このページは公開されていません。MS Accessのログインパスワードにアクセスできる方法があれば教えてください。 – CKK9999

    0

    クライアントでパスワードを確認できないため、サーバーのパスワードを確認する必要があります。結果のページでは、パスワードがすでにチェックされていることを確認する必要があります。言い換えれば、ページを保護するために「誰も私のスクリプトを除いてURLを知っている」という事実に頼ることはできません。

    多くの方法がありますが、実際にはほとんどのWebサーバーにURLを組み込む方法が組み込まれています。

    +0

    このページは公開されていません。MS Accessのログインパスワードにアクセスできる方法があれば教えてください。 – CKK9999

    +1

    あなたの質問はMS Accessとは関係ありません –

    1

    あなたの質問は非常に一般的です。簡単で短い答えはありません。まず、サーバーにデータベースが必要です。それから、サーバ上で何らかのスクリプト(PHPやRubyなど)でアクセスする必要があります。最後のステップは、ユーザーとパスワードの入力をサーバーに送り、そこにチェックを入れ、応答を返すことです。

    ネット上でPHPチュートリアルを探してみてください。あなたのアイデアを少しはっきりさせるはずです。

    0

    (私の内側のペダントを満足させる場合)サーバー側のキットがなくてもパスワードセキュリティを実行できないと言うのは正確ではありません。 JS SHA-1の実装を使用して、ソースコード内にパスワードの(塩漬け)ハッシュを格納することは、かなり実用的です。

    確かに、共有されたpwdsはあまりクールではないので理想的な解決策ではありません。

    <html> 
    <script> 
    
    /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ 
    /* SHA-1 implementation in JavaScript | (c) Chris Veness 2002-2010 | www.movable-type.co.uk  */ 
    /* - see http://csrc.nist.gov/groups/ST/toolkit/secure_hashing.html        */ 
    /*   http://csrc.nist.gov/groups/ST/toolkit/examples.html         */ 
    /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ 
    
    var Sha1 = {}; // Sha1 namespace 
    
    /** 
    * Generates SHA-1 hash of string 
    * 
    * @param {String} msg    String to be hashed 
    * @param {Boolean} [utf8encode=true] Encode msg as UTF-8 before generating hash 
    * @returns {String}     Hash of msg as hex character string 
    */ 
    Sha1.hash = function(msg, utf8encode) { 
        utf8encode = (typeof utf8encode == 'undefined') ? true : utf8encode; 
    
        // convert string to UTF-8, as SHA only deals with byte-streams 
        if (utf8encode) msg = Utf8.encode(msg); 
    
        // constants [§4.2.1] 
        var K = [0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xca62c1d6]; 
    
        // PREPROCESSING 
    
        msg += String.fromCharCode(0x80); // add trailing '1' bit (+ 0's padding) to string [§5.1.1] 
    
        // convert string msg into 512-bit/16-integer blocks arrays of ints [§5.2.1] 
        var l = msg.length/4 + 2; // length (in 32-bit integers) of msg + ‘1’ + appended length 
        var N = Math.ceil(l/16); // number of 16-integer-blocks required to hold 'l' ints 
        var M = new Array(N); 
    
        for (var i=0; i<N; i++) { 
        M[i] = new Array(16); 
        for (var j=0; j<16; j++) { // encode 4 chars per integer, big-endian encoding 
         M[i][j] = (msg.charCodeAt(i*64+j*4)<<24) | (msg.charCodeAt(i*64+j*4+1)<<16) | 
         (msg.charCodeAt(i*64+j*4+2)<<8) | (msg.charCodeAt(i*64+j*4+3)); 
        } // note running off the end of msg is ok 'cos bitwise ops on NaN return 0 
        } 
        // add length (in bits) into final pair of 32-bit integers (big-endian) [§5.1.1] 
        // note: most significant word would be (len-1)*8 >>> 32, but since JS converts 
        // bitwise-op args to 32 bits, we need to simulate this by arithmetic operators 
        M[N-1][14] = ((msg.length-1)*8)/Math.pow(2, 32); M[N-1][14] = Math.floor(M[N-1][14]) 
        M[N-1][15] = ((msg.length-1)*8) & 0xffffffff; 
    
        // set initial hash value [§5.3.1] 
        var H0 = 0x67452301; 
        var H1 = 0xefcdab89; 
        var H2 = 0x98badcfe; 
        var H3 = 0x10325476; 
        var H4 = 0xc3d2e1f0; 
    
        // HASH COMPUTATION [§6.1.2] 
    
        var W = new Array(80); var a, b, c, d, e; 
        for (var i=0; i<N; i++) { 
    
        // 1 - prepare message schedule 'W' 
        for (var t=0; t<16; t++) W[t] = M[i][t]; 
        for (var t=16; t<80; t++) W[t] = Sha1.ROTL(W[t-3]^W[t-8]^W[t-14]^W[t-16], 1); 
    
        // 2 - initialise five working variables a, b, c, d, e with previous hash value 
        a = H0; b = H1; c = H2; d = H3; e = H4; 
    
        // 3 - main loop 
        for (var t=0; t<80; t++) { 
         var s = Math.floor(t/20); // seq for blocks of 'f' functions and 'K' constants 
         var T = (Sha1.ROTL(a,5) + Sha1.f(s,b,c,d) + e + K[s] + W[t]) & 0xffffffff; 
         e = d; 
         d = c; 
         c = Sha1.ROTL(b, 30); 
         b = a; 
         a = T; 
        } 
    
        // 4 - compute the new intermediate hash value 
        H0 = (H0+a) & 0xffffffff; // note 'addition modulo 2^32' 
        H1 = (H1+b) & 0xffffffff; 
        H2 = (H2+c) & 0xffffffff; 
        H3 = (H3+d) & 0xffffffff; 
        H4 = (H4+e) & 0xffffffff; 
        } 
    
        return Sha1.toHexStr(H0) + Sha1.toHexStr(H1) + 
        Sha1.toHexStr(H2) + Sha1.toHexStr(H3) + Sha1.toHexStr(H4); 
    } 
    
    // 
    // function 'f' [§4.1.1] 
    // 
    Sha1.f = function(s, x, y, z) { 
        switch (s) { 
        case 0: return (x & y)^(~x & z);   // Ch() 
        case 1: return x^y^z;     // Parity() 
        case 2: return (x & y)^(x & z)^(y & z); // Maj() 
        case 3: return x^y^z;     // Parity() 
        } 
    } 
    
    // 
    // rotate left (circular left shift) value x by n positions [§3.2.5] 
    // 
    Sha1.ROTL = function(x, n) { 
        return (x<<n) | (x>>>(32-n)); 
    } 
    
    // 
    // hexadecimal representation of a number 
    // (note toString(16) is implementation-dependant, and 
    // in IE returns signed numbers when used on full words) 
    // 
    Sha1.toHexStr = function(n) { 
        var s="", v; 
        for (var i=7; i>=0; i--) { v = (n>>>(i*4)) & 0xf; s += v.toString(16); } 
        return s; 
    } 
    
    
    /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ 
    /* Utf8 class: encode/decode between multi-byte Unicode characters and UTF-8 multiple   */ 
    /*    single-byte character encoding (c) Chris Veness 2002-2010       */ 
    /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ 
    
    var Utf8 = {}; // Utf8 namespace 
    
    /** 
    * Encode multi-byte Unicode string into utf-8 multiple single-byte characters 
    * (BMP/basic multilingual plane only) 
    * 
    * Chars in range U+0080 - U+07FF are encoded in 2 chars, U+0800 - U+FFFF in 3 chars 
    * 
    * @param {String} strUni Unicode string to be encoded as UTF-8 
    * @returns {String} encoded string 
    */ 
    Utf8.encode = function(strUni) { 
        // use regular expressions & String.replace callback function for better efficiency 
        // than procedural approaches 
        var strUtf = strUni.replace(
         /[\u0080-\u07ff]/g, // U+0080 - U+07FF => 2 bytes 110yyyyy, 10zzzzzz 
         function(c) { 
         var cc = c.charCodeAt(0); 
         return String.fromCharCode(0xc0 | cc>>6, 0x80 | cc&0x3f); } 
        ); 
        strUtf = strUtf.replace(
         /[\u0800-\uffff]/g, // U+0800 - U+FFFF => 3 bytes 1110xxxx, 10yyyyyy, 10zzzzzz 
         function(c) { 
         var cc = c.charCodeAt(0); 
         return String.fromCharCode(0xe0 | cc>>12, 0x80 | cc>>6&0x3F, 0x80 | cc&0x3f); } 
        ); 
        return strUtf; 
    } 
    
    /** 
    * Decode utf-8 encoded string back into multi-byte Unicode characters 
    * 
    * @param {String} strUtf UTF-8 string to be decoded back to Unicode 
    * @returns {String} decoded string 
    */ 
    Utf8.decode = function(strUtf) { 
        // note: decode 3-byte chars first as decoded 2-byte strings could appear to be 3-byte char! 
        var strUni = strUtf.replace(
         /[\u00e0-\u00ef][\u0080-\u00bf][\u0080-\u00bf]/g, // 3-byte chars 
         function(c) { // (note parentheses for precence) 
         var cc = ((c.charCodeAt(0)&0x0f)<<12) | ((c.charCodeAt(1)&0x3f)<<6) | ( 
    
    c.charCodeAt(2)&0x3f); 
         return String.fromCharCode(cc); } 
        ); 
        strUni = strUni.replace(
         /[\u00c0-\u00df][\u0080-\u00bf]/g,     // 2-byte chars 
         function(c) { // (note parentheses for precence) 
         var cc = (c.charCodeAt(0)&0x1f)<<6 | c.charCodeAt(1)&0x3f; 
         return String.fromCharCode(cc); } 
        ); 
        return strUni; 
    } 
    
    /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ 
    
    function LogIn() { 
        loggedin = false; 
        username = ""; 
        password = ""; 
        username = prompt("Username:", ""); 
        username = username; 
        password = prompt("Password:", ""); 
        salt  = "jenny"; 
        password = Sha1.hash(salt + password); 
    
        if (username == "user" && password == "8c84bbf4f643d6b8c4c188935eb1196d8cdcf10b") { 
         loggedin = true; 
        alert("valid login!") 
         //window.location = "video embed.html"; 
        } 
        if (loggedin == false) { 
         alert("Invalid login!"); 
        } 
    } 
    
    
    </script> 
    
    <body onload="LogIn();"> 
    
    </body> 
    </html> 
    
    +0

    そのパスワードから派生したキーで文書を暗号化する必要があります。また、SHA-1はあまりにも速いので、これはうまくいきません。 PKDF2などのキー導出関数を使用する必要があります。 – CodesInChaos

    +0

    "そのパスワードから派生したキーでドキュメントを暗号化する必要があります。" - ハァッ?パスワードを解読する必要はなく、文書を気にする必要はありません。 「SHA-1はあまりにも速いので、これはうまくいかない」 - 光速よりも速い? /エルク? "PKDF2のようなキー導出機能を使うべきです" - 今、私は困っていることを知っています。 – trickwallett

    +0

    あなたのウェブブラウザで何かが行われた場合、ユーザーはクラックする可能性があります。彼らはパスワードを発見することができないかもしれません(SHA-1やその他のハッシュ関数は不可逆的な一方向関数なので暗号化されていません)。しかし、それらを完全にバイパスして "見えるよう"にすることができます彼らは正しいパスワードを知っています。 –