4

私は、データベースに挿入する前に、常にphp(またはその他)でパスワードをハッシュしました。今日、mysql 5.5にハッシュが組み込まれていることを発見したので、次のようなことができます。

+-----------------+--------------+------+-----+---------+----------------+
| Field           | Type         | Null | Key | Default | Extra          |
+-----------------+--------------+------+-----+---------+----------------+
| user_id         | int(11)      | NO   | PRI | NULL    | auto_increment |
| user_uname      | varchar(63)  | YES  | UNI | NULL    |                |
| user_password   | binary(32)   | YES  |     | NULL    |                |
+-----------------+--------------+------+-----+---------+----------------+

--set password
UPDATE users SET user_password=UNHEX(SHA2(CONCAT('username','salt'), 256))\
WHERE user_id = 1;

-- validate password 
SELECT (SELECT user_password FROM users WHERE user_id=1) = \
SHA2(CONCAT('username','salt'), 256);

これが悪い考えである理由はありますか?(私は決してmysqlの専門家ではありません)

4

3 に答える 3

2

それはパスワードをハッシュすることではありません。しかし、もしそうなら(あなたがそこに平文のパスワードを渡していたなら)...

データベース接続プロトコルは通常、暗号化されていません。この機能を使用しない理由の1つは、パスワードをプレーンテキストでネットワーク経由で送信していることです。誰かがあなたのウェブサーバーとデータベースの間のパスに沿ってルーターを制御している場合、彼らはこのデータを傍受する可能性があります。

このため、システムのセキュリティに弱点が生じます。

于 2011-08-25T02:48:27.983 に答える
2

データベースの独立性は良いことです。私はすべてのDBMSシステムを単純なSQLエンジンとして扱います。

追加した

最近、かっこいい子供たちはSQLさえ使用していません。代わりに、中間のオブジェクトリレーショナルマッピング(ORM)レイヤーが使用されます。たとえば、RailsなどのActiveRecord 。

PHP ORM

PHP用のORMライブラリに関するSOの質問。SQLはありません!

最終的な考え

最後に、パフォーマンスの観点から、拡張性が最も低いのは多くの場合DBMSです。-アプリ層は、データストアをシャーディングするよりもはるかに高速に複製できます。したがって、マイレージは異なる場合がありますが、より多くの機能をDBMSレイヤーに移動することが、システム全体のメリットになると想定する場合は注意が必要です。

むしろ、多くの場合、その逆であり、合理的な場合は機能をDBMSから移動します。たとえば、DBMSシステムに独自のクエリキャッシュが含まれているにもかかわらず、最近ではMemCacheが広範囲に使用されています。

于 2011-08-25T02:40:19.807 に答える
1

主な問題は、MySQLでハッシュ関数を実行すると、ハッシュ関数を反復できないことです。SHA2は非常に高速であるため、ハッシュ関数の反復に失敗すると、オフラインのブルートフォース攻撃に対して脆弱になります。

おそらくMySQLでネイティブにサポートされていないbcryptやPBKDF2などのよく知られたパスワードストレージ機能を実際に使用する必要があります。

パスワードの保存と、優れた低速関数を使用する必要がある理由については、この記事を参照してください。

于 2011-08-25T02:41:16.537 に答える