10秒目をつむったら…

お世話になっております。
PHPにてwebアプリケーションを作っており、その中でMySqlなどのDBを使用せず、保存すべきデータは、テキストファイル(.txt)を用いているのですが、URLでそのテキストファイルを直接読み込むと、当然ながらファイルの内容を読まれてしまいますが、ファイルの内容を読まれないようにする設定などはあるのでしょうか?

具体的には・・

.txtではなく、他の拡張子に変更することで、.txt同様の構造が作れるのであれば、それに越したことないが、その場合、ファイルの生成・内容書込みなどを行うPHPのソースは、単に拡張子を変更するだけで良い?また、その.txtに代わる拡張子は?

.htaccessなどを用いてファイルの内容を外部から参照できなくする設定があると耳にしたことがあるが、読み書き可能としているファイル(属性606に設定)でも、.htaccessの設置は不具合はないのか?

などです。これまでファイルの読み込み・書込みなどをものは作成したことが無く、お恥ずかしい質問かと思いますが、アドバイスなど頂戴できれば幸いです。
お忙しい中恐縮ですが、宜しくお願い申し上げます。

A 回答 (8件)

>ドキュメントルートしか利用できない場合の対処法



対処法は「ない」と考えてください。

厳密に言えば無いこともないですが、あなたのレベルでは無理です。付け焼き刃の対策をすると必ず危険な「穴」が発生します。ファイルの内容を「絶対に」読まれたくないのならば、ドキュメントルート外に置く以外の対処法はありません。

(※ドキュメントルート外に置いた場合でもまた別の危険の可能性はありますが、話が複雑になるのでここでは書きません)

ですから、私が既に書きましたように、privateディクレトリが使えるサーバーだけを使ってください。
    • good
    • 0
この回答へのお礼

nick9090さん、こんにちは。
お世話になっております。

はっきりとしたお答え、ありがとう御座います。
あれから、「どうしたものか?」と考えていたので、消去法として「消去法はない」として考えるようにいたします。

お返事が遅れて申し訳ありませんでした。(PCの調子が悪く、ネットに接続できなかった)

お礼日時:2009/01/07 15:44

>私も、ロリポップのほか、エクスエリアを借りているのですが



xreaも借りているのですか?
それならドキュメントルート外にディレクトリが作れますけど…。
というか最初からprivateディレクトリが存在しているはずです。
    • good
    • 0
この回答へのお礼

nick9090さんへ

こんばんは。お世話になっております。
すみません。私の質問が不十分だったのかも知れませんが、ロリポップなどのようにドキュメントルートしか利用できない場合の対処法もアドバイスいただければと、お伺いさせて頂きました。

お礼日時:2009/01/02 22:47

#4さん惜しい。


拡張子phpではなく、拡張子cgiですよね?

テキストファイルの拡張子をphpに変えても、"<?php"という文字(実際には"<?"でもOK)が入っていないと、スクリプトエンジンは処理せずにスルーされてしまいます。
結果、拡張子txtのときと同様、すべてブラウザに送られてしまいます。
1行目に"<?php"を入れる、データとして読み込むプログラムからは、1行目を無視して2行目からデータとして読み取る、と変更をすれば拡張子phpに変更して望みの事ができます。(普通わざわざそんな事しないですが)

拡張子をcgiに変えた場合、直接ファイルを指定して読み込もうとしても、Parlエンジン(通常は拡張子cgiはParlスクリプトと設定されています)がエラーで停止するだけなので、中身を読み取られることはありません。

簡易的な回避方法なので、業務でのプログラム作成であれば、必ずしもお勧めはできないですけど。(お客様に説明するために、なぜこのような拡張子なのか、将来に渡っても安全なのか、といった理論武装が必要になるでしょうね)
    • good
    • 0
この回答へのお礼

BellBellさんへ

