0

ですから、私の問題は少し奇妙で、どうすれば明確に説明できるのかよくわかりません。

私は現在自分のWebサイトをテストしており、ページの上部にログインフォームがあります。すべてのログインフォームはテンプレートによって処理されるため、コードはすべてのログインフォームで同じです。さまざまなレベルのファイルがあり、ルートディレクトリは次のようになります。

/index.php
/photos.php
/videos.php
/users/login.php
/users/register.php
/users/forgot-password.php

現在使用しているパスワードには、が含ま"れています。それはすべてサーバーのルート(index.php、video.php、photo.php)でうまく機能しますが、何らかの理由でファイル(/users/login.php、/users/register.php)に入ると私はアカウントにログインできません。このようにパスワードをエスケープすると、機能することがわかりました\"

index.phpファイルをusersフォルダーにコピーしたところ、同じ問題が発生しました。

パスワードのハッシュを生成する私の関数は次のとおりです。

function generateHash($plainText, $salt = null)
{
    global $db;

    $plainText = trim($db->sql_escape($plainText));


    if ($salt === null)
    {
        $salt = substr(md5(uniqid(rand(), true)), 0, 25);
    }
    else
    {
        $salt = trim($salt);
        $salt = substr($salt, 0, 25);
    }

    return $salt . sha1($salt . $plainText);
}

今、私は本当に迷っています。この仕事をどうすればいいのかわからないので、あなたが私を助けて答えを見つけてくれることを願っています。

4

2 に答える 2

1

かつてアクティブだったmagic_quotes_gpc設定の影響が発生する可能性があります。これは、不適切に無効にされています。たとえば、マジッククォートがアクティブでしたが、さらにパスワードを使用したINSERTもmysqlでエスケープされました。後で魔法の引用符が無効になった場合、追加の円記号はパスワードに追加されません。

これを修復する方法を言うのは簡単ではありません。おそらく最初にプレーンパスワードを実際に試すのが良い方法かもしれませんが、これが失敗した場合は、「addslashes($ password)」を使用して別の試行を追加してください。

ハッシュ化されたパスワードのみを保存しているため、元のパスワードを修復する方法はありません。

于 2012-10-04T18:03:19.877 に答える
0

クエリに直接挿入されていない限り、SQLが何かをエスケープする理由はありません。そのため、そのsql_escape呼び出しが問題の原因になります。

注意として、MD5を使用したハッシュは、プレーンテキストのパスワードを使用するのと実質的に同じです。これは、ソルトされたもののクラッキング時間が非常に短いため、測定が難しいためです。

于 2012-10-04T17:59:18.570 に答える