53

パスワードの暗号化にsha256を使用しています。sha256暗号化パスワードをmysqlに保存できます。しかし、同じ句でログインすることはできません。

コードを挿入:

<?php
error_reporting(E_ALL ^ E_NOTICE);
$username = $_POST['uusername'];
$passcode = $_POST['ppasscode'];
$userflag = $_POST['uuserflag'];
//$passcodeen = hash('sha256',$passcode);
$passcodeen = hash('sha256', (get_magic_quotes_gpc() ? stripslashes($ppasscode) : $ppasscode));
$conn = mysql_connect("localhost","charles","charles") or die("connection failed with DB:".mysql_error());
mysql_select_db("sessiondb");
$query = "INSERT INTO users(username,passcode,userflag) values('$username','$passcodeen','$userflag')";

コードを選択:

<?php 
error_reporting(E_ALL ^ E_NOTICE);

    @mysql_connect("localhost","charles","charles") or die("Connection failed".mysql_error());
    @mysql_select_db("sessiondb") or die("Database doesn't exist".mysql_error());
    //get user input
    $username = $_POST['username'];
    $ppasscode = $_POST['ppasscode'];
    //$passcodeen = hash('sha256', $ppasscode);
    $passcodeen = hash('sha256', (get_magic_quotes_gpc() ? stripslashes($ppasscode) : $ppasscode));
    //get session value from mysql
    $query = @mysql_query("select username, userflag from users where username ='$username' and passcode = '$passcodeen'") or die("Query execution failed".mysql_error());

何か問題がありますか?私はとても混乱しています。ありがとう。

4

5 に答える 5

80

これはタイプミスでしょうか?(ppasscodeの2つのP、意図されていますか?)

$_POST['ppasscode'];

私は確認して実行します:

print_r($_POST);

そこでデータが正確であることを確認してから、次のように表示します。

echo hash('sha256', $_POST['ppasscode']);

この出力をデータベースにあるものと(手動で)比較します。これを行うことにより、考えられる障害点を調査します。

  1. フォームからパスワードを取得する
  2. パスワードのハッシュ
  3. 保存されたパスワード
  4. 2つの比較。
于 2009-11-17T23:23:57.740 に答える
12

まず、sha256はハッシュアルゴリズムであり、暗号化の一種ではありません。暗号化には、情報を復号化して元の値に戻す方法が必要になります(衝突は別として)。

コードを見ると、正しいパラメーターを指定していれば機能するはずです。

  • $_POST[]最初にコードでリテラル文字列を使用してみて、変数を使用する代わりにその有効性を確認してください

  • 比較をデータベースクエリからコードに移動してみてください(特定のユーザーのハッシュを取得し、計算したばかりのハッシュと比較してください)

しかし、最も重要なことは、これをあらゆる種類の公的な方法で展開する前に、入力をサニタイズすることを忘れないでください。任意のSQLをクエリに挿入しないでください。ここでの最良のアイデアは、パラメーター化されたクエリを使用することです。

于 2009-11-17T23:30:56.410 に答える