ホームページ >バックエンド開発 >PHPチュートリアル >PHPマスター|トップ10のPHPセキュリティの脆弱性
キーポイント
allow_url_fopen
設定を無効にすることで回避できます。 allow_url_include
session_regenerate_id()
sql噴射
トップスポットはSQLインジェクション攻撃です。この場合、誰かがSQLコードスニペットに入ります(古典的な例はデータベースステートメントを削除しますが、他にも多くの破壊的な操作がありますが、URLまたはWebフォームに値として値があります。今、彼があなたのテーブル名をどのように知っているか心配しないでください。あなたは不吉で機知に富んだ敵と戦っています。それで、あなたはこれを避けるために何ができますか?まず、ユーザーから受け取る入力に懐疑的でなければなりません。みんなフレンドリーだと思いますか?あなたの配偶者の家族を見てください...彼らは奇妙で奇妙で、一部はさらに危険です。このような問題を防ぐ方法は、PDOの前処理ステートメントを使用することです。 PDOについて詳しく説明したくありません。前処理ステートメントがデータを命令から分離していると言ってください。そうすることで、データがデータ以外のものとして扱われるのを防ぎます。詳細については、Timothy Boronczykが書いた記事「MySQL拡張からPDOへの移行」をご覧ください。
クロスサイトスクリプト攻撃(XSS)
この欺ceptionに頼って生き残るために頼っている心のこもった人々を丸めます。両親、今日の子供たちと話して、彼らが邪悪なXSS攻撃者にならないように! XSS攻撃の本質は、PHPスクリプトの出力にコード(通常はJavaScriptコードがありますが、任意のクライアントコードになることができます)を注入することです。この種の攻撃は、送信された入力を表示すると可能です。たとえば、フォーラムの投稿でこれを行う場合があります。攻撃者は、あなたのウェブサイトに言いようのないダメージを引き起こす可能性のあるJavaScriptコードを自分のメッセージに投稿することができます。これらの強盗が何ができるかを考えてみてください。詳細と自分自身を守る方法については、PHPMasterに関するこれらの優れた記事を読むことをお勧めします:
ソースコード漏れ
これは、Apacheの構成が失敗したときに人々が表示されないファイル名とコンテンツを表示する機能に関係しています。はい、私は理解しています、これは起こりそうにありませんが、それは起こる可能性があり、自分自身を守るのは簡単です。私たちは皆、PHPがサーバー側であることを知っています - ソースコードを見るだけで、スクリプトのコードを表示することはできません。しかし、Apacheが失敗し、スクリプトが突然プレーンテキストで機能する場合、人々は見たことのないソースコードを見るでしょう。このコードの一部は、アクセス可能な構成ファイルをリストしたり、データベース資格情報などの機密情報を含める場合があります。ソリューションのコアは、アプリケーションのディレクトリ構造をセットアップする方法です。つまり、悪い人がいくつかのコードを見るのは問題ではありません。問題は、敏感なファイルが公開ディレクトリに保存されているかどうかを確認できるコードです。このエラーの結果を回避するために、公開されたディレクトリの外に重要なファイルを保存します。ディレクトリ構造の例を含む詳細については、この記事のポイント5を参照してください。このトピックに関する詳細については、このフォーラムのディスカッションを参照してください。
リモートファイルには
が含まれています待ってください。説明させてください:リモートファイルの包含とは、リモートファイルがアプリケーションに含まれていることを意味します。とても深いですよね?しかし、なぜこれが問題なのですか?リモートファイルは信頼できないためです。アプリケーションで実行したくないコードが含まれており、悪意を持って変更された可能性があります。 www.myplace.comのWebサイトにライブラリwww.goodpeople.com/script.phpが含まれているとします。ある夜、www.goodpeople.comがハッキングされ、ファイルの内容はアプリケーションを破壊する悪意のあるコードに置き換えられました。その後、誰かがあなたのウェブサイトにアクセスし、更新されたコードを導入してから - Bang!では、どうやってそれを止めますか?幸いなことに、この問題の修正は比較的簡単です。 php.iniにアクセスして、これらのフラグの設定を確認するだけです。
allow_url_fopen
- 外部ファイルを含めることができるかどうかを示します。デフォルト設定は「オン」ですが、オフにする必要があります。 allow_url_include
- include()
、require()
、include_once()
、require_once()
関数がリモートファイルを参照できるかどうかを示します。デフォルトではオフになり、オフになっているallow_url_fopen
もオフになります。 セッションハイジャック
セッションハイジャックは、悪い人が他の誰かのセッションIDを盗んで使用するときです。これは、安全なセーフティデポジットボックスの鍵のようです。クライアントとWebサーバーの間にセッションが確立されると、PHPはセッションIDをクライアントにPHPSESSIDという名前のCookieに保存できます。ページリクエストでIDを送信して、サーバー上の永続的なセッション情報にアクセスします(これにより、スーパーグローバル変数$_SESSION
配列が入力されます)。誰かがセッションキーを盗んだ場合、それは悪いですか?答えは次のとおりです。そのセッションで重要なアクションを実行しない場合、答えはノーです。ただし、そのセッションを使用してユーザーを認証すると、一部の人がログインして何かに入ることができます。これは、ユーザーが重要であり、多くの権限がある場合に特に悪いことです。それで、人々はどのようにしてこれらのセッションIDを盗むのですか、そして私たち、私たちは、直立して神を恐れている私たちは何をすることができますか?セッションIDは通常、XSS攻撃によって盗まれますので、XSS攻撃を防ぐことは、二重の利点を持つことができる良いことです。また、セッションIDをできるだけ頻繁に変更することも重要です。これにより、盗まれたタイムウィンドウが短くなります。 PHPでは、セッションIDを変更してクライアントに通知するためにsession_regenerate_id()
関数を実行できます。 PHP 5.2以降を使用しているユーザー(使用していますか?)には、JavaScriptがセッションID(session.cookie.httponly
)にアクセスするのを防ぐPHP.ini設定があります。または、session_set_cookie_parms()
関数を使用できます。共有ホスティングサービス(たとえば、グローバルにアクセス可能なディレクトリにセッション情報を保存する)を使用する場合、セッションIDはサーバー側でも脆弱性を持つ場合があります。この問題をブロックすると、スクリプトにのみアクセスできる場所(ディスクまたはデータベース)にセッションIDを保存するだけです。 /tmp
クロスサイトリクエストforgery
カタログトラバーサルこの種の攻撃は、他の多くの攻撃と同様に、セキュリティが低いウェブサイトを探し、ウェブサイトを見つけた場合、所有者が公開しないファイルにアクセスします。また、
(ポイント、ポイント、スラッシュ)攻撃、登山攻撃、バックトラッキング攻撃とも呼ばれます。この攻撃を防ぐ方法はいくつかあります。まず第一に、私はそれがあなたに起こらないことを心から願っています。妖精やユニコーンを希望することもあります。時々それはそうではありません。 2番目のアプローチは、ホワイトリストを使用して、特定のリクエストのためにどのページを返すことができるかを定義することです。別のオプションは、ファイルパスを絶対パスに変換し、許可されたディレクトリ内のファイルを参照することを確認することです。 ../
概要
これらは、誤ってそれらを避けた場合にPHPアプリケーションをハッキングする可能性のある上位10の問題です。はい、10。カウント…1,2,3…何?あなたは8だけを数えましたか? OK、たぶん7。まあ、それはあなたが簡単にだまされることができることを示しています、そして私は悪い男でさえありません! Fotoliaの写真PHPセキュリティの脆弱性(FAQ)
についてはよくある質問があります 最も一般的なPHPセキュリティの脆弱性は何ですか?
最も一般的なPHPセキュリティの脆弱性には、SQLインジェクション、クロスサイトスクリプト攻撃(XSS)、クロスサイトリクエスト偽造(CSRF)、ファイルインクルージョンの脆弱性、PHPオブジェクトインジェクションが含まれます。不適切に処理された場合、これらの脆弱性は、不正アクセス、データの盗難、さらにはサーバーテイクオーバーにさえつながる可能性があります。開発者がこれらの脆弱性を理解し、PHPアプリケーションを保護するために適切なセキュリティ対策を実装することが重要です。前処理ステートメントまたはパラメーター化されたクエリを使用して、SQL注入を防ぐことができます。これらの方法により、ユーザー入力は常にSQLコマンドの一部ではなく、リテラルデータとして扱われることが保証されます。これにより、SQL注入のリスクが効果的に排除されます。さらに、ユーザー入力を常に確認およびクリーンにして、悪意のあるコードが含まれていないことを確認してください。
クロスサイトスクリプト攻撃(XSS)は、攻撃者が他のユーザーが閲覧したWebページに悪意のあるスクリプトを注入できるようにする脆弱性です。これにより、セッションのハイジャック、個人情報の盗難、その他の深刻な問題につながる可能性があります。 XSSを防ぐには、常にユーザー入力をエンコードし、信頼されていないデータをHTML出力に挿入しないでください。
AnticsRFトークンを使用して、CSRF攻撃を防ぐことができます。これらは、ユーザーセッションに関連付けられた唯一のランダム値です。それらは、各状態の変更要求(フォームの提出など)に含まれ、サーバーによってチェックされます。トークンが欠落または正しくない場合、リクエストは拒否されます。
ファイルインクルージョンの脆弱性とは、アプリケーションがユーザー入力を使用して操作用のファイルパスを構築する状況を指します。攻撃者は、リモートサーバーからファイルを含むように入力を操作して、コードの実行、データの漏れ、またはサービスの拒否をもたらすことができます。この脆弱性を軽減するには、ファイルパスでユーザー入力の使用を避けるか、入力を徹底的に確認してクリーニングします。
PHPオブジェクトインジェクションは脆弱性です。これは、ユーザー入力を使用してクラスをインスタンス化する場合に発生します。攻撃者は、入力を操作して、クラスのインスタンスを作成し、そのメソッドを実行できます。これを防ぐために、信頼されていないソースからのデータを非表示にしないでください。
PHPセッションは、安全なCookieを使用し、ログイン後にセッションIDの再生、およびセッションのタイムアウトの実装によって保護できます。さらに、セッションデータはサーバー側に保存され、セッションIDのみが参照するために使用されます。
PHPセキュリティのベストプラクティスには、PHPバージョンを最新の状態に保つこと、セキュリティ構成のセットアップ、ユーザー入力の検証とクリーニング、セキュアパスワードのハッシュアルゴリズムの使用、正しいエラー処理の実装が含まれます。
PHPの脆弱性は、コードレビュー、浸透テスト、自動セキュリティツールの使用を通じて検出できます。セキュリティの脆弱性に関するアプリケーションを定期的にレビューすることは、安全なPHPアプリケーションを維持することの重要な部分です。
PHPマニュアル、オンラインチュートリアル、セキュリティブログ、フォーラムなど、PHPセキュリティについて学ぶための多くのリソースがあります。さらに、OWASPなどの組織は、Webアプリケーションセキュリティに関する包括的なガイドを提供しています。
以上がPHPマスター|トップ10のPHPセキュリティの脆弱性の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。