2016-05-07 16 views
0

登録ページしかないゲームサーバ用のウェブページを作成しています。すべてのユーザーは登録済みで、何らかの理由でusername:passwordというパスワードを保存しています。そのため、ユーザー名がMekoでパスワードが1234の場合、実際のパスワードは「Meko:1234」です。そのパスワードをどうやって確認するのかを確認してください。私は、このSQLクエリを持っているし、$ user_usernameを追加しようとしました:前に、動作するようですdidntは:SQLクエリのユーザ名:パスワード

$query = "SELECT * FROM account 
       WHERE username = '$user_username' 
       AND sha_pass_hash = '$user_password'"; 

$ user_usernameする必要があります:$ USER_PASSWORD

私はあなたが私を助けることができると思います:)

+2

を渡し、

$user_sha_hash = sha1($user_username . ':' . $user_password) ; 

を行って、クエリを作成し、実行したときのような方法。実際の答えは、移行スクリプトを使用してデータを修正することです。 – CodeCaster

+0

実際にパスワードをプレーンテキストとして保存していますか?これは非常に危険です。 – symcbean

+0

パスワードをプレーンテキストとして保存していません。パスワードはsha1 – Kh4zy

答えて

1

私はPHPであなたと思いますか?

$username = 'Meko'; 
$user_password = '1234'; 
$altered_pass = $user_username.':'.$user_password; 

if($stmt = mysqli_prepare($con,"select * from account where username = ? and sha_pass_hash = ?")){ 

    mysqli_stmt_bind_param($stmt,'ss',$user_username,sha1($altered_pass)); 
    mysqli_stmt_execute($stmt); 
    mysqli_stmt_store_result($stmt); 
    if(mysqli_stmt_num_rows($stmt)){ 
     //"yup"; 
    } 
    else{ 
     //"nope"; 
    } 

    mysqli_stmt_close($stmt); 
} 
mysqli_close($con); 
+0

SQLインジェクションに失敗します。ユーザーはSQLパラメーターを使用するか、少なくとも入力をサニタイズする必要があります。 – NineBerry

+0

私はPHP上では動作しません。私はすでにそれを試みました。それは私に構文エラーを与えるが、Codecasterが書いたように、私はおそらくCONCAT()を使用する必要があります。私はどのように確かではない。私はそれの前にそれを聞いたことがない – Kh4zy

+0

私は私の答えを更新しました見て! – Infiltrator

0

あなたは明示的に指定しても、あなたのsha_pass_hashは、次の形式のハッシュ値が含まれていることを想定していない:ハッシュ(ユーザー名:パスワード):最初にして+「$のUSER_PASSWORD」「」そして「$ user_username」+ハッシュそれをあなたのパスワードと比較してください。重要

+1

これは本当に答えではありません。 – tadman

-3
$search = $username.":".$password; 
$query = "SELECT * FROM account WHERE password = ".$search; 

私は非常にあなたがあなたの書類を作成し、SQLインジェクション攻撃を防ぐために、あなたのパラメータを結合している願っています。あなたがいない場合、私に知らせてください、そして、私はあなたのデータベースが安全であるように、より詳細にあなたを助けることができます。

また、別のテーブルを作成し、このaccountテーブル内の値を入力することをお勧めします。以前の回答は簡単な修正であり、その間にユーザーはログインすることができますが、前の表をそのままにしておく必要はありません。

は、あなたがこれ以上の助けが必要な場合は、私に教えてください:)

+0

私はPHPの初心者です。上記の例はうまくいきません。私は数回試してみましたが、それは書き込みエラーではありませんでした。私の声明を準備することによって。私はSQLエスケープを使用する必要があるのですか? :) – Kh4zy

+0

初心者なら問題ありません。以前のコードをどのように実装したのか分かりましたか? – Webeng

1

あなたは、データベースに格納されていることはSHA1チェックサムであれば、それはあなたが比較する必要がありますものです。

詳細はかなりスケッチです。

$user_username = 'Meko' ; 
$user_password = '1234' ; 

ものはあなたに渡したい値であれば:与えられ、その行の存在を確認するために、行が

INSERT INTO `account` (`username`, `sha_pass_hash`, ... 
VALUES ('Meko', SHA1('Meko:1234'), ... 

としてデータベースに保存されたと仮定すると

その後、データベースクエリ、

$sql = 'SELECT ... 
      FROM account a 
      WHERE a.username  = ? 
      AND a.sha_pass_hash = SHA1(CONCAT(? ,':', ?)'; 

$sth = $dbh->prepare($sql); 
$sth->bindValue(1,$user_username, PDO::PARAM_STR); 
$sth->bindValue(2,$user_username, PDO::PARAM_STR); 
$sth->bindValue(3,$user_password, PDO::PARAM_STR); 
$sth->execute(); 
if($row = $sth->fetch(PDO::FETCH_ASSOC)) { 
    // matching row found 
} else { 
    // no matching row found 
} 
$sth->closeCursor(); 

MySQL SHA1関数を使用せず、ハッシュを計算するために他の関数を使用した場合は、チェックを行うときに同じ関数を使用します。行が与えられ、その行の有無、チェックするために、よりその後

INSERT INTO account (username, sha_pass_hash, ...) 
VALUES ('Meko','7c4d046a92c441c426ce86f15fa9ecd1fc1fd5f1', ...) 

のような形の文で挿入された場合、ある

$user_username = 'Meko' ; 
$user_password = '1234' ; 

次に、あなたのクエリに行の存在を確認すると、次のようになります。

$sql = 'SELECT ... 
      FROM account a 
      WHERE a.username  = ? 
      AND a.sha_pass_hash = ?'; 

パスワードハッシュを計算するそれはもともとあなたの質問への答えは `CONCAT()`であるSHAチェックサム文字列に

$sth = $dbh->prepare($sql); 
$sth->bindValue(1, $user_username, PDO::PARAM_STR); 
$sth->bindValue(2, $user_sha_hash, PDO::PARAM_STR); 
$sth->execute(); 
if($row = $sth->fetch(PDO::FETCH_ASSOC)) { 
     // 
} else { 
     // 
) 
$sth->closeCursor(); 
+2

私はあなたの答えがどのように好きですが、実際には、適切な[パスワードハッシュ](http://www.phptherightway.com/#password_hashing)メソッドを使用してパスワードの問題を解決する完璧な時期であることを言及する必要があります。['password_hash '](http://php.net/manual/en/function.password-hash.php)。 SHA1は完全に不十分です。 – tadman

+0

私は最初にログイン登録をしませんでした。私はデフォルトの登録ページを持っていたWorld of Warcraftのゲームサーバー用の小さなウェブサイトを作成しようとしていました。私は使用できるウェブサイトを作るために割り当てられました。あなただけでさえ、私たちは50人だけです。 – Kh4zy

関連する問題