ドキュメントルート外のファイルにアクセスする隠蔽の方法とは?

このQ&Aのポイント
  • Apacheの初心者がドキュメントルート外のファイルにアクセスするための隠蔽の方法について調べました。
  • Alias設定を使用してドキュメントルート外のファイルをドキュメントルートの配下に配置されたように見せることができます。
  • しかし、Alias設定は隠蔽の手法ではなく、ファイルにアクセス可能な状態を作り出すだけです。他の隠蔽の手法を検討する必要があります。
回答を見る
  • ベストアンサー

ドキュメントルート外のファイルにアクセスしたい

Apache初心者なので、間違えていたらすみません。 WEBサイトに使う画像やPHPファイル(sqlのpasswordなど記述したデータ)を隠蔽するため、 ドキュメントルート外に、これらのデータを設置しようと考えております。 色々しらべたところ、Apacheのhttpd.confへAlias設定をすることで、 画像やPHPファイルを取得できそうであることが分かりました。 そこで1つ疑問があります。Alias設定は、 ファイルをドキュメントルートの配下に配置されているように、見せかけることが出来るだけで 隠蔽していないような気がするのです。 (私のイメージとしては、リンクやショートカットのイメージしかわかず、 sqlのpasswordを見れてしまう気がするのです。) 参考URL: http://www.adminweb.jp/apache/docroot/index3.html この解釈は間違っていますでしょうか? またそもそも隠蔽の手法に、Alias設定は不適合なのでしょうか? その場合、正しい隠蔽の手法をご教授いただきたく。

noname#196623
noname#196623

質問者が選んだベストアンサー

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4846/10257)
回答No.3

No1&2です。 >PHPファイルの呼び出しですが、WEBサイトのログイン画面にてform要素のactionで呼び出しを行っております。 考え方が間違ってます。 隠蔽=「aのlinkとか、imgのsrcとか、formのactionとか等から呼び出せない」 です。言い方を変えると、「URLを持たない」です。 actionのlogin.phpは普通に置いて、その中から、パスワード記述の部分だけ別ファイルに切り出して、それをドキュメントルートの外に置き、それをlogin.phpからrequire_once("ファイルのフルパス")で呼び出します。

noname#196623
質問者

お礼

ご指摘のとおり、login.phpのパスワード部分のみドキュメントルート外に置いたところ、無事にログイン処理を行うことができました。 この手法で画像ファイルも、隠蔽できないか考えてみようと思います。 多くのアドバイスをいただき、誠にありがとうございました。勉強になりました。

その他の回答 (2)

  • notnot
  • ベストアンサー率47% (4846/10257)
回答No.2

No1です。 お礼の前半の考え方は正しいです。 >ところが、PHPファイルを呼び出そうと試みても、ドキュメントルート外のディレクトリにアクセスできず、下記のようなエラーが出力されてしまいました。 >The requested URL [PHPファイル] was not found on this server. どんなrequireを書いたのですか? require_once("/home/user/sqlpass.php"); みたいな感じで書いてください。

noname#196623
質問者

お礼

たびたびありがとうございます。 PHPファイルの呼び出しですが、WEBサイトのログイン画面にてform要素のactionで呼び出しを行っております。 [ソース例]----------------------------------------- <form method="post" action="../php/login.php"> <input id="email" type="email">・・・ログインメールアドレス <input id="password" type="password">・・・ログインパスワード <div> <input type="submit" name="login" value="ログインボタン" /> </div> </form> -------------------------------------------------- メールアドレスとパスワードをPOSTで取得し、相対パスでドキュメントルート外のPHPファイル"../php/login.php"を呼び出しております。 "../php/login.php"内でsqlにアクセスし、メールアドレスとパスワードの組み合わせがないか判別しております。

  • notnot
  • ベストアンサー率47% (4846/10257)
回答No.1

>この解釈は間違っていますでしょうか? 正しいです。 >またそもそも隠蔽の手法に、Alias設定は不適合なのでしょうか? はい。隠蔽になりません。 >その場合、正しい隠蔽の手法をご教授いただきたく。 隠蔽とは、ウェブサーバー経由で直接見られないようにすると言うことです。ドキュメントルートやAliasなどで指定されているディレクトリ外に置けばそれだけで隠蔽できてます。 何のためにAliasを設定したいなどと思ったのかその理由を聞かないことには何とも。

noname#196623
質問者

お礼

