sql >> データベース >  >> RDS >> Mysql

mysqli_connect()が暗号化なしでパスワードパラメータを受信する必要があるのはなぜですか?

    ユーザーとしてのあなたは、パスワードがどのように暗号化されているかを知りません(実際にはまったく暗号化されていませんが、ハッシュ化されています)。

    パスワードを渡すだけで、MySQLは元のパスワードと同じハッシュを実行し、保存されているものと比較できます。ハッシュバージョンを渡すと、ハッシュの利点はすべて失われます。誰かがサーバーからハッシュを取得した場合、それらを使用して、通常のパスワードであるかのようにログインできます。その後、ハッシュがパスワードになりました。

    追加の利点は、MySQLが元のパスワードを持っているため、より良いアルゴリズムで再ハッシュし、少し塩を追加して、その改善されたバージョンを保存できることです。それがオリジナルを決して取得しないならば、それはすることができません。 PHPのパスワード関数 これもサポートします。 password_needs_rehashで確認できます ハッシュされたパスワードがまだ適切にハッシュされている場合は、データベースを更新します。そうでない場合は、データベースを更新します。

    したがって、セキュリティのために、他の対策を講じる必要があります。これらは少なくとも:

    • パスワードは、ドキュメントルートの外部にあるインクルードファイルに保存します。そうすれば、誰もそのファイルを直接開くことができません。
    • インクルードファイルがインクルードされずに開かれるのを防ぐことができます(たとえば、index.phpで設定された定義をチェックすることによって)。それは素晴らしいことですが、構成エラーのためにPHPが失敗した場合、人々はファイルのソースを参照するだけでよいので、前のルールを守ります。
    • 常に特別なデータベースユーザーを作成します。 rootは使用しないでください 。このユーザーにデータベースを操作するのに十分な権利を与えますが、それ以上は与えません。たとえば、テーブルを削除する権限はありません。
    • 常にそのユーザーに一意のパスワードを与えます。このパスワードを覚えておく必要はありません。たくさんの文字でランダムなゴミを生成するだけです。
    • パスワードは定期的に変更してください。たぶん、それをスクリプト化して、更新されたパスワードを構成に保存することもできます。



    1. ファブリックから動的にmysqlデータベースを作成する方法

    2. 大きなSQLスクリプトを実行する(GOコマンドを使用)

    3. RailsPostgreSQL数値フィールドオーバーフローエラー

    4. PHPを使用してmysql文字列に二重引用符を挿入します