パスワードを暗号化するためにsha256を使用しています。 mysqlにsha256暗号化パスワードを保存できます。しかし、私は同じ条項でログインすることはできません。
コードを挿入:
<?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());
何か問題はありますか?私はとても混乱しています。ありがとう。
これはタイプミスでしょうか? (ppasscodeの2つのP、意図?)
$_POST['ppasscode'];
私は確認して行います:
print_r($_POST);
データがそこに正確であることを確認し、それがどのように見えるかをエコーアウトします:
echo hash('sha256', $_POST['ppasscode']);
この出力をデータベースにあるものと(手動で)比較します。これを行うことにより、失敗の可能性のあるポイントを探索しています。
まず、sha256は暗号化の一種ではなく、ハッシュアルゴリズムです。暗号化には、情報を元の値に復号化する方法が必要です(衝突は別として)。
あなたのコードを見ると、正しいパラメーターを提供していれば動作するはずです。
最初にコードでリテラル文字列を使用してみて、$_POST[]
変数を使用する代わりにその有効性を確認してください
データベースクエリからコードに比較を移動してみてください(指定されたユーザーのハッシュを取得し、計算したばかりのハッシュと比較します)
しかし、最も重要なことは、これをあらゆる種類の公的な方法で展開する前に、入力を完全に削除することを忘れないでください。任意のSQLをクエリに挿入できないようにします。ここでの最良のアイデアは、パラメーター化されたクエリを使用することです。
パスワードの保護には http://en.wikipedia.org/wiki/Bcrypt のような適応型ハッシュを使用する必要があります
より良い解決策は、Anthony Ferraraの優れた互換性スクリプトを使用することです。
https://github.com/ircmaxell/password_compat
また、パスワードを確認するときは、必要に応じてハッシュを更新する方法を常に追加してください(非同期が望ましいので、タイミング攻撃のチェックプロセスに影響を与えません)。