• ベストアンサー

PHPのセキュリティ(ドキュメントルート・localhost)

PHPのセキュリティに関して、 どうしても解決できないことがありますので、教えてください。 (1)「ドキュメントルートより上にファイルを置く方法」 セキュリティの本や掲示板などで、 「MYSQL等のパスワードなどが記載されたphpファイルは、 ドキュメントルートより上に置いたほうが良い」 と書かれています。 http://www.amazon.co.jp/gp/product/4883374718/sr=11-1/qid=1164952057/ref=sr_11_1/503-4091124-2745559 https://www.xserver.ne.jp/support/support3d-30.html ドキュメントルートより上とは、 サイトに通常アップロードするフォルダ (index.phpがあるフォルダ) より上に置くということですよね。 しかしレンタルサーバーでサイト構築を行う場合、 それは不可能ではないでしょうか? ご存じの方、恐縮ですが、 なるべく具体的に教えてください。 (2)「localhostのセキュリティー」 上記に書いたように、サイト運営はレンタルサーバーで行い、 今後も自宅サーバーで構築すう予定はありません。 それでも、htdocs内のファイルや、 localhostでPHP、MYSQLに関してもセキュリティ対策は必要でしょうか。 もし必要な場合は、必要な対策内容を教えてください。 以上お時間とりますが、何卒宜しくお願いします。

  • PHP
  • 回答数3
  • ありがとう数1

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

  • ベストアンサー
  • gfct9s
  • ベストアンサー率90% (10/11)
回答No.2

《ANo.1の続きです》 > localhostに接続する際にも、 > XSSやSQL Injectionの被害を受けることはあるのでしょうか。  : > htdocs内で単純に作ったスクリプトにも、 > 気を配らないといけなくてはならなく面倒だなと。 確かにそのとおりですが、私のことを言ってしまえば、 localhostのセキュリティ対策はあまり考えていませんし、テストで書いた コードも置きっぱなしにしています。 可能性はありますけれど、そこまで神経質にならなくていいかなー、 と私は思います。ほかの方のご意見があったら、聞いてみたいですね。 LANケーブルを抜いておくとか、パーソナルファイアウォールを動かして Webサーバーへのアクセスを遮断しておけば、自分以外はアクセスしてきませんよね。 (一方で、こういう安心の裏にセキュリティ被害があるわけですが) ただ、セキュリティ対策の本質というのは、決められた項目を守るとかいう マニュアル主義的なものではなく、常に注意を配って被害を未然に防ぐとか 被害が出てもすぐ回復できる体制を整える、とかいうものだと理解しています。 投入できる時間やエネルギーと相談して、localhostのセキュリティにも 気を配るか、あるいは万一SQLインジェクションされて被害が出ても、 すぐ回復できるようにバックアップしておくとかでしょうか。

miraikuru
質問者

お礼

gfct9sさん 素早い対応ありがとうございます。 なるほど、 たしかに神経質になる必要はないですよね。 WEBにアップしているスクリプトと同じものでも、 パスワードなどを変えたりするなどの配慮を行えば、 致命的な被害には合わないと思いますし。 念のため、アドバイス頂いたとおり、 バックアップには注意しておきます。 他の人の意見もあるかも知れないので、 しばらく回答は締め切りませんが、 gfct9sさんのご対応には敬服しました。 私も、もっとプログラムの技術を向上させて、 いつかgfct9sさんの様に、誰かの助けになれるように頑張ります。 また何かある際は、宜しくお願い致します。 心ある対応、本当にありがとうございました。

その他の回答 (2)

  • hrm_mmm
  • ベストアンサー率63% (292/459)
回答No.3

>localhostに接続 ローカルといえどサーバーアプリを起動したまま、ネットにも繋がっていると そのパソコンのIPアドレスが外部から解ってしまうと http://数値IPアドレス/ みたいなurlで外からアクセスできてしまうので、テスト用のセキュリティ不十分なプログラムが実行されてしまう、と言うところが問題になるかと思います。 ということで、No2回答でも書かれていますが、 ローカルサーバーを実行する時は、ネットワーク回路を外す。さらには、自己IP以外からのアクセスを弾くようにしておく。 ネットワークに繋げる時は、テスト用サーバーは終了しておく。 といった注意をしておけば、あとは、ファイアーウォールとウイルス対策の方に気を付けていればよいかと思います。

