「これはヤバかったな」という遅刻エピソード

 例えば、データベースを呼び出すときのユーザー名やパスワードを、そのまま外部から閲覧できるファイルに書いておくと危ないから、別のファイルにして呼び出すようにするというのは初心者用の教科書にも書いてありますよね。

 例えば、PHPでいうとrequire_once()なんかで呼び出したり。

 その呼び出すファイルは別のディレクトリに入れておいて、そのディレクトリにアクセス制限をかけることになると思いますが、その方法がはっきりしなくて困っています。

 検索してみると、.htaccessに書いて制限するという方法がたくさん出てくるんですが、その説明の中で気になるのが「ブラウザではアクセスできなくなる」というもの。

 例えば

Order Deny,Allow
Deny from all

 と書けば、ブラウザのURL欄でファイルを指定しても見られなくなりますよね。
 これだと誰もアクセスできないけど、PHPとかスクリプトからは読み出せるので、そういうファイルを保存するのによく使われてるなんて書かれてました。

 でも、プログラム上から読み出せるなら、よそのサーバーからそういうプログラム書いてアクセスされたら読まれちゃうんじゃないの?と不安になります。

 理想としては、同じサーバーもしくはドメイン上のHTMLやPHPなどからは読み込めて、それ以外のファイルからはブラウザだろうがプログラムだろうがアクセスできない、という形ですが、そういうことはできるもんなんでしょうか?

 上記の.htaccessを使った方法で充分?

 もし他にやり方があれば、ぜひご教授下さい。

A 回答 (2件)

> でも、プログラム上から読み出せるなら、よそのサーバーからそういうプログラム書いてアクセスされたら読まれちゃうんじゃないの?と不安になります。



この不安は、「プログラムがよそのサーバーにアクセスしてファイルを読み込む」ということがどういうことなのかちゃんと具体的にイメージできてないことからきているのだと思います。

プログラムがよそのサーバーのファイルを読み込むには、その「よそのサーバー」がクライアントプログラムから読み込み要求を受け付けて、その要求に対してファイル内容を送り返す動作をする必要があります。サーバーがそういう動きをしなければクライアントプログラムが勝手にファイルを入手することはできません。

その代表的なサーバーがApache等のWebサーバー(httpアクセス)です。Apacheなら質問にある通り.htaccessを設定することで公開フォルダ内のファイルのアクセス可否を制御できます。また、No.1さんが書かれているようにApacheの公開フォルダと別のフォルダにファイルを置くことで最初からhttpアクセスの対象外にする手もあります。

httpアクセス以外では、ftpアクセスやWindowsのファイル共有等がありますが、いずれにしてもそういう機能でアクセスできるようにするには、ftpサーバーやWindowsファイル共有機能をセットアップする必要があります。必要なければ無駄なサーバー機能はセットアップしなければよい話です。
そういうのが必要でセットアップした場合は、アカウントパスワードを設定し、パスワードを知っている人しかアクセスできないようにセットアップすればいいです。
そうすれば、例えプログラムからサーバーにアクセスしたとしてもパスワードを知っていて許可されているプログラムしかアクセスできません。

> 理想としては、同じサーバーもしくはドメイン上のHTMLやPHPなどからは読み込めて、それ以外のファイルからはブラウザだろうがプログラムだろうがアクセスできない、という形ですが、そういうことはできるもんなんでしょうか?

サーバーはApacheを立ち上げるだけにして、他のサーバー機能を立ち上げないようにすれば、後は.htaccessで制御するか、あるいはWeb公開対象フォルダの外にファイルを置くことで問題ありません。HTMLファイルのアップロード等のためにftpアクセスが必要ならftpサーバーを立ち上げ、必要な人だけがftpアクセスできるようアカウントとパスワードをちゃんと設定すれば問題ありません。なお、基本的なftpサービスではパスワードが暗号化されないまま通信路を流れるため、パスワードが盗み見される可能性があります。ftpを使う時はSFTP(Secure FTP)やFTPS(FTP over SSL/TLS)を使用することをお勧めします。
    • good
    • 0

例えばPHPの場合



Webサーバにて、phpファイルは、PHPとして動作させる

などとされているはずですから、そのファイルを直接ブラウザ上でHTTPアクセスされても、
設定情報が保存されている変数などがブラウザに表示されるわけではありませんよ。

.htaccessによる制限自体が、そもそもHTTPアクセスを想定しているものなわけですから、
対応としてはあまり意味ないでしょう。
(運悪く設定ミスなどによってWebサーバがPHPとして認識しなかった場合には有効でしょう)

また、ファイルの読み込みは同一サーバ内でのみ読み込みが可能です。
もちろん、サーバ間でファイル共有などが行われていれば読み込み可能でしょうが、
外部からアクセスするという想定がHTTPアクセスのことを言っているのならば、そもそも
requireできません。
というか、require自体はされますが、HTTPアクセスの結果を読み込むだけですから、
例えば空ファイルを読み込んでいるのと変わりなかったりします。

逆に考えると、そんなことを外部者Aがあなたのサーバのファイルに対して行ったとした時、
あなたに悪意があれば、初めは害のコードだったものを書き換えてしまって、
外部者Aの情報を盗んだり破壊するということも可能となるかもしれません。
ということで、requireでHTTPアクセスすること自体が好まれません。


サーバを丸ごと乗っ取られるところまでいかないと漏れないよう、確実な隠ぺいを行いたいなら、
設定ファイルなどをWebサーバのDocumentRoot配下に置かないことです。
例えば
/var/www/html/
がDocumentRootなら、
/var/www/conf/
などのディレクトリ内に設定ファイルを置けばいいでしょう。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報