データベースのパスワードを暗号化して、非公開領域に置く(2022/12/31まで9900円→1000円)

PHPのサンプルスクリプトを見ていると、データベースのパスワードをそのままサーバーにアップロードしないといけない仕様になっている。

こわっ、と思うが対処方法を検索してもなかなか出てこない。

ベンチャー企業の作ったサイトなどこのサンプルスクリプトそのままに近いまま公開されているサイトも結構あるはずだと思う。

ユーザーのパスワードすら暗号化せずにごろっとそのままデータベースに入れているというサイトも結構あるらしい。

ユーザー側としては非常に怖い。

さらにパスワード以外の住所などのデータとなると、今度は全部暗号化して保存するというのも現実的ではない。LIKE検索とか全部効かないらしい。


対処方法としては

(1)データベースのパスワードを暗号化(可逆性のもの)する

(2)データベースのパスワードは非公開領域に保存する

があるらしいがこれがやり方が検索してもなかなか出てこない。出てきたとしても、「え?暗号化の元の文字列が丸見えじゃ意味なくない?」「復号化のアルゴリズムがだれからも丸見えでは…。」
など不安がつきまとう。

それで、
(1)非公開領域を作成し
(2)ローカルで暗号化した文字列を取得しておく(このファイルはアップロードしない)
(3)復号化のアルゴリズム(AES_KEYやAES_IV)と、暗号化したパスワードを非公開領域に置き
(4)公開領域のファイルからアクセス

という流れのプログラムを作ったのでよかったら活用してください。何もしないで直接データベースのパスワードをサーバーに置くよりははるかにましなはずです。
記事の最後で、全ファイルDLも可能です。

参考記事
https://qiita.com/arus4869/items/21586913e30eaa5ff202



手順(1)データベースパスワードを可逆性の暗号化

暗号化、復号化のスクリプトをつくり、angou.phpの名前で保存

<?php

   const AES_KEY = 'tekitou_key';
   const AES_IV= 'tekitou_iv';

   /**
    * 暗号化
    * @param string $data
    * @return string
    */
   function encrypt($data)
   {
       return $data === null ? null :
           openssl_encrypt($data, 'AES-256-CBC', AES_KEY, 0, AES_IV);
   }

   /**
    * 復号化
    * @param string $data
    * @return string
    */
   function decrypt($data)
   {
       return $data === null ? null :
           openssl_decrypt($data, 'AES-256-CBC', AES_KEY, 0, AES_IV);
   }


?>

↑angou.php

手順(2)暗号化したパスワードをどこかにメモ

次のスクリプトを書いて、localhostなどでangou2.phpにアクセスする。

暗号化された自分のデータベースパスワードが出てくるので、それをコピペしてどこかに置いておく。(復号したパスワードも表示されるので、元のパスワードとあっているか確認を。

ここから先は

1,622字 / 1画像 / 1ファイル

¥ 1,000