0

だから私は自分のパスワードを暗号化するためにインターネットを探していました.YouTubeからこのコードをまとめました.これが私が必要とするものかどうかはわかりません. また、ユーザー、パス、メールが定義されていないというエラーが表示され、使用する関数や上記の if ステートメントで問題なく動作します。このコードは進行中です。if ステートメントにまだソルティング関数と暗号化関数を入れていません。コードは次のとおりです。

<?php require_once("session.php");?>
<?php require_once("connect.php");?>
<?php
if(isset($_POST["createUser"]) && isset($_POST["user"], $_POST["pass"], $_POST["mail"])){
    createUser ($_POST["user"], $_POST["pass"], $_POST["mail"]);
} 
else if(isset($_POST["userGames"])){
    userGamesUpdate ($_POST("selectedGameId"));
}
else if(isset($_POST["userLogin"])){
    login ($_POST["user"], $_POST["pass"]);
}
else if (!isset ($_POST)){
    echo "error";
}

?>
<?php 

$lenght = 21;
function random_string($lenght){

    $charset = array_merge˙(range("a", "z"), range("A", "Z"), range("0", "9"));
    shuffle($charset);
    global $randozoz;
    $randozoz = array_slice($charset, 0, $lenght);
    return implode("", $randozoz);

}
$username = $_POST["user"];
$password = $_POST["pass"];
$email = $_POST["mail"];

function prevent($wha) {

    $wha = stripslashes($wha);
    $wha = mysql_real_escape_string($wha);
    return $wha;
}

prevent($username);
prevent($password);
prevent($email);

$str = substr($username, 0, 6);
$salt = "$2a$12$".$randozoz."".$str."$";

//register
function createUser ($username, $password, $email ){
    //Get from form


    $hashedPassword = crypt($password); 
    //Submit to database
    //make query
    $query = ("INSERT INTO users ( username , email , hashPass ) VALUES ( '$username' , '$email' , '$hashedPassword')");
    //use query
    if (mysql_query($query)) {
        //userMade.php
        $query = ("SELECT id FROM users WHERE username = '{$username}'");
        $userId = mysql_fetch_array($query);
        $_SESSION["userId"] = $userId;
        $_SESSION["username"] = $username; 
        header("Location: ../userMade.php");
        exit;
    } else {
        echo "<p>".mysql_error()."</p>";
    }
}

function login ($username, $password){

    $hashedPassword = sha1($password); 
    //Submit to database
    //make query
    $query = ("SELECT id, username FROM users WHERE username = '{$username}' AND hashPass = '{$hashedPassword}'");
    $result_set = mysql_query($query);

    if (mysql_num_rows($result_set) == 1) {
        //frontpage, session
        //$userFound = mysql_fetch_array($result_set);
        $foundUser = mysql_fetch_array($result_set); 
        $_SESSION["userId"] = $foundUser["id"];
        $_SESSION["username"] = $foundUser["username"];
        header("Location: ../frontpage.php");
        exit;
    } else {
        $message = "Your username and/or password is wrong! Please try again.";
    }
}
?>

ログイン システムは、クリプトおよびソルティング システムと統合されていません。しかし、私は正しい塩漬けをしていますか?

このシステムから出てくるランダムなパスワードを次に示します。

$1$gc5.pn/.$txhBJZBDG3xgraJYIYY0I1
$1$8e0.vX3.$RfFLRT/iE.MXfws2fnz30.

SQLインジェクションから保護しようとしている部分にエラーが表示されますが、そのシステムは機能しますか? 正直言ってよくわかりません。

4

1 に答える 1

1

あなたのコードは悪いことでいっぱいです。開始する場所を見つけるのは難しいです。正しく動作しません。

しかし、bcrypt に関する質問に答えるには: いいえ、間違っています。誰でも簡単にパスワード ハッシュを使用できるようにするために、PHP 5.5 以降では PHP ハッシュ API が提供されます。

PHP 5.5 はまだ開発中であるため、これらの関数を最近の PHP バージョン 5.4 および 5.3.7 までにバックポートする互換性ライブラリがあります。以前の PHP では、bcrypt の実装にセキュリティ上の問題がありました。

このライブラリをダウンロード: https://github.com/ircmaxell/password_compat

于 2013-01-07T22:13:31.213 に答える