miraikuru
質問者

補足

hrm_mmmさん コメントありがとうございます。 なるほど、locahost環境でも気をつける必要はあるんですね。 そこでアドバイスを基に、 次のセキュリティ対策を考えました。 いずれもlocalhost環境での対策になります。 少々長いですが、 博識あるhrm_mmmさんでしたら、 簡単にご理解いただけるかと思います。 (1)php.iniの設定変更 「PHPサイバーテロの技法」p212を参照 http://www.amazon.co.jp/gp/product/4883374718/sr=11-1/qid=1164952057/ref=sr_11_1/503-4091124-2745559 php.iniの設定変更内容 allow_url_fopen=on → off ;session_use_only_cookies=1 → ;を削除 (2).htaccessの作成 アドバイス頂いた、 「自己IP以外からのアクセスを弾く」を実現するために作成しました。 参照url http://mikeneko.creator.club.ne.jp/~lab/web/htaccess/ http://httpd.apache.org/docs/2.1/ja/howto/htaccess.html ※url2番目からも、.htaccessの作成はよろしくないようです。 もしphp.iniで作成可能でしたら、 コードを教えて頂けますと大変助かります。 .htaccessの内容 AddHandler php-script .php Order deny,allow Deny from All Allow from localhost 127.0.0.1 対策は以上ですが、もう一つ問題があります。 まだPHP初心者である私は、 ネットワークに繋いで調査を行いながらでないと、 スクリプトの作成が難しい状態です。 作業効率面から、できればネットワークを維持して、 localhostを繋ぎたいのですが、 それでも回路を外したほうがいいでしょうか? 上記の私が行った対策と合わせて、 何かアドバイス頂ければ幸いです。 今回のご対応、心から感謝しております。

  • gfct9s
  • ベストアンサー率90% (10/11)
回答No.1

ドキュメントルートより上にファイルを置くのは、レンタルサーバーでは 不可能ではないかということですね。 xserverの場合はpublic_html/がドキュメントルートということですが、 これは自分専用のフォルダが/home/user/だとすれば、ドキュメント ルートが/home/user/public_html/だということだと思います。 この場合、/home/user/public_html/index.phpは、 http://www.example.com/index.phpでアクセスできると仮定すると、 そのindex.phpの中で、 $fp = fopen('../password.txt', 'r'); なんてやったりしますと、開くファイルは/home/user/password.txtになります。 このpassword.txtはインターネットからブラウザを用いて見ようとしても 見えませんよね。もちろん/home/user/は自分専用のフォルダなので、 password.txtを設置することはできます。 しかし、/home/user/public_html/index.phpで、 $fp = fopen('password.txt', 'r'); とやった場合、開くのは/home/user/public_html/password.txtです。 確かにそこにもpassword.txtを設置できますが、これは http://www.example.com/password.txtにアクセスすると見えて しまいます。まずいですね。 私もとあるレンタルサーバー(共用)を利用していますが、上記と同様の フォルダ構成になっているので、ドキュメントルートのより上にファイルを 置くことができています。 2点目のlocalhostで行うセキュリティ対策というのは何のことか よくわからなかったのですが、もし「PHPサイバーテロの技法」の記述に ついての質問でしたら、ページ数を指摘していただけますか。 あるいは、「セキュリティ対策」の内容について具体的に書いて頂けますと、 お答えできるとおもいます。

miraikuru
質問者

補足

gfct9sさん 具体的なアドバイスありがとうございます。 こんなにまで丁寧に書いて頂いて感動しています。 ドキュメントルートに関しての疑問が、ようやく解決しました。 gfct9sさんのコメントから、 「フォルダ構成はサーバーによって異なるのでは」と考え、 現在使用中のロリポップサーバーを調べた所、 ドキュメントルートより上にファイルを置けないことがわかりました。 対応してないサーバーで実現しようとしてたのが、 そもそも間違っていたのです。 セキュリティを求める際は、 対応しているサーバーを選ぶことにしますね。 gfct9sさんのおかげで安心しました。 本当にありがとうございます。 二つ目の質問は、理解しにくい内容で失礼しました。 私が悩んでるのは、 「テストしか行わないlocalhost環境にも、 サーバーテロの危険性はあるのか」ということです。 webにアップしているファイルには対策は必要でしょうが、 テスト環境にある、htdocsにあるファイルを、 localhostに接続する際にも、 XSSやSQL Injectionの被害を受けることはあるのでしょうか。 ということなんです。 その恐れがあると、 htdocs内で単純に作ったスクリプトにも、 気を配らないといけなくてはならなく面倒だなと。 「PHPサイバーテロの技法」とは関係なく、 私個人が抱えている悩みです。 説明が足りなければ、また補足させてください。 お時間とりますが、宜しくお願い致します。