こんにちは。ご親切なアドバイスをありがとう御座います。
ただいま、BellBellさんのご指摘のように、拡張子をcgiにして確認してみたところ、PHPプログラムにてデータを格納すべくcgiファイルを操作しようとしたところ、エラーとなってしまいました。

私、これまでcgiとは全くの無縁なのですが、cgiファイルを操作するに当たって、特別な記述やサーバーの設定(属性とか格納するディレクトリとか?)が必要なのでしょうか?

それと、データを格納すべくファイルの拡張子をphpとしたところ、確かにブラウザから中身を見ることが出来たのですが、これも全てではなく、見れるものと、見れないものがあることを確認いたしました。

多くの皆さんのアドバイスをいただきながら、解決できずに居る状況に恐縮ですが、宜しくお願い申し上げます。

お礼日時:2009/01/02 14:13

私はロリポップを借りたことがないので実際に確かめたわけではないのですが、Googleで検索する限り、ロリポップではドキュメントルートより上にディレクトリを作ることが出来ないみたいですね。


http://www.google.co.jp/search?q=%E3%83%AD%E3%83 …


その場合でもいろいろやり方があるとは思いますが、やっぱり簡単かつ安全なのはpublicでなくprivateなディレクトリが使えるサーバーに乗り換えることですね。ちなみに私のオススメはxreaです。
    • good
    • 0
この回答へのお礼

nick9090さんへ

こんにちは。度重なるアドバイスをありがとう御座います。
私も、ロリポップのほか、エクスエリアを借りているのですが、ドキュメントルートしか使えない場合は、どうしたものか?と考えていた次第です。
検索までしていただき、ありがとう御座いました!

お礼日時:2009/01/02 14:07

よくあるのが、テキストだけど拡張子をphpにするタイプですねー。


これだと、ざっくりとした説明ですが、、、テキストデータをサーバが、なに掲示板?日記?解釈したいんだけど、書式が違う!!とエラーになるので、中身は見られません。

これはプログラム内でtxtを検索して、拡張子を変える処理だけで平気です。
拡張子を変えると、winに読めなくなるよ?って怒られますが、中身はテキストなので、全く平気です。
ただし、プログラムによっては、データのバックアップ機能がついていると、ちょっと複雑になるので、素人が手を出すと、動かなくなったり、不具合が出る可能性もある。

他にも、cgiのcgiやplなんかも、表示の途中で処理が必要になるので、中身は見ることはできないと思うけど・・・。

下のお三方が、書かれていないとなると、何か特殊な方法を使えば、見られる・・・かな?
あ、ファイルの場所とファイル名が分かれば、外部からでも、テキストファイルを開くphpなら中身を見ることができますが・・・、データのフォルダ名を複雑にすれば、かなり分からないと思うけど。
ただ、サーバの設定によってはフォルダがみえちゃうけど、今や少数派でしょ。

この回答への補足

c_crimerさんへ

こんにちは。ご親切なアドバイスをありがとう御座います。
c_crimerさんのアドバイスをもとに、ソースの書き直しをしていたのでお返事が遅れてしまいました。

当初、私も拡張子をphpにすれば良いのかな・・とは思っていたのですが、「1行目と最終行に記述する<?phpと、?>の処理はどうしたら良いのだろう?」と考えていたのですが、これらの宣言?はなくてもファイルとして機能するのですね。勉強になりました。

が、しかし、#5のBellBellさんのご指摘があり、ブラウザにて該当ファイルを呼び出したところ、中身が見えてしまうものや、見えないものが確認出来ました。

どうしたものでしょうか・・・

補足日時:2009/01/02 13:59
    • good
    • 0

> 通常、多く貸し出されている共有のレンタルサーバーなどにも、ドキュメントルーと以外のディレクトリは確保されているのでしょうか?



それはサーバー屋の設定とか使っているOSなどによって千差万別なので、決まった答えはありません。まあ普通はwwwとして公開されるディレクトリ以外のprivateなディレクトリもあると思いますが。



