web-dev-qa-db-ja.com

PHPは本質的に安全でないと人々が言うのはなぜですか?

PHPは本質的に安全ではありません。これは本当ですか?なぜですか?

18
Moshe

私の定義では、言語が「本質的に安全でない」ことは、優れたプログラマーが適応できるため、かなり困難です。しかし、PHPは、多くの地雷原を初心者のために横に置いたままにし始めました。

PHPの初期バージョンはセキュリティにほとんど注意を払わず、設計にはいくつかの大きな欠陥がありました。セキュリティはコアソフトウェアやライブラリに組み込むのが難しいです。セキュリティトレーニングは最良の状況では難しいです、さらには開発者の大部分のサブセットが経験が浅く、悪いデフォルトで始めた場合はなおさらです。

たとえば、デフォルトでregister_globalsが無効にされたのはバージョン4.2.0でしたので、ネットワーク経由で受信されたデータはグローバルネームスペースに直接挿入されなくなりました。この機能は、次のバージョンで完全に削除される予定です。

PHPとデプロイの容易さPHPアプリケーションの初期リリースは、セキュリティ意識がほとんどない多くの開発者を魅了し、多数のアプリケーション、デプロイされたベースのサイズと脆弱性もエクスプロイトコミュニティから多くの関心を集めました。

ここにいくつかの参考文献と便利なリンクがあります

27
nealmcb

これらの理由のいくつかは "Fractal of bad design" で説明されています。

  • PHPはブラインドをリードするブラインドです。 PHP wikibook;これは「絶対に脆弱なアプリケーションの書き方」と呼ばれるべきです。他の言語で公開できるとは想像できません。

  • セキュリティとの関係。 pythonシリアライズ( pickle )などの安全でないことに関するドキュメント)を読むと、ページの上部に「信頼できないものでは使用しないでください」という赤い警告が表示されます。入力!」。PHPはどうですか?

  • 前の項目に加えて:他の言語では、コードが何をしてどのように機能するかを理解していない場合、コードは問題と見なされます。 PHPでは、実際に悪用されているコードは問題と見なされます。

  • PHPはCGIとしてのみ実行されます。つまり、リクエストごとにスクリプトが完全に再初期化されます。そしてそれはフレームワークへの憎悪を引き起こします:「彼らは遅いです!」。しかし、フレームワークはコードインジェクションの脆弱性を排除します(SQLインジェクション-100%まで)。主な違いがあります。準備されたステートメントはデフォルトで安全です。 SQLインジェクションから身を守るために何もする必要はありません。つまり、それを忘れたり、知らなかったりすることはありません。それらを使用しないことは、デフォルトでは不安です。毎回手動で修正しない限り、セキュリティ上の欠陥があります。

  • PHPインタープリター自体が壊れています。 APIが\ 0を文字列ターミネータとして解釈する一方で、PHP自体が解釈しないという有毒なゼロのバグ-なぜpythonがないのですか??

弱いタイピング(つまり、文字列/数値/その他の間でのサイレント自動変換)は非常に複雑であるため、プログラマーのわずかな労力が節約されても、それだけの価値はありません。

  • this を見てください。 2つの変数を文字列として比較していると思いますか?おっと、あなたは違います! さらに面白い 、私のお気に入りの1つ。 PHPでフォーラムエンジンを記述できるすべての人が2つの文字列を正しく比較できるわけではありません。
11
Smit Johnth

これには少なくとも2つのポイントがあります。

  1. PHPは非常に至る所に存在するため、ハッカーにとって興味深いターゲットになります。また、PHPは使いやすいため、多くの初心者プログラマーがPHPを使用しています。したがって、アプリケーションにサードパーティのライブラリを含めると、安全でないコードを取得する可能性が高くなります。

  2. そして、もっと重要な点は、PHPは現在の規模で使用するように設計されていなかったことです。RasmusLerdorfは、PHP -彼が使用したスクリプトは、そこから成長しました。したがって、彼がそれを書いたとき、セキュリティは最も重要な側面ではありませんでした、そして彼が(プログラムするのがより簡単だったので)元に戻すことに決めた多くのことは今やセキュリティリスクです。

7
Andreas Arnold

