2012-02-13 5 views
5

PHPスクリプトがサーバ上のファイルに出力を書き込ませたいときは、しばしば否定的なコメントに直面します。サーバのセキュリティを損なうことなくPHPにファイルを書き込むことを許可する方法

私はfopen(),fwrite()およびfclose()の機能を使用します。

これを実現する方法を知る唯一の方法は、出力ファイルのアクセス許可を0666に設定するか、 "nobody"(PHPがApache Webサーバー上で実行するユーザー)が所有することです。

「0666」または「nobodyが所有している」がセキュリティ上のリスクである場合、PHPスクリプトがファイルに書き込むことをどのようにして確実かつ安全に許可しますか?

このトピックに関するガイダンスをお寄せいただきありがとうございます。

+0

独自のスクリプトによるファイルへの書き込みを許可することによって、「サーバーのセキュリティを侵害する」方法を説明してください。 DBへの書き込みはセキュリティ上のリスクですか?コードにセキュリティ上のバグがないことを確認してください。物事が正しく行われている限り、問題はありません。 – Flukey

+0

@Flukey ...そこに私の質問の目的があります。私はこの問題をはっきりと見ていない。しかし、私がサーバー上にある0666ファイル、またはPHPが実行するユーザーが所有するファイルがあると言えば、私は行に沿ったコメントを受け取ります... "もちろん、あなたはあなたのサーバーをセキュリティに開放していることを知っていますリスク "です。サーバーのセキュリティを犠牲にすることなく効果的なスクリプトを作成したいだけです。 –

+1

書かれているファイルがパブリックApacheディレクトリの外にある限り、問題はありません。彼らのコメントは無知です。 – Flukey

答えて

3

アップロードした後にPHPからファイルにアクセスする必要がある場合は、Webサーバー(この場合はApache)にアクセスできるようにする必要があります。人々が話すリスクは、あなたのサイトにあるスクリプトがファイルを提供することにだまされる可能性があるということです。それは仮想的なリスクですが、多くのコンテンツ管理システムで発生しています。このリスクを軽減するには

  1. ファイル名とパスを簡単に推測できないようにします。ユーザーがgetfile.php?file=1.txtへのパスを持っている場合は、2.txtもあると容易に推測できます。名前を暗号化するか、それを順序付けしないでください。
  2. ファイルを処理するスクリプトを作成すると、ログインしたユーザー、リソースへの承認などの項目が確認され、不正な参照を避けるためのパスを含むファイル名からは何も取り除かれ、/etc/passwdなどになります。

ファイルを削除して、それを提供したり、PHPで再度アクセスしたりする必要がない場合は、さらにオプションがあります。 chmodまたはchownコマンドを使用して、apacheユーザーに読み取り不能にしてください。特別な編集をしたい場合は、cronスクリプトを使ってファイルをPHPソース内の未知の場所に移動(名前を変更)します。少なくともサーバーがハッキングされていれば、侵入者はディレクトリ内を歩くことはできませんが、オペレーティングシステムのセキュリティが脅かされるようになっています。

+0

ありがとう@DuaneGran。私はあなたの答えを読み、すぐにそれをもっと徹底的に消化します。しかし、私の最初の反応は、「名前をハッシュする」という意味ですか?そして、あなたはそれをどのようにしてスクリプトで使っていますか? –

+0

@ Dr.DOTこれは片方向であるため、ハッシュを提案すると誤解されました。私の悪い。それが起こると、この非常に最近の質問はファイル名のために働く簡単なcrypt/decrypt関数についての答えを持っています:http://stackoverflow.com/questions/9262109/php-simplest-two-way-encryption –

-1

書き込み可能なディレクトリが外部からアクセス可能な領域にある場合、リスクが発生します。その後、適切なツールを持っていて、そのディレクトリやファイルに必要なものを書き込む方法を知っている人。その後、マルウェアをサイトに配置したり、サイトにフィッシングスキームを作成することができます。

本当に彼らはあなたを妥協するためにあらゆる種類のことを行うことができます。私は自分のサーバーでこれを見てきましたが、実際にはこれに適切な解決策が見つかっていません。

関連する問題