はじめまして、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で質問しましょう!
似たような質問が見つかりました
- MySQL MySQL,JavaScript,PHPコードの結果を表示する方法を教えてください。 1 2023/02/13 17:49
- その他(IT・Webサービス) WEBサイト内のファイルを探す方法は? 1 2022/11/11 16:38
- PHP アップロード画像数でCSSを分けることに成功したのですが、画像の横に文字を並べることが出来ません。 3 2023/07/28 17:16
- PHP どうして送信されないのでしょうか? 1 2022/12/09 05:23
- その他(プログラミング・Web制作) 置換ソフトで指定したファイルの1行目に入力できるものを探しています 7 2022/11/24 10:34
- PHP アップロードファイルの数に応じてCSSを動的に変更したいのですが、方法がわかりません 3 2023/07/23 21:59
- Android(アンドロイド) Aloha Browser でダウンロードしたファイルをPCに転送するには? 1 2022/05/23 18:54
- WordPress(ワードプレス) wordpressでphpを読み込みたい 1 2022/10/30 23:40
- その他(IT・Webサービス) ホームページにカウント数を表示する 2 2022/10/28 10:37
- PHP PHP ページング データベース 1 2022/06/16 10:30
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
.phpと.incファイルの違いはな...
-
xreaでファイル作成ができない...
-
【file_exists】ファイルが存在...
-
session_start()でwarningが表...
-
URLが.PHPってどういう...
-
htdocsフォルダ以外ではPHP...
-
.phpファイルが、表示されない
-
use と requireの違いは?
-
phpファイルのダウンロードとセ...
-
onedrive にexcelファイルをア...
-
PHPのif文でその処理を途中で抜...
-
拡張子php画像をjpg画像等に変...
-
別ファイルの変数を呼び出した...
-
PHPでバックグランド処理について
-
「@$変数」の「@の意味は?」
-
こちらはただの直列処理ですか?
-
PHPにてC言語プログラムを呼び...
-
AccessのDoCmd.SendObjectについて
-
データ送信をボタンを押さずに...
-
PEAR(Image_QRCode)のエラー
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
.phpと.incファイルの違いはな...
-
【file_exists】ファイルが存在...
-
.phpファイルが、表示されない
-
URLが.PHPってどういう...
-
use と requireの違いは?
-
PHPからCronを編集したい
-
HTMLに埋め込んだPHPがうまく出...
-
さくらレンタルサーバーでPHPが...
-
プロパティファイルの読み込み...
-
htmlspecialcharsが機能してい...
-
PHPファイルの中身が見られるこ...
-
サーバ無しでphpを動作させる
-
thtmlファイルとはどんなファイ...
-
phpの書き方
-
PHP+MySQL SQL文を外部ファイル...
-
PHPの慣習的な書き方・組み方に...
-
cakephpで特定ファイル表示(hta...
-
PHPを使ってのサーバ上ファイル...
-
session_start()でwarningが表...
-
fopenでファイルを読み込み、そ...
おすすめ情報