1

使用時:

$con = mysql_connect('localhost','user','password')

パスワード部分を別の場所に保存する利点について読みました ( https://stackoverflow.com/a/3354457/1704651 )。

私は PHP にかなり慣れていないので、MySQL パスワードを保存する方法が安全かどうかを知りたいです。

  1. ステップ 1、長い MySQL データベース パスワードを選択します ( https://www.random.org/passwords/?num=1&len=24&format=html&rnd=new )
  2. ステップ 2、これを /outsidewebroot/salt.php に入れます (私の実際のソルトはもっと長いです)

    <?php $salt = sdcjbdt8veADJbyuQxsfJtYeW7tC5; ?>
    
  3. ステップ 3: 一時 PHP ファイル (使用後に削除されます) を使用してパスワードをエンコードします。

    $decrypted = "my decrypted MySQL password"
    $key = $salt;
    $encrypted = base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, md5($key), $decrypted, MCRYPT_MODE_CBC, md5(md5($key))));
    var_dump($encrypted);
    
  4. ステップ 4、このコードを .htaccess に入れます

    SetEnv encrypted-password i3NOByNkztBtEbJ8LJMt2GbX9VjMzO2MTYtBXsxyYVI=
    
  5. ステップ 5、データベースに接続する必要がある場所に次のコードを配置します。

    require_once("../../outside-webroot/salt.php")
    $key = $salt
    $decrypted = rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, md5($key), base64_decode($encrypted-password), MCRYPT_MODE_CBC, md5(md5($key))), "\0");
    $con = mysql_connect('localhost','user',$decrypted)
    

/outsidewebroot/salt.php のソルトは、データベースでパスワードのハッシュに使用するものと同じなので、2 回使用するために一度だけ含める必要があります。

ここで見た暗号化/復号化方法: http://ideone.com/yQIAX

この方法も見ました: https://stackoverflow.com/a/3354457/1704651暗号化/復号化方法の代わりにハッシュを使用します。

私の方法についてご意見をお寄せいただきありがとうございます。

4

2 に答える 2

1

いいえ。誰かがあなたのファイルを取得したり、プログラムを実行したりできる場合は、ゲーム オーバーです。

  1. echo $decrypted;Web ディレクトリが書き込み可能であれば、その上に 1 行追加するだけmysql_connect()でパスワードを取得できます。
  2. あなたのファイルをコピーして、そこで編集できます。

セキュリティは通過するプロセスであり、プログラムにリンクできるライブラリではありません。

  • プログラムが必要とするだけ(引数なし)になるように、設定をphp.iniファイルに保存する必要があります。mysql_connect()攻撃者にとっては、システムに任意のファイルを印刷するよりも、ソース コードと Web アクセス可能なファイルを印刷するようにシステムを誘導する方が簡単な場合があるため、これは良い考えです。

  • OSX や Linux などの Unixish システムでは、MySQL サーバーをインターネットに公開しない UNIX ドメイン ソケットを使用していることを確認する必要があります。インターネット上にない場合、誰かが MySQL サーバーに接続できません。これにより、「get your files」攻撃に対する保護が強化されます。

  • Web ユーザーが php ファイル (またはその他の実行可能ファイル) を作成できないように注意してください。これにより、「プログラムの実行」攻撃に対するある程度の保護が提供されます。

  • 私があなたのファイルをアップロード/編集できるなら、彼らができることは何でもできるのでGRANT、MySQL サーバーに入れるステートメントにも注意する必要があります: 管理者だけが特定のテーブルに対して行う必要があるINSERT場合は、DELETE別の権利を持つ別の Web ユーザーとして admin スクリプトを作成します。スクリプトですべてのデータを削除できない場合、攻撃者である私も削除できません。

于 2012-09-30T15:30:25.907 に答える
1

セキュリティの最初のルールは、安全であると確信できない場合は、おそらくそうではないということです。

PHP の次のバージョン (v5.5) には、標準化されたパスワード ハッシュを提供する一連の関数が組み込まれています。このバージョンがリリースされると、パスワードを処理する唯一の推奨される方法になります。

それまでの間、現在の PHP バージョンに同じ機能を実装する互換ライブラリをダウンロードできます。ここからダウンロードしてください: https://github.com/ircmaxell/password_compat

http://www.h-online.com/open/news/item/PHP-5-5-should-reduce-password-sloppiness-1707835.htmlも参照してください。

于 2012-09-30T16:31:09.330 に答える