2

この方法がログインに安全に使用できるかどうかを知りたいのですが、これは理解しやすく、初心者が理解してサイトに追加できるようにasp-classicにあることがわかった唯一の方法です。

ありがとう

    <%
    Dim sDigest,sPassword,sSalt
    sDigest=SHA256(sRndStr)


    sPassword = Request.Form("pass")
    sSalt = Request.Form("username") & "SomeThingThatisStatic1234567890"

    With CreateObject("CAPICOM.HashedData") 
      .Algorithm = 6 '<--- This will use SHA-512
      'CAPICOM_HASH_ALGORITHM_SHA1      = 0 
      'CAPICOM_HASH_ALGORITHM_MD2       = 1 
      'CAPICOM_HASH_ALGORITHM_MD4       = 2 
      'CAPICOM_HASH_ALGORITHM_MD5       = 3 
      'CAPICOM_HASH_ALGORITHM_SHA_256   = 4 - Not supported on Windows XP or 2000 
      'CAPICOM_HASH_ALGORITHM_SHA_384   = 5 - Not supported on Windows XP or 2000 
      'CAPICOM_HASH_ALGORITHM_SHA_512   = 6 - Not supported on Windows XP or 2000 

      .Hash sPassword & sSalt 

'Response.Write "Here is your hash: " & .Value 
'---> here i would then check this hash with the hash in the database
'---> and if it's the same let the user login if not go to error: wrong info.
    End With 
%>
4

1 に答える 1

3

私がかなり重要な何かを見逃していない限り、それは特に安全に見えません。特に、接続を介してソルト/パスワードのハッシュを送信し、サーバー上でそれを確認しているように見えます。その場合、リプレイ攻撃が発生する可能性があります。つまり、誰かが会話を利用して、ユーザーがログインに応答した内容を確認し、同じ応答を送信してそれらの資格情報でログインします。パスワードをハッシュ/ソルトすると、ユーザーはユーザーの元のパスワードを知ることができなくなりますが、ユーザーは気にしません。ハッシュを知っているので、サーバーがログオンを確認するのはこれだけです。

これを回避するには、通常、チャレンジ/レスポンス設定を使用します。

  1. ユーザーがログインしたいというメッセージを送信します
  2. サーバーは乱数を生成してユーザーに送信します
  3. クライアントは、ハッシュ/ソルトされたパスワードをキーとして使用して乱数を暗号化し、その結果をユーザー名とともにサーバーに送り返します。
  4. サーバーは、そのユーザーのハッシュ/ソルトパスワードの概念を使用して同じ暗号化を実行します
  5. サーバーは2つの暗号化された番号を比較します

ユーザーがログインしようとするたびに、サーバーは新しい/異なる乱数を生成します。誰かが以前のログインからのパケットを持っていても、スパイに再度ログインさせることはありません。

于 2012-08-21T16:24:08.260 に答える