こんにちは!
ナビゲータのEVEです。
昨日は、Prototype EVEのセキュリティリスクについて検討しました。ただ、その検討結果をChatGPTにお聞きしたところ、セキュリティ上問題があるとの回答があり、本日再検討することになりました。では、ChatGPTは昨日の検討について、どんな問題があると指摘しているのでしょうか?
[ChatGPTからの指摘]
ChatGPTは、以下の問題点を指摘しています。
❶権限の過剰な付与:
rootユーザーはMySQLデータベースの管理者であり、非常に高い権限を持っています。PHPスクリプトがrootユーザーとして実行されると、そのスクリプトがデータベースに対して行う全ての操作に対して、rootユーザーの権限が与えられます。これにより、権限の制限が不十分である場合、意図しないデータベースの変更が発生する可能性があります。
❷SQLインジェクションのリスク
PHPスクリプトがユーザーの入力を直接クエリに組み込む場合、SQLインジェクションのリスクが高まります。攻撃者は入力を操作して、意図しないクエリを実行させる可能性があります。これは特に、rootユーザーとして実行される場合には深刻な問題となります。
❸暗号化されていない通信
PHPスクリプトがMySQLデータベースに接続する際に、パスワードなどの情報が暗号化されていない通信経路を介して送信される可能性があります。これは、ネットワーク上でデータが傍受されるリスクを孕んでいます。
❹ハードコーディングの問題:
PHPスクリプトにrootユーザーのパスワードがハードコーディングされている場合、ソースコード自体が機密情報を含んでいることになります。このファイルが不正にアクセスされれば、データベースへのアクセス情報が漏洩します。
[ChatGPTからの指摘]
聞いている問題点は、PHPからDBのユーザーIDとパスワードを変更するに際し、セキュリティリスクがあるということへの質問だったのですが、ちょっと、的がはずれているようです。その原因について深掘りして聞いてみると、更新すること自体はセキュリティリスクの軽減になるのですが、そのユーザーIDとパスワードを管理する方法について問題視しているようです。
ChatGPTの指摘を、Prototype EVEではどうなのか考えてみたいと思います。
❶ですが、root権限では、権限が高すぎるといっています。これについては、実行するためのユーザーを複数作り、この問題に対応したいと思います。
❷SQLインジェクションですが、プログラム的に対応しているので、問題ないと考えています。
❸Webサイトを構築する場合、3階層にします。クライアント、Webサーバー、そしてDBサーバーです。そして、WebサーバーはDMZ上に存在し、DBサーバーは社内にあるのが通常です。ここでは、そのWebサーバーとDBサーバーの通信が暗号化されていないことを、問題としています。通常は、DBサーバーとの通信をWebサーバーに限定し、ポート番号を制限するというところまでですが、それだと、盗聴された場合、通信の内容が垂れ流し状態になります。Webサーバー(PHP)とデータベースサーバー(MySQL)間を、SSL/TLSで通信させる方法があるので、それを検討したほうがいいようです。
❹は仕方がありません。Webサーバーからアクセスする場合のユーザーIDとパスワードなので、データベースに格納することはできません。じゃ、どこに格納するかというとやはり、Webサーバー上のどこかということになります。
[あとがき]
また、長くなってしまったので、本日は、ここまでとします。なお、❶〜❸の問題については、解決の見通しがたったので、明日は❹のハードコーディングの問題について検討を進めたいと思います。
❹ハードコーディングの問題はどうしても、問題は問題として認識し、それでもWebサーバーにユーザIDとパスワードをハードコーディングしなければなりません。明日は、このリスクを保有するに際し、どう対応するのか検討をしたいと思います。
では、また!