2009-10-06 9 views
31

私はPHPコーディングに若干の慣れがあります。あなたのPHPコードを消毒していないと、悪意のあるユーザーがウェブサイトをハックする可能性があることを認識しています。私が疑問に思っているのは、データ入力ボックス(ファイル送信やユーザー名/パスワード入力フィールドなど)が必要かどうかです。PHPはどれくらい安全ですか?

「include(header.php)」のようなコマンドにも何らかのセキュリティが必要なのですか、それとも本質的に安全ですか?

+0

突出しています。私はあなたが求めている質問のタイトルがあまりにも曖昧であると思います。 – codingbear

答えて

22

ユーザーを信頼しないでください。

include "a/literal/file.php"; 

include $someFile; 

あなたは$ somefileというを設定しますどのように考えるようにしたいことは非常に安全です。ユーザーが$ someFileの値を設定するためにあなたに与えたデータを使用した場合は、それを消毒する方がよいでしょう。

+4

...ユーザー入力に基づいてインクルードを選択する必要がある場合は、常に有効で安全であることがわかっているインクルードのリストを作成し、ユーザー入力をそのリストの値に一致させ、セーフリスト値インクルード。 –

56

他の言語と同じように、PHPコードはプログラマが書いているほど安全です。

また、他の言語と同様に、個々の(そして共通の)セキュリティリスクは、StackOverflowの回答に含めるにはあまりにも多く、詳細です。

セキュアなPHPのコーディングをカバーする本を見つける。

+30

+1多くの人々は、PHPを使用して多くの安全でないコードが書かれているため、PHPが安全でないと思っています。これは、PHPがかなり穏やかな初期学習曲線を持っているため、安全でないプログラマーに安全でないコードを吐き出す可能性があるからです。また、PHPは非常に幅広く展開されているため、安全でないプログラマーがプロジェクトに参加する可能性が高いという統計的な可能性があります。 – snicker

+8

PHPセキュリティに関する本 - 私はChris Shiflett(http://oreilly.com/catalog/9780596006563/)の "Essential PHP Security"を推奨します。かなり包括的で、それは実際には従うのが難しくないことを示しています良い、安全な、コードプラクティス。 – HorusKol

5

PHPは何でも安全です。しかし、デフォルトではなく、プログラマーのスキルに依存します。デフォルトでセキュリティを手助けする傾向がある.NETとは異なります。

パスはダイナミックに生成されている場合はインクルードするだけで十分です。

include (header.php);

は比較的です:

下記のご質問はかなり広いと一般的ですが、あなたが作った特定のポイントに対処するために

include("mypath/myfile.php"); 
+0

これは古くから昔のことかもしれませんが、私たちはPHPで安全なMVCフレームワークを用意しています。このフレームワークはデフォルトでhttp://framework.zend.com/でセキュリティを手助けする傾向があります。 –

1

(myfile.phpのコードに依存する)無害です

include ($header);

は、方法によっては危険なセキュリティホールとなる可能性があります$headerが割り当てられ、消毒されている場合。

+0

前者の大きな利点は、これ以上見る必要がないことです。これはローカルで安全です。 (かなり大きなコードベースで監査をしなければならない人のために、それは私にとって重要です) –

1

具体的に質問に答えるために、PHPは言語として非常に安全です。言語自体については、最新の安定版ビルドを使用して言語ベースのセキュリティを維持することをお勧めします。

4

ここで誰もが同意する - PHPは他のどの言語よりも多かれ少なかれそれ自体では安全ではありません。

あなたはphp.iniファイルを深く見てください。おそらく、すべての指令について学ぶべきでしょう。これは、多くの人が早い段階で間違いを犯す場所です。

4

データ入力ボックスに関しては、SQLインジェクション攻撃、オーバーフロー、不良文字などが気になるはずです。filter_var()mysql_real_escape_string()pg_escape_string()などの機能をチェックしてください。

+1

そして、ウェブページにデータを返送するときの 'htmlentities'。 – DisgruntledGoat

7

sla.ckersからRSnakeを引用してください。2006年にorg post back:

私は興味深いことが、Stefan EsserがPHPインシデント対応チームから引退したと思いました。ボード上で宗教戦争を始めることはありませんが、PHPのセキュリティレスポンスチームの創設者がPHPのセキュリティの不足に腹を立て、その結果として終了するのは興味深いことです。彼のサイトは、現時点ではダウンしている(交通洪水?):[blog.php-security.org]だからここにキャッシュのカット&ペーストです:

12月(土曜日)9 2006

最終夜、私はついにPHPセキュリティレスポンスチームから引退しました。これは、最初は数年前の私の考えでした。

これは多くの理由がありますが、最も重要な点は、PHPのセキュリティを内部から改善しようとする試みが無駄であることを認識したことです。 PHPのセキュリティ問題をユーザに責めようとすると、すぐにPHPグループがあなたのボートに飛びつきますが、PHP自体のセキュリティを批判する瞬間に、あなたは非人格的になります。私はPHPのセキュリティホールを公開したり、Suhosinを開発したりするために、私が不道徳な裏切り者と呼ばれた時代を数えずに止めました。

通常のPHPユーザーにとっては、これは私の注意事項のセキュリティホールに遅い応答時間を隠すことはもうありません。また、PHPセキュリティレスポンスチームが何ヶ月間も問題を修正することを拒否したため、私の勧告の一部にはパッチを用意する必要はありません。また、PHPのセキュリティ上の問題について、より多くの勧告があることを意味します。 10:58

それが聞こえるように怖いまあ、でPHP、セキュリティにステファン・エッサー投稿者

は、私は最終的にPHPのセキュリティ上の「本物」を得るために本当に興奮しています。私はいつもそれを少し気にしていて、Stefanが何を言わなければならないのかを見るのは興味深いでしょう。

ソース:http://sla.ckers.org/forum/read.php?2,3976きれいに強化されたPHPプロジェクト、PHPのバグのSuhosin http://www.hardened-php.net/suhosin/とEsser氏の月を紹介

あなたはより具体的には、タイトルを作りたいかもしれませんhttp://www.php-security.org/

関連する問題