ご回答ありがとうございます。 >>何のためにAliasを設定したいなどと思ったのか ↑ こちらの件、経緯をご説明させていただきます。 はじめにドキュメントルート下に、WEBサイトを構成する全ファイルを置き、作成を進めておりました。 その中には、サイト閲覧者に参照されたくないファイル(特にsqlのpasswordが記述されたPHPファイル)があり、これらを直接見られる可能があってはまずいと思い、ドキュメントルート外に出し、相対パスでドキュメントルート外のPHPファイルを呼び出すように変更しました。 ところが、PHPファイルを呼び出そうと試みても、ドキュメントルート外のディレクトリにアクセスできず、下記のようなエラーが出力されてしまいました。 [エラー例]-------------------------------------------- Not Found The requested URL [PHPファイル] was not found on this server. ---------------------------------------------------- そこでgoogleで色々調べていたところ、Alias設定でドキュメントルート外のファイルにアクセスできるという記述を発見し、当サイトで質問させていただいたしだいです。

関連するQ&A

  • Apacheのドキュメントルートについて

    これまでwindows版のApacheを使ってきて、htmlファイルを配置するのはhtdocsでした。 今回Linux上でApacheを使うことになったのですが、本を読んで見ると、/var/www/~がドキュメントルート となっています。 しかし、windows版と同じくhtdocsはあります。 Linuxの場合、htdocsなのか、/var/www/~のどちらにhtmlファイルやPHPファイルを配置したらいいですか?

  • Apache2+perlのドキュメントルート設定

    既存のデータを動かすために、ubuntuに (1)apache2インストール (2)perlインストール しました。 既存のcgiファイル等を apache2のインストールで作成された  /var/www/html に入れても動かなかったため、設定ファイルである  apache2.conf の中を、 (1)+ExecCGIを追記(下記) <Directory /var/www/html> Options +ExecCGI </Directory> +ExecCGI (2)末尾に  AddHandler cgi-script .cgi .pl を追記しましたが、まったく動きません。 上記の設定はまちがってますでしょうか? ほかになにを設定すればいいでしょうか? 知人に聞いたところ、あとドキュメントルートの設定ができればいいと言われましたが、設定ファイルのどこをいじっていいかわかりません。 ドキュメントルートの設定方法がわかりません。 教えてください。

    • ベストアンサー
    • CGI
  • Apacheのドキュメントルート

    現在、PCにApacheをインストールしておりWeb公開しております。 Apacheのドキュメントルートを c:\xampp\htdocs\public_html に設定しておりFTPソフトにてこのpublic_htmlにファイルをアップロードしようとすると エラーになり 「c:\xampp\htdocs\public_html に対する許可されていない操作です。」 というエラーメッセージが出ます。 ちなみにpublic_html配下にサブフォルダを作成するとそこにはFTPソフトでアップロードできる 状態です。 Apacheのドキュメントルートってファイルの書き込みはできないのでしょうか。

  • ドキュメントルートのphpファイルが削除できない

    ●質問の主旨 ドキュメントルート(var/www/html)に配置した、 phpファイル(quiz.php)をrootユーザーから、root権限で rmコマンドで削除しようとしましたが、 メッセージが表示されるだけで削除できません。なぜでしょうか? ご存知の方がいらっしゃいましたら、ご教示願います。 ●質問の補足 現在のコマンドの状況は以下の通りです。 [root@linuxserver html]#rm quiz.php rm: remove regular file 'quiz.php'? [root@linuxserver html]#ls -l -rw-r--r-- root root 781 Jan 13 22:11 quiz.php またこのquiz.phpファイルはwindowsクライアントPCで作成し、 以下の経過でドキュメントルートにアップロードしました。 1.WinSCPのSFTPで一般ユーザのホームディレクトリに転送 ↓ 2.一般ユーザのホームディレクトリ(/home/user)から cpコマンドでドキュメントルート(var/www/html)にコピペ ●環境 クライアント側:windows8.1 サーバー側:Linux(CentOS6.0) サーバーソフト:Apache2.2.15

  • ドキュメントルートより上のディレクトリにあるPHPファイルをインクルードするには?

    外部に公開する必要がないディレクトリをドキュメントルートの外に置く構成のPHPプログラムを使用したいのですが、ドキュメントルートより上のディレクトリのPHPファイルをインクルードするにはどうすればよいのでしょうか? 例えば、DocumentoRootが/var/www/htmlで、 /var/www/html/test.phpから/var/www/data/include.phpをインクルードするようなケースです。 include.phpをtest.phpと同じディレクトリ(/var/www/html/)に置いた場合はインクルードできることを確認しています。 パーミッションは設定してあります。 phpinfo()でinclude_pathは「.:」となっています。 http.conf、php.ini等も編集することができる環境です。 ご存知の方がいらっしゃいましたら、アドバイスをお願いいたします。

    • ベストアンサー
    • PHP
  • PHPからAliaseにアクセスできません

    AliaseでCドライブ以外のドライブ内のフォルダ「F:/datas/」を指定するとブラウザからは「http://localhost/datas/image.jpg」などでフォルダ内のファイルにアクセスできるのですが、PHPでファイルの操作(上書きや削除、ディレクトリの作成など)ができません。file_existsでも見えません。Dドライブでも同様の症状でした。 【やりたいこと】 ドキュメントルート直下のtest.phpから/datas/内のファイルを操作したいと思っています。 【httpd.conf の設定】 DocumentRoot "C:/Program Files/Apache Software Foundation/Apache2.2/htdocs" (初期設定のまま) Alias /datas/ "F:/datas/" <Directory "F:\datas"> Allow from all </Directory> 上記設定をCドライブ用に書き換えた場合は問題なく動作しています。 【環境】 OS:WinVistaHomePreSP2 Apache:2.2.21 PHP:5.2.17 その他必要な情報があれば追記します。 よろしくお願いします。

    • 締切済み
    • PHP
  • Apacheのドキュメントルート配下のファイル、ディレクトリの所有者は

    Apacheのドキュメントルート配下のファイル、ディレクトリの所有者は、rootのままだと危険でしょうか? /var/www/html/以下を公開しています。所有者をとりあえず、apacheに変えましたが、通常所有者はどうすべきですか? パーミッションの関係でrootのままが便利な気がしますが。

  • Linux Document Rootについて

    職場で、Linuxの経験が無いにも関わらず WEBサイトのサーバ移行をしていまして、躓きました。 新サーバはAWSにてCentOS 6.9 Apache 2.2.15 php 5.3.3となっています。 率直な質問ですが、Document Rootとは サイトのアドレスを叩いた時にそこのディレクトリの index.html(.php)が表示される場所という認識で 良いでしょうか? それが合っているのであれば、 httpd.conf内にてDocument Rootを/aaa/bbb/ccc/から /ddd/eee/fffに変えてやると、サイトのアドレスを 叩いた時に/ddd/eee/fff/の中にあるindex.html(.php)を 読みにいくという動作になるということでしょうか? .htaccessにてリダイレクトも考えましたが、 それも上手くいってません。 <IfModule mod_rewrite.c> RewriteEngine on RewriteBase / RewriteRule ^/aaa/bbb/ccc/(.*)$ /ddd/eee/fff/$1 [R=301,L] </IfModule> これで合ってますでしょうか? 宜しくお願いします。

    • ベストアンサー
    • PHP
  • XAMPPのドキュメントルート変更方法

    お世話になります XAMPPを用いて開発中のPHPサイトのテストをローカルで行いたいと思っております 通常XAMPPのドキュメントルートは下記の通りに設定されているかと思います C:/xampp/htdocs しかしながら現在ソースファイルをDドライブ中のフォルダ(仮にD:/phpfolderとします)に 格納しているので、ドキュメントルートを変更したいのですがC:/xampp下にない ディレクトリへとドキュメントルートを変更することは可能でしょうか。 可能でしたらその方法を教えてくださいますようお願いします。

    • ベストアンサー
    • PHP
  • FTPでapacheドキュメントルートへ転送できない?

    RHL7.0で、apacheをインストールしました。 そのドキュメントルート(デフォルトの/var/www/html配下)にwindowsPCからFTPであるユーザでログインし、アップロードを試みたのですが、できません。 下記の事もしてみました。 (1)apacheドキュメントルートのファイル所有者をあるグループに全て変更  chgrp -R グループ名 /var/www (2)ドキュメントルートのディレクトリ/var/wwwのパーミッション変更  chmod 2775 /var/www(これでwwwはdwxdwsr-xとなった) (3)ドキュメントルートへFTPログインでアップロードするユーザを、(1)のグループへ加える。 このユーザ名でFTPログインできますが、/var/www/html/index.htmlを変更しようとすると fxfer、アクセス件がありません、と出ます。 (2)の事は本に書いてあった事をそのまま実行したのですが、-Rオプションも付けるべきなのでしょうか? chmod 2775 /var/www/htmlとすべきなのでしょうか? 細かく考えすぎなのでしょうか? すみませんが宜しくお願いします。