2011-07-15 17 views
0

データベースにログイン情報を保存する最良の方法は何ですか?私はプレーンテキストのパスワードを格納することはまったく示唆されていないことを知っている他の方法は何ですか? パスワードのハッシュ値を使用する場合、ログイン情報の保存と認証にPHPのどの機能を使用できますか?データベースにログイン情報を保存する方法

私はWindowsマシン上でPHP、MySQL、Apacheサーバーを使用しています。

+2

これを読むことから始めて:私は以下の記事のほとんどは、塩を混同していることを指摘したかったhttp://stackoverflow.com/questions/549/the-definitive-guide-to-website-authentication – sagi

+0

パディング付き。彼らはまったく異なる目的を果たします...同じ間違いをしないでください。塩は常にハッシュの外側にあり、同じ入力に対してユニークなハッシュを作るために役立ちます。http://en.wikipedia.org/wiki/Salt_(cryptography%29 – Josh

+0

Josh - あなたの参照は '塩はランダムなビットで、片方向関数への入力の1つを生成する '...言い換えれば、ソルト処理の外側でハッシングが起こっている可能性があります。 – rcravens

答えて

1

このセキュリティ議論における二つの陣営があります

  1. があなたのDBにパスワードを保存しないでください。これは通常、OAuthまたは同等のものを利用することを意味します。ユーザーを一意に識別する「トークン」を格納する必要があります。この 'トークン'は、選択した認証サービスによって提供されます。このサービスは認証も提供します。

  2. パスワードのハッシュ(可逆ではない)変換をDBに格納します。次に、認証プロセスは、提供されたpwordのハッシュされたバージョンをDB内のものと比較することです。

セキュリティ上の考慮事項に応じて考慮する必要がある複雑さがあります。私は最小限のパスワードを実装する必要があると思う。このことができます

$hash = sha1(saltThePword($pword)); 

function saltThePword($pword) 
{ 
    // combine the password with a salt. 
    // typically: 
    // $pword.$salt 
    // $salt can be static 
    // $salt can be unique to user (reproducible by a formula) 
} 

希望:これは、通常のようなものです。

ボブ

+0

-1申し訳ありませんが、これは悪いアドバイスです。それは塩ではありません。あなたは秘密鍵を実装しています。また、ソースが見えたらすぐに妥協した数式を推薦することで、これは不明瞭なセキュリティです。さらに悪いことに、攻撃者がハッシュ(ハッシュを安全にハッシュする全体のポイント)にアクセスし、サーバースクリプトも同様の状況になる可能性が最も高いです。 – Josh

+0

Josh - 私は「パスワードを塩にする」と思った。パスワードを取って元のpwordを推測するのに追加のビットを追加する。上記の例では、 'saltThePword'関数がこのソルトが行われる場所でした。ハッシングはその機能の外側で実行されます(sha1)。私は数式、ちょうどパターンをお勧めしませんでした。ハッシングは、dbの一部が公開されるDB攻撃(SQLインジェクション)に対して保護します。サーバーがデータとソースコードを公開するような方法で侵害された場合、ゲームはほとんど失われます。 – rcravens

+0

http://en.wikipedia.org/wiki/Salt_(cryptography) - わかりやすく、わかりやすく伝えます。サーバが侵害された場合、少なくともコンピュータが実行不可能になったため、知られているコンピュータがパスワードを解読することはできません。 – Josh

1

PHPはmd5(),sha1()などを提供します。典型的なハッシング技法は、平凡なテキストパスワードに "塩"を加えて、力を強くするのをより困難にすることです。

$pass = 'password'; 
$salt = 'aLongStringCalledASaltIsOftenUsedToMakeHashingMoreSecure'; 
$hash = sha1(md5($salt . $pass)); 
+0

私は、md5上でsha1を実行するには「いいえ」という点は述べていませんが、パスワードセキュリティが心配な方は、より良いハッシュアルゴリズムを選択してください。 – JM4

+0

私は同意します。あなたが安全であることを望むなら、より良いハッシュを使うでしょうが、あなたが実際に*関係しているならば、あなたはStackOverflowに関する助けを求めません。 – adlawson

+0

-1それは塩ではありません。 – Josh

0

保存列のmd5( 'パスワード') のようなパスワードおよびuはuがクエリ

$ RES =するmysql_queryを使用するユーザーの権限をチェックされます(「ユーザーFROM WHEREログインID、ログイン、名前を選択= '"。mysql_real_escape_string($ login)。"' AND password = '"。md5($ password)。"' ");

+0

MD5はお勧めしません。壊れている。 –

+0

クエリのインライン化はお勧めしません。私は非常に良い汎用APIが利用可能なときにもDB固有のインターフェイスの使用法について疑問に思っています。 – Josh

-1

自分の暗号化アルゴリズムにsha2を使用するのが好きです。あなたの塩が安全な場所にあり、あなたのデータベースのsaltまたはsaltという名前のデータベースにないことを確認してください。

+0

塩は、ハッシュ生成ごとに1回計算されるはずであり、暗号化されておらず、目に見えているはずです。 – Josh

関連する問題