
はじめまして、PHPを勉強中の鏑木といいます。
現在phpを使ったサイトを作っており、もうすぐ公開というところまでたどり着きました。テストのため色々なブラウザを使ってサイトを見ていたところ、safariで構成ファイルの一覧という機能を見つけました。
ここにはページを構成するファイルが表示されており、php内部でインクルードしている設定ファイルなどのパスもかかれています。
ちょっと不安になって、ダウンロードソフトでPHPファイルのパスを指定してDLしてみました。
結果、内容は文字化けしていて解読できませんでした。(文字コードをかえても同じでした)
類似する質問を調べたところ、これはPHPが吐き出した何らかの処理?とのことで、ソースの内容はダウンロードできないとのことだったのですが、心配になり質問させていただきました。
PHPファイルは基本的にDLされ、中のソースを見られることはないのでしょうか?もしDLされてしまう可能性があるとしたら、それを回避するような対秘策はあるのでしょうか?
実際にPHPを使われているみなさんはどんなセキュリティ対策を行っているのか、よろしければご指導いただけないでしょうか。
よろしくお願いいたします。
A 回答 (4件)
- 最新から表示
- 回答順に表示
No.4
- 回答日時:
safariを使おうがなんだろうが、include、requireしかされないファイル
というのはブラウザ(HTTP)を介したアクセスを想定していないはずです。
つまり、webroot配下ではないディレクトリに位置すればPHPそのものの
脆弱性、Webサーバの脆弱性などを突かれない限り、中のソースを
晒してしまうことは『基本的』にありません。
webrootが/var/www/html/ならば、includeされるファイルは
/var/www/php/includes/などというディレクトリーを作ってそこに
全部突っ込んどけばいいです。
そうするだけでブラウザを介した単純なアクセスは不可能ですし、
PHPの設定でエラーメッセージを出さない設定にしておき、
自作プログラムはディレクトリトラバーサルなどの脆弱性に対応しておけば
簡単にはどうこうする事は出来ないでしょう。
No.3
- 回答日時:
さきほど回答したものです。
せっかくなので補足させてください。(あと、ataru2さんはGDなどを使われているようで、先ほどの回答は少し「知ってるさそんなの」といったレベルのものだったかも知れません。失礼しました。)
基本的には、
「外部からアクセスされることのない(はずの)ファイルは.htaccessでdeny from allしておく」
の方針でいい(十分だ)と思います。ですので、設計段階からできるだけ、
「外部からアクセスするファイル」と「それ以外」を
ディレクトリまたは拡張子で区別できるようにしておくと、.htaccessの設定が簡潔ですみます。
ですので、ここまでこだわる必要はないかと思いますが、
「わかりやすい・予想しやすい名前」を心配に思うのであれば、
その上位ディレクトリを、「予想しにくい名前」にしておけば十分かと思います。
some_password/mysql.iniといった形です。
ただこの場合は、mysql.iniファイルへのアクセスをdeny from allするか、.iniすべてをdenyするか、あるいはこれが入っているフォルダに.htaccessをおいてdenyするか、あるいは先ほどは書き漏らしましたが、最上位層に
RewriteRule ^(アクセス禁止のディレクトリ) - [F,L]
と書いた.htaccessをおいてdenyすれば十分以上だと思います。
No.2
- 回答日時:
php ソースをダウンロードされることより
あなたの書いたスクリプトに脆弱性がないかチェックしてください。
(SQLインジェクションが有名だが他にもいろいろあります)
検証スクリプトも公開されているので具体的な URL は書きませんが
「php セキュリティ」 で検索してください。
早速のアドバイスどうもありがとうございました。
実際のところSQLインジェクションの対策は調べておりましたので取り入れていましたが、そのほかについては知識がほとんどありません。
今回の件でWEBの怖さというか、盲点がたくさんあるということを認識しましたので、ぜひ調べてみようと思います。
どうもありがとうございました。
No.1
- 回答日時:
PHPファイルのコードそのものは、普通(PHPとして実行されている場合)は見ることはできません。
外部から見た場合、HTMLファイルと同じです。
(FTPのパスワードを知っている人はFTPから見ることができます。)
問題となるのは、
エラーが発生して、Warning...などとファイル名・行番号が表示されると
コードが少し見えますし、またファイル名が知られてしまうので、不正アクセス(高レベルの技術を持っている人にはコードを見られる可能性は否定できません)される可能性もあります。
特に、includeやrequireでPHPファイルを読み込んでいる場合は、
その読み込まれるファイルは不完全である場合が普通で、
それに直接アクセスされると、エラーがでることもありえます。
(たとえばinclude元で変数
$foo='bar'
と設定し、include先で
echo $foo;
とした場合、include先を直接アクセスされると$fooは表示されません。(場合によってはエラー))
ダウンロードソフトを使った場合、
おそらくHTMLとして出力されたあとの"HTMLファイル"がダウンロードされると思います。
ですので、PHPコードが知られることはありませんが、
前述のようにページの(不完全な)一部がHTMLとして表示されていることになっていると思います。
また、コードそのものがダウンロードされてしまう場合には、
・PHPがインストールされていない場合(PHPが使えないサーバーでPHPファイルにアクセスした場合)
・.php以外の拡張子(たとえば.inc)をつけているときに、そのファイルに直接アクセスされた場合で、かつその拡張子(.inc)がPHPとして動作しない場合。
(ただし、.phpファイルからincludeしたファイルは、どんな拡張子であってもそこに書かれているコードはPHPとして読まれます。つまり、.incファイルは.phpなファイルからincludeされる前提で作られているという状況です。)
ともかく一般的に有効な対策をしておこうとするならば、
.htaccessを使う方法が考えられます。
一つ目は、
外部からアクセスされることはないファイル(includeされることでしか使われないファイル)は、
ひとつ(または複数)のフォルダにまとめて入れておき、
そのフォルダにdeny from allと書いた.htaccessを置く。
もうひとつは、
外部からアクセスされることはないファイル(includeされることでしか使われないファイル)は、
拡張子を.incなどとしておき、
最上層に、
<Files ~ "\.inc$">
deny from all
</Files>
と書いた.htaccessを置く。
あと、私はsafariを使ったことがないのですが、
safariで「php内部でインクルードしている設定ファイルなどのパスを見ることができる」とのことですが、それは本当ですか??それが可能でしたらすごく気になります。
大変詳しいアドバイスありがとうございました。
とても勉強になります。
教えていただいたhtaccessの設定は取り入れていませんでしたので、ぜひやってみようと思います。
safariについてですが、見えていたのはインクルードしているファイルではありませんでした;あせって早まってしまったみたいで申し訳ないです。(GDライブラリを使い画像として読み込ませたphpファイルのパスでした)ただ、mysql.iniやxx.classなど、察しやすい名前のファイルを使っていると怖くなってきますね…。
もう一度全体を見直してみようと思います。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
URLが.PHPってどういう...
-
【file_exists】ファイルが存在...
-
phpでgifアニメかどうかチェッ...
-
HTMLに埋め込んだPHPがうまく出...
-
.phpと.incファイルの違いはな...
-
phpMyAdmin-5.0.4-all-language...
-
Fatal error: Class 'Config' n...
-
拡張子PHP3のスクリプトを...
-
phpのheader("Location:#pos")...
-
*.php、*.php3、*.phtmlの違い
-
CFileDialogの最初のディレクト...
-
シェルスクリプトをPHPで動かそ...
-
php4とphp5での数値の取り扱い...
-
require_once()でファイルが読...
-
PHPのif文でその処理を途中で抜...
-
「クラス関数」「メンバ関数」...
-
ZendFrameworlkでZend_Session...
-
HPを開くとダウンロードページ...
-
ImageCreate関数が undefined f...
-
Warning: Invalid argument sup...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
.phpと.incファイルの違いはな...
-
【file_exists】ファイルが存在...
-
さくらレンタルサーバーでPHPが...
-
URLが.PHPってどういう...
-
.phpファイルが、表示されない
-
PHPの戻り値をWINDOWSバッチフ...
-
apache+phpにおいてリクエスト...
-
PHPを使ってのサーバ上ファイル...
-
Fatal error
-
php ホームページ初心者 入力確...
-
サーバ無しでphpを動作させる
-
PHPファイルの中身が見られるこ...
-
phpMyAdmin-5.0.4-all-language...
-
Apacheで、アクセスさせたくな...
-
他サーバーにあるファイルに書...
-
PHP内 メールアドレス 暗号化...
-
ハッスルサーバーで「Warning: ...
-
【EC-CUBE】商品CSVのダウンロ...
-
XAMPPのPHPファイルがNotFound。
-
コマンドプロンプト エラー
おすすめ情報