関連するQ&A

  • My Documents を localhost にしてもセキュリティは大丈夫?

    XAMPP 1.6.8 を使用です。 My Documents の中にフォルダがとても多いので ブラウザからアドレスを入力してアクセスしたいと思うのですが、 My Documents のフォルダを丸ごと localhost として設定するのは セキュリティの面で大丈夫でしょうか? localhost の中にファイルを入れることで 外部からアクセスされ易くなるか お伺いしたいと思いました。 php の動作確認など便利なので 普段は自分のウェブサイトのリンク集にアクセスする形で http://localhost/links/ をブラウザのホームページにしてます。

  • (レンタルサーバの)ドキュメントルートの配下にディレクトリーを作成して

    (レンタルサーバの)ドキュメントルートの配下にディレクトリーを作成して、ここにPHPファイルを置きましたが、自宅のブラウザーから直接PHPソースをのぞく(見る)には、どのように操作するのですか? (他者から、この配置だとソースが見られてしまうので、セキュリティー上良くないと指摘されたのですが)

    • 締切済み
    • PHP
  • PHPでFTP関数を使いたいと考えていますが、

    PHPでFTP関数を使いたいと考えていますが、 いろいろ回ってみても中々使えるサーバに出会えません。 ロリポップでは設定はされているとの記事を見かけたのですが、 ドキュメントルート以下しか使えないなど不便な面が多く使うのは控えようかと考えています。 私の探し方も上手くないのでしょうか・・・。 ある程度金額は高くても良いので(~10000円) ドキュメントルートより上も操作可能で、なおかつPHPとmysqlが使え、 PHPのftp関数がデフォルトもしくは設定にて使用可能なレンタルサーバをご存知の方は お教えいただけないでしょうか? お手数ですがよろしくお願いいたします。

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

    すいません、サーバーを借りた際のドキュメントルートについてなんですが、ドキュメントルートとは同一ドメインサーバ内の公開エリアでの最上位階層のこと。ということらしいんですが、このドキュメントルートがサーバによってpublic_htmlやhtdocsの場合があるんですが、これは、 ドキュメントルート=public_html=htdocs と考えて良いんでしょうか?   また、ROOT_PATHというのは各サイトの最上位階層のディレクトリ(各サイトのindex.htmlが入っている)のことで良いんですよね? 宜しくお願いします。

  • ドキュメントルートについて(サイト公開パス)

    現在プログラミングを学んでいる超初心者です。 現在PHPを勉強中でレンタルサーバーを使い 動作確認などを行いたいのですがうまくいきません。 レンタルサーバーはウェブクロウと言うところを使っています そしてFFFTPでアップロードしても HTTP403がでたり 「このページは表示されません」になったりしいろいろ調べたりしましたが 現在お手上げ状態です。 サーバー情報に ドキュメントルートというのがありました これは何か関係があるのでしょうか? ドキュメントルートは下記のとうりです。 /home/nakahiro7/[ドメイン名]/public_html/ その他何かご指摘、方法があれば教えていただければ幸いです。 目的は PHPの動作確認、MYSQLとちゃんと連携できているかなどを確認したいです。(会員登録のような機能などちゃんとできてるか確認したい) 無知な私にどうかお知恵をおかしください。

    • ベストアンサー
    • MySQL
  • PHPでのドキュメントルート指定方法

    PHPでのドキュメントルートの指定方法がうまくいかず困っています。 マルチドメインで組んでいます。 公開ディレクトリのルートは /home/hoge/www になります。 wwwの中に/piyo/でマルチドメインを組んでいます。 →絶対リンクを/home/hoge/www/piyo/ ここに指定したいです。 あるサイトを見てcommon.phpを作成し、index.phpと同じ階層に置き、index.phpの頭に <?php include 'common.php'; ?> を指定すると設定ができると記載されていたので下記の様に設定しました。 // common.php // <?php // サーバー上の絶対パスを記入 // これは公開ディレクトリのルート(サイトのルートディレクトリ)と一致 $__DOC_ROOT__ = '/home/hoge/www/piyo/ <http://piyo.co.jp/> '; ?> // index.php // <?php include 'common.php'; ?> <!doctype html> <html lang="ja"> … <?php echo $_SERVER['DOCUMENT_ROOT']; ?> … </html> echoで呼び出してみましたがサイトのルートディレクトリが /home/hoge/www こちらになり変更されていませんでした。 これを /home/hoge/www/piyo/ に変更したいと思います。 ご回答よろしくお願い致します。

    • ベストアンサー
    • PHP
  • PHPのMySQL接続について

    Mysqlの超初心者なので質問に不備などがございましたらすみません。 次のサイト(http://blog.nextbird.com/?p=23)に掲載している通りに会員システム構築を行っております。 レンタルサーバー(Cside:mySQl使用可能)のphpmyadminでデータベースを作成しました。データベースサーバー名やパスワードなどもiniファイルに記入して接続用のファイルでincludeしています。 すべてアップロードし、試しに自分でフォーム(名前やEmailアドレスなど)に記入したところ、『Can't connect to local MySQL server through socket '/tmp/mysql.sock' 』というエラーが出ます。 『local MySQL server』ということはローカルのMysqlに関係しているようなのですが、レンタルサーバーですべてを行っているのにローカルでMySQLをインストールして設定することなどが必要なのでしょうか?Csideのphpmyadminで『phpMyAdmin 2.6.4-pl3 へようこそ』の下に 『MySQL 4.0.24 は localhost 上 *******@localhost として実行しています。』と書いてあるのも気になります。 php自体は経験有りなのですが、MySQLの接続で困っている状況です。とにかく、、『Can't connect to local MySQL server through socket '/tmp/mysql.sock' 』だけは回避したいのですが、どなたかわかりやすくお教えして頂けませんでしょうか? 分かりづらい質問で誠に申し訳ございません。

  • xamppドキュメントルートの設定

    パーフェクトPHPという書籍を見ながら作業を進めているのですが行き詰ってしまいました。 xamppのドキュメントルートの設定のところです。 ・httpd-vhosts.confファイルに以下の文章を NameVirtualHost *:80 <VirtualHost *:80> ServerName study.localhost DocumentRoot C:/xampp/htdocs/study.localhost DirectoryIndex index.php index.html <Directory "C:/xampp/htdocs/study.localhost"> AllowOverride All Allow from All </Directory> </VirtualHost> ・hostsファイルに以下の文章を 127.0.0.1 study.localhost 上記の2つを書き込むことによって ブラウザからhttp://study.localhost/にアクセスできるようになる。 と書いてあるのですが書き込んでもアクセスができず以下のように表示されます。 --------------------------------------------------------------------------- Object not found! 要求された URL は本サーバでは見つかりませんでした。 もし手入力で URL を入力した場合は、綴りを確認して再度お試し下さい。 サーバーの障害と思われる場合は、ウェブ管理者までご連絡ください。 Error 404 study.localhost Apache/2.4.10 (Win32) OpenSSL/1.0.1i PHP/5.5.15 --------------------------------------------------------------------------- 何がいけないのでしょうか? 書籍にはこの部分はあっさり書かれており何がいけないのか分りません。 Apache、MySQLの起動はできています。 httpd-vhosts.confファイルへの書き込みを行わなければXampp for Windowsのページも出てきます。 PCは windows7を使用しています。 xamppはv3.2.1です。

    • ベストアンサー
    • PHP
  • localhost/~.php で404エラー

    初心者です。PHPを勉強したいのですが、 localhost/phpファイル名 に接続すると、404 not found になってしまいます。 OSはmacです。 /Library/WebServer/Documentsに、CotEditorで作成したtest.phpを入れましたが、 http://localhost/test.php に接続しても404エラーになります。 http://localhostに接続するとIt worksと表示されますし、 PHPのLoadModuleの設定も有効になっております。 どういった原因が考えられるでしょうか。

  • ドキュメントルートの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

専門家に質問してみよう