• 締切済み

phpファイルのダウンロードとセキュリティについて

altrnの回答

  • altrn
  • ベストアンサー率62% (10/16)
回答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内部でインクルードしている設定ファイルなどのパスを見ることができる」とのことですが、それは本当ですか??それが可能でしたらすごく気になります。

ataru2
質問者

お礼

大変詳しいアドバイスありがとうございました。 とても勉強になります。 教えていただいたhtaccessの設定は取り入れていませんでしたので、ぜひやってみようと思います。 safariについてですが、見えていたのはインクルードしているファイルではありませんでした;あせって早まってしまったみたいで申し訳ないです。(GDライブラリを使い画像として読み込ませたphpファイルのパスでした)ただ、mysql.iniやxx.classなど、察しやすい名前のファイルを使っていると怖くなってきますね…。 もう一度全体を見直してみようと思います。 ありがとうございました。

関連するQ&A

  • PHPでファイルのダウンロードについて

    お世話になります。ダウンロードボタンを付けてファイルのダウンロードを行う処理で困った事になってます。 (DL.php) $file_name=htmlspecialchars(@$_POST['file_name']); $file_name=addslashes($file_name); mb_convert_variables("SJIS-WIN","EUC-JP",$file_name); $file_to=htmlspecialchars(@$_POST['file_to']); $file_to=addslashes(@$_POST['file_to']); header ("Content-Disposition: attachment; filename=".$file_name); header ("Content-type: application/octet-stream"); require_once("dl_config.php"); readfile ($data_pas.$file_to); dl_config.php <?PHP $data_pas="/data/"; ?> この状態でテキストファイルをダウンロードすると、DLしたファイルの中に不要な改行ファイルが挿入されています。 またrequire_once("dl_config.php");を削除し readfile ($data_pas.$file_to);を readfile ("/data/".$file_to);とすると、改行は入らなくて、正常なファイルがダウンロードされます。 よろしくお願いします。

    • 締切済み
    • PHP
  • ダウンロードしたらなぜかphpファイルに・・・

    サイトから、動画ファイルやrarファイルをダウンロードしようとしたら、 なぜか、別名のphpファイルがダウンロードされます。 どうしたらいいんでしょうか? そのサイトは以前から使っていてこんな事はなかったんですが・・・ お願いします。

  • php_value include_pathを無効

    php_value include_pathを、あるディレクトリ以下では、無効にしたいのですが、 どうすればよいでしょうか? ■前提 ・サイト全体は、「.htaccess」に「php_value include_path」を書いて制御 ■やりたいこと ・ある特定ディレクトリ「hoge」以下では、「php_value include_path」ではなく、 PHPに直接書いた「require_once './★★/●●';」を利用したい ・つまり、設定ファイル「.htaccess」に記述した中のある一部分(特定ディレクトリ以下)だけは、「PHPソースに記述」したincludeパスを使いたい ■試してみてダメだってこと ・「hoge」に「.htaccess」を設置し、空の「php_value include_path=""」と書いてみたけど、うまくいきませんでした

    • ベストアンサー
    • PHP
  • PHPファイル ダウンロード

    サイト上で楽譜をダウンロードしようとたら、PHPファイルというものになっていてダウンロードも印刷もできませんでした。 このような場合どうやったら印刷やダウンロードができるようになりますか? よろしくお願いします。

  • PHPでネット上のPDFファイルを保存

    どこかのサイト上で公開されているPDFファイルを、絶対パスで指定して、ローカルPCにダウンロードさせたいと思っています(ファイル名はダウンロード先のファイル名のまま保存)。 これがPHPのプログラムで可能ならば、ソース例をご提示いただきたく、お願いいたします。

    • 締切済み
    • PHP
  • PHPのinclude('ファイル名')で指定できてしまうのはなぜ?

    お世話になります。 Smartyでテンプレートを用いながらPHPで開発を行っております。 たとえば、あるファイルからSmarty.class.phpをincludeする時 にinclude('Smarty.class.php')でどうやらincludeできている ようなのですが、、なぜ!?なのでしょうか? イメージ的には、include('パス')もしくはphp.iniに設定されている ディレクトリ直下のファイルというイメージなのですが。。 php.iniをのぞいてみるとinclude_pathはコメントアウトされている のですが・・ 疑問です。 ご教授お願いいたします。

    • ベストアンサー
    • PHP
  • phpファイルをダウンロードすることはできますか?

    相手のホームページに、phpと拡張子のつくファイルがあるのですが、 ダウンロードできません。どんな内容なのか見てみたいのですが無理 なのでしょうか?ご存知の方、教えてください。宜しくお願い致します。 ちなみに、iriaでダウンロードを試みたのですあエラーとなって ダウンロードできませんでした。

    • ベストアンサー
    • PHP
  • サーバにあるエクセルファイルをダウンロード

    サーバ内にあるエクセルファイルをダウンロード画面からsubmitして、ダウンロードしたいのですが、ダウンロードしたファイルの内容が文字化けします。またなぜかダウンロード画面のhtml内容が張り付いてたりします。 XML形式で保存したエクセルファイルは問題なく保存→表示できるのですがどうしたらいいのか原因がわかりません。 ダウンロードのソースは、以下のようになっています。 <?php $out_path = mb_convert_encoding($file_path,"SJIS","UTF-8"); $out_file_name = basename($out_path); $file_size = filesize($out_path); header("Content-Type: application/vnd.ms-excel"); header("Content-Disposition: attachment; filename=\"" .     $out_file_name . "\""); header("Content-Length: ".$file_size); readfile($out_path); ?> ちなみに環境は以下のようになっています。 OS :XP 文字コード:UTF-8 framework :symfony 原因をご存知の方、ご教授よろしく御願いします。

    • 締切済み
    • PHP
  • YOUTUBE ダウンロード

    よろしくお願いいたいます。 OSX 10.6.7 safari5.0.5です。 通常YouTubeのDLは普通に構成ファイル一覧より行っていますが、たまに別ウインドウで、 「http://v10.lscache8.c.youtube.com/videoplayback?sparams・・・」が立ち上がり、flvファイルが再生されてしまいDL出来ないことが有ります。 その場合はDLサイトの力を拝借してDLしますが、なぜSAFARIでDL出来ない場合が有るのでしょうか?

    • ベストアンサー
    • Mac
  • PHP:wavファイルのダウンロード

    音楽ファイルを会員に配信するサイトを運営しています。 mp3は問題なくダウンロード・再生できるのですが、wavファイルはダウンロードしてもファイルが破壊されており、再生できません。 wavファイルのバイト数に変化はありませんでした。FTPからファイルをダウンロードすると正常に再生できるので、問題はウェブでのダウンロードをする過程にあることは分かっています。いろいろ調べているのですがそれ以降の原因が分からず困っています。 誰か原因をご存知の方、目星の付く方などおられましたら、ぜひ解答お願いいたします。 ファイルダウンロードには、以下のようなphp関数を使っています。 function download_file($path_file){ if (!file_exists($path_file)) { die("Error: No Such File."); } if (($content_length = filesize($path_file)) == 0) { die("Error: File size is 0.(".$path_file.")"); } if($_POST['sort'] == mp3){ header("Content-Type: audio/mpeg"); }elseif($_POST['sort'] == wav){ header("Content-Type: audio/x-wav"); } header("Content-Disposition: attachment; filename=\"" .basename($path_file)."\""); header("Content-Length: ".$content_length); header("Content-Transfer-Encoding: binary"); $handle = fopen($path_file, 'rb'); while (!feof($handle)) { echo fread($handle, 4096); ob_flush(); flush(); } fclose($handle); }

    • 締切済み
    • PHP