> 現在借りている共有のサーバーは、はじめてのサーバーだったことも手伝い、曖昧な記憶ながらにも、色々と変更しすぎて?ドキュメントルート以外のディレクトリがない状態となっています。

それはどのサーバー屋のどのプランですか?
それを書いてくれないと答えようがありません。


あと、Linuxのディレクトリ構成やapacheの設定などについて、軽く検索してまずは調べてみるといいでしょう。
    • good
    • 0
この回答へのお礼

nick9090さんへ

こんばんは。早速のお返事をありがとう御座います!

>それはどのサーバー屋のどのプランですか?

ロリポップを借りているのですが、ドキュメントルート以外のディレクトリの存在がった記憶ありですが、現在はドキュメントルートのみとなっているので、ドキュメント以外のディレクトリの認識が薄かったようです。

ところで、最後にもう一つお伺いしたいのですが、もし、ドキュメントルートしか使えないようなサーバーの場合、テキストファイルを閲覧できないような設定は、諦めるしかないのでしょうか?

もちろん、セキュリティを考えれば、nick9090さんの仰るとおり、ドキュメントルート以外で、privateなりのディレクトリを作成すべきなのでしょうが、もし、使えなかった場合の対処などがあったら、今後の知恵としてアドバイスいただければ幸いです。

お忙しい中、度々の質問で恐縮ですが、宜しくお願い申し上げます。

お礼日時:2008/12/30 00:08

606などパーミッション云々を言う前に、そもそも公開されているディレクトリ(public_htmlなど)にそのファイルを置くこと自体が間違っています。



直接アクセスされたら困るようなファイルは、公開されていないディレクトリ(たとえばprivateなど)に置くべきです。
    • good
    • 0
この回答へのお礼

nick9090さんへ

こんばんは。早速のアドバイスをありがとう御座います。
お恥ずかしい質問、恐縮いたします。
ドキュメントルートから外して設置する認識が欠けていました。

先の#1さんへのお礼でも述べたのですが、通常、多く貸し出されている共有のレンタルサーバーなどにも、ドキュメントルーと以外のディレクトリは確保されているのでしょうか?

現在借りている共有のサーバーは、はじめてのサーバーだったことも手伝い、曖昧な記憶ながらにも、色々と変更しすぎて?ドキュメントルート以外のディレクトリがない状態となっています。

この場合の対処はともかく、通常貸し出されているサーバーのディレクトリ構成を教えて下されば幸いです。宜しくお願い申し上げます。

お礼日時:2008/12/29 20:41

ブラウザからアクセスできない場所に.txtを作るというのはまずいのでしょうか?



wwwがドキュメントルートだとすると
環境によってパスが変わるのですが、

例えば

home/www/hoge.txt

↑ここだとブラウザからアクセスできてしまうので、

home/data/hoge.txt
(dataというフォルダは自分で作って下さい)

みたいな階層に、テキストファイルを置けばブラウザからは見えません。
    • good
    • 0
この回答へのお礼

honoka69さんへ

こんばんは。早速、かつご丁寧なアドバイスをありがとう御座います。
ドキュメントルートを変えればいいのですね・・。
確かに仰る通りでした。

そこで、再度お伺いしたいのですが、通常のレンタルサーバーなどには、ドキュメントルート以外のディレクトリ?は確保されているのでしょうか?

現在2社から共有のサーバーを借りしており、そのうちの一社は初めてサーバーということもあってか、右も左も分からず、気付いたらドキュメントルート以外のディレクトリがなくなっている状態でした。
以上、うろ覚えなのですが、ドキュメントルートが確保されていたのか、それとも初めからドキュメントルートしかなかったのかが分からず、ドキュメントルートから外してファイル等を設置する・・という認識が欠けていたのですが、再度、上記質問にお答えいただければ幸いです。

お礼日時:2008/12/29 20:35

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