
MySQLでデータベースを作成して、データベース認証させてコンテンツを表示するプログラムを書いているのですが、パスワードやユーザー名をルートディレクトリの外に置いてrequire_onceする意味が今ひとつわからないので教えて下さい。
require_once('../../../DBparameter.php'); // DBparameter.phpの中にパスワードやユーザー名
として、ルートディレクトリの外にDBparameter.phpを置けば確かに、パスワードやユーザー名を見ることはできませんが、このプログラムが存在するフォルダ内をのぞけるぐらいの詳しい人であれば、このプログラムを見るのは簡単にできると思うんですが、そうすると、
$con = mysql_connect(host, username, password);
などとしてデータベースを開き、結局はデータベース内の情報を抜かれてしまうような気がするのですが、どうなんでしょうか?
確かに、データを抜き取るためのプログラムを他人のドメインにアップロードするのは簡単ではないので、ほとんど無理だとは思うんですが、それならばスクリプト内にパスワードやユーザー名をそのまま書いてもいいのではないかという気がするんです。
No.2ベストアンサー
- 回答日時:
データベースをリモートでメンテナンスできるようにしようとすると、何らかの方法でMySQLにダイレクトにアクセスできる道を作ることになりますよね。
その道を知っている人にとっては、残る関門は、IDとパスワードだけです。別に、人のドメインに直接プログラムをアップロードするまでも無いので、IDとパスワードが漏れちゃったら、大変です。(MySQLでは、ID毎にクライアントのIPを制限するのが普通なので、そこまでは普通至らない物ですが。それでも、最大の関門を破ったことに変わりはありません。)さて、ルートディレクトリー配下で、スクリプトファイルに対して、クライアントからアクセスした場合は、普通は、スクリプト(例えばPHP)が実行されるのが普通です。これが正しい姿ですが・・・
webサーバーを一から構築した人は、クライアントからアクセスするとブラウザーにスクリプトのソースが表示されて、悲鳴を上げるという体験を、必ず一度はするものです。
そう。webサーバーのちょっとした設定間違いで、簡単にこんな事故はおこるものなんです。
さて、このスクリプトのソースにIDとパスワードが堂々と書いてあったら?はい。事故=ID・パスワードの漏洩発生です。
というわけで、クライアントからアクセスできる領域のファイルにはIDやパスワードは書きたくないものです。
ですから、まず、IDとパスワードを別のファイルに分けます。
このファイルを同じ場所においたら、結果は一緒です。このファイル名はちゃんとスクリプトに書いてありますから、そのファイル名をurlにしてもう一度アクセスするだけになってしまいます。
ですから、ルートディレクトリー配下には、このようなファイルは置かないようにするのです。さすがに、相当の間違いをやらかしても、ルートディレクトリー配下意外の場所をweb経由でアクセスできるようになんてことにはなりませんから、大分、安心度が大きくなります。(まぁ、ルートディレクトリーの設定そのものを間違えれば・・・でも、その場合は、別の心配をした方が良いです。被害はデータベースのデータを抜く程度では収まりません。でもサーバーのOSレベルで、webサーバーシステムのアクセス権限はルートディレクリー配下に制限することが普通ですから、その意味でも、ルートディレクトリの外は、結構厳重に守られている物です。)
設定を間違えなくても、webサーバーのシステムにセキュリティーホールがあれば、同じ結果になることはあり得ます。でも、ルートディレクリー以外の所まで平気で見に行けるなんて巨大なホールはそうそう出ませんし、ちゃんと設定していれば、OSの保護も期待できます。
まぁ、セキュリティーに完璧はありません。少しでも、心配事をひとつずつつぶしていくのが基本です。心配事をひとつつぶす毎にセキュリティーは一段階上がります。
mitonekoさん、ご回答ありがとうございます。
>webサーバーを一から構築した人は、クライアントからアクセスするとブラウザーにスクリプトのソースが表示されて、悲鳴を上げるという体験を、必ず一度はするものです。
こんなことがあるんですか? 知りませんでした。ちょっと心配が増えました。
現在、SQLiteを使ってサーバー上に6つほどデータベースを作成しています。
そのうちの3つは、基本的に見られたくないのでBASIC認証をかけています。さらにそのうちの1つはどこの誰か特定できるレベルではありませんが、個人名が書かれています。今後、さらに秘匿性の高いデータベースを作成しようと考えています。
SQLite+BASIC認証というのはセキュリティとしてはだめなんだろうなと以前から感じておりましたが、mitonekoさんのコメントを見て確信しました。
現在、SQLiteからMySQLへの移行をおこなっているのですが、1つは移行が終了しました。BASIC認証もデータベース認証に変更予定です。マッタリと移行しようかと考えておりましたが、ちょっと急いだほうがいいようですね。
ご回答ありがとうございました。
No.1
- 回答日時:
>このプログラムが存在するフォルダ内をのぞけるぐらいの詳しい人であれば
これは内部の人に限られます。内部からはパスワードの秘匿性はないです。
次にWebクライアント側からの危険性ですが、以下の危険性をなるべく少なくする為です。
・Webサーバの設定ミスでルート配下が全て見られるパターン。
・セキュリティホールが見つかりルート配下が全て見られるパターン。
セキュリティに100%はなく、何重にもよる防止策しかないので上記のパターンを潰す意味でのルート外配置ですね。
sora1515さん、ご回答ありがとうございます。
>Webサーバの設定ミスでルート配下が全て見られるパターン。
ネットでごくまれにこういうシーンを見ることがありますよね。最近はあまりないような気がしますが。
最近、ロリポップからXserverに引越したのですが、Xserverは基本認証のパスワードもルートディレクトリの外の専用フォルダに自動的に入ります。
MySQLは最近始めたばかりで、パスワードはルートディレクトリの外側にフォルダを作成してその中に配置しているものの、どの程度安全なのか疑問だったので質問しました。
>>このプログラムが存在するフォルダ内をのぞけるぐらいの詳しい人であれば
>これは内部の人に限られます。内部からはパスワードの秘匿性はないです。
当然なのだとは思いますが、かなり安心できるコメントではあります。
ご回答ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ルート50の解き方
-
Googleドライブをクイックアク...
-
√96の解き方
-
関西(大阪)から尾瀬に電車、...
-
横浜駅から200KmのJR駅は
-
四條畷市の市外局番
-
エクセルでルートの上の棒を長...
-
ノートパソコンにHDDアクセスラ...
-
SDカードに取り込んだ音楽の...
-
ポータブルカーナビを家でテレ...
-
昨日まで使えていたSDカードが...
-
通勤経路をわざわざ遠いところ...
-
パソコンでの『ルート(√)2』...
-
Googleマップのルートを手動で...
-
昼休みに来る人ってどういう神...
-
√6のようなルートを少数に直す...
-
京都から名古屋: 一般道での走...
-
兵庫県明石市硯町から20km~30k...
-
グーグルマップの用語について
-
なぜ√2が1.41で、√3は1.73にな...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Googleドライブをクイックアク...
-
ルート50の解き方
-
関西(大阪)から尾瀬に電車、...
-
ノートパソコンにHDDアクセスラ...
-
you are an idiot!のアクセス方...
-
Cドライブ直下に、ファイル等を...
-
通勤経路をわざわざ遠いところ...
-
横浜駅から200KmのJR駅は
-
SDカードに取り込んだ音楽の...
-
首都高を使わずに千葉方面へ行...
-
パソコンのアプリ版のGoogleド...
-
ワードで式を書く時に、ルート...
-
自分の家(地域)の郵便物配達...
-
nslookup時のDNSサーバのタイム...
-
同一フォルダ内で、エクセルを...
-
google mapでのルート検索を良...
-
昨日まで使えていたSDカードが...
-
エクセルでルートの上の棒を長...
-
googlemapで最寄駅を調べる方法
-
京都から名古屋: 一般道での走...
おすすめ情報