より人気のある主題は-それが引き出す注目度が高いことです。これが最初の真実です。 2番目の真実は、PHP当初から十分に設計されていなかったため、現在は内部ハックが多く機能しているため、セキュリティ実装の失敗やバージョンの非互換性が常に発生しています。)あなたがチェックできる証拠 [〜#〜] mops [〜#〜] 。議論することはこれ以上ないと思います。

4
anonymous

主な問題は、デフォルトの構成と低い参入障壁です。

PHPアプリをデプロイする最も簡単な方法は、mod_phpを使用して "Apache"と呼ばれる非効率的なホラーをインストールし、開発が不十分なアプリを/var/wwwに投入して、世界を監視することですそれは機能しますが、セキュリティ上の災害です。

たとえば、Node.jsアプリは、Webルートとは完全に独立した独自のディレクトリで、独自のプロセスとして実行されます。ウェブルートは、アセットとユーザーがアップロードしたコンテンツを保存するためだけに存在し、アプリがそれを必要としない場合は省略できます(たとえば、REST APIの場合のみ)。 jsファイルはそこにアップロードされますが、問題はありません(フィッシングやXSSなどのクライアント側の損害を与える可能性がありますが、範囲外です)。

一方、デフォルトのPHP構成を使用すると、.phpファイルがアップロードおよびリクエストされた場合、正当なアプリの権限で実行され、そのファイルにアクセスして変更し、アクセスし、 DBなどから機密データを引き出します。これは災害であり、PHPサイトのほとんどの妥協案は、安全でないファイルアップロードフォームから来ています。

アプリとコンテンツを分離するなど、セキュリティを確保する方法はいくつかあります。アプリのファイルには、Webルートからアクセスできません。また、コンテンツディレクトリからファイルを実行しないでください。ほとんどのフレームワークはこのアプローチを使用し、すべてのコントローラー、モデル、ビューはappディレクトリにあり、2番目のpublicディレクトリはすべてのアセット、アップロードされたコンテンツ、および単一のindex.phpファイルを保持しますこれはアプリのエントリポイントであり、bootstrapフレームワークとアプリに使用されます。次に、publicディレクトリをWebルートとして使用するようにWebサーバーを構成します。他のすべてをコンテンツとして提供しながらindex.phpを実行します。悪意のある.phpファイルがアップロードされたとしても、それはプレーンテキストとしてのみ提供され、世界中のばか者の試みの前で目を傷つけますウェブサイトの妥協点で。

それで、なぜ誰もがこれをしないのですか? 「hiをインストールする方法laravelフレームワークをcpanel無料ホスティングにインストールしますか?thx

それらのような人々のために。エントリの障壁が本当に低いということは、PHPユーザーは開発者ではなく、開発者になりたくないということを意味します。コードをコピー/貼り付けするため、私はそれらを開発者とは見なしません。理解していないチュートリアルは、開発者であることを意味するのではなく、無責任なばかであることだけを意味します。自分が何をしているか、どのように実行できるかを理解するために時間を割くことができるときにのみ、開発者になります 正しい方法 。私は偏見があるかもしれませんが、それはまた、スタックExchangeに行き、インターネットに接続するWebサーバーを設定する前にサーバーのセキュリティに関するいくつかの基本的なことを読むことを意味します。

セキュリティガイドラインを適用したり、共有ホスティングのフレームワークを使用したりすることができないことを考えると(共有ホスティングは十分に思えるので、やりたくない読み取りが必要なため、VM /専用サーバーに移動する必要はありません。 PHP共有ホスティングは多くの場合無料です)彼らは、安っぽくて安全でないアプリケーションを作成し続け、安っぽい、すでに危険にさらされているcPanel駆動の共有ホスティングサーバーに展開し続けます。

2
user42178

いいえ、そうではありません。 PHPで安全なコードを完全にうまく書くことができます。ただし、PHP isで記述されたコードの多くは安全ではなく、その理由は単純です-PHPのエントリのバリアは比較的低く、つまりセキュリティについてほとんど知らない多くの人がPHPで記述します。一方、PHPはWeb指向です。つまり、パブリックPHPアプリケーションは、インターネット上の誰からでも攻撃される可能性があります(たとえば、デスクトップのC++アプリケーションは通常、上記のデスクトップコンピューターへのアクセス権をすでに持っているユーザーのみが攻撃する)。

2
StasM

PHPコードは非常に単純な言語であるため、コードを記述できる馬鹿がたくさんいます。これにより、特にinclude($_GET['page'])- style(remote)の安全でないコードが大量に発生します。コードインクルードホール、XSSホール、SQLインジェクションホール。

PythonとJavaは、これまでプログラミングしたことがない人にはあまり人気がないため、プログラミングの初心者が少なく、恐ろしい安全でないコードが作成される可能性が低くなります。

1
ThiefMaster

別の側面:Zendは自社の企業をターゲットにしていますかPHPスタックは競合よりも脆弱ですか?それは安全性のせいにされるべき言語ではありません。それは設計です。悪い設計は、すべての言語。セキュリティは国家ではなく、プロセスです。そして、PHP)の膨大な貢献者基盤は、かなり良い仕事をします。

0
djozsef