ホームページ  >  記事  >  バックエンド開発  >  PHP Web サイトの一般的なセキュリティ脆弱性とそれに対応する予防策の概要

PHP Web サイトの一般的なセキュリティ脆弱性とそれに対応する予防策の概要

伊谢尔伦
伊谢尔伦オリジナル
2016-12-02 11:27:331293ブラウズ

現在、PHP をベースにした Web サイト開発が主流となっており、この記事の著者は Web サイトの脆弱性を軽減することを目的として、PHP による Web サイトの攻撃とセキュリティの防止に焦点を当てています。 1. 一般的な PHP Web サイトのセキュリティ脆弱性

PHP の脆弱性に関しては、現在 5 つの一般的な脆弱性があります。セッションファイルの脆弱性、SQLインジェクションの脆弱性、スクリプトコマンド実行の脆弱性、グローバル変数の脆弱性、ファイルの脆弱性です。ここでは、これらの各脆弱性について簡単に紹介します。

1. セッションファイルの脆弱性

セッション攻撃は、ハッカーによって最も一般的に使用される攻撃方法の 1 つです。ユーザーが特定の Web サイトにアクセスするとき、ページに入るたびにアカウント番号とパスワードを入力する必要がないように、PHP はユーザーの使用とアクセスを容易にするためにセッションと Cookie を設定します。

2. SQL インジェクションの脆弱性

Web サイトの開発中、プログラマーがユーザー入力データに対する包括的な判断を欠いていたり、厳密にフィルタリングを行っていなかったりするため、サーバーがユーザー情報のクエリなどの悪意のある情報を実行します。ハッカーは、悪意のあるプログラムから返された結果に基づいて、対応する情報を取得できます。これは Yuexingwei の SQL インジェクションの脆弱性です。

3. スクリプト実行の脆弱性

スクリプト実行の脆弱性の一般的な原因は、Web サイトの開発時にプログラマがユーザーから送信された URL パラメータをフィルタリングしていないことです。これにより、ユーザーが送信した URL に悪意のあるコードが含まれる可能性があり、クロスサイト スクリプティング攻撃が発生する可能性があります。以前の PHP Web サイトにはスクリプト実行の脆弱性がよく存在していましたが、PHP バージョンのアップグレードにより、これらの問題は軽減されるか、存在しなくなりました。

4. グローバル変数の脆弱性

PHP の変数は、他の開発言語と同様に、使用時に事前に宣言する必要がなく、使用時にシステムが自動的に作成するため、必要がありません。変数の型を記述すると、システムがコンテキストに基づいて変数の型を自動的に決定します。この方法は、プログラマーがプログラミングでエラーを犯す可能性を大幅に減らすことができ、非常に便利です。

5. ファイルの脆弱性

ファイルの脆弱性は、通常、Web サイトの設計時に Web サイト開発者が外部から提供されたデータを適切にフィルタリングしていないことが原因で発生し、ハッカーがその脆弱性を悪用して Web プロセス上で対応するコマンドを実行します。 lsm.php に include($b."/aaa.php".) のようなコードが含まれている場合、ハッカーにとっては変数 $b を通じてリモート攻撃が実行され、これがハッカー自身のコードである可能性があります。ウェブサイト。 a.php include=http://lZ7.0.0.1/b.php をサーバーに送信し、b.php の命令を実行できます。

2. 一般的な PHP 脆弱性の予防策

1. セッション脆弱性の予防

前の分析から、最も一般的なセッション攻撃はセッション ハイジャックであることがわかります。つまり、ハッカーはさまざまな攻撃を通じてユーザーのセッション ID を取得します。メソッドを使用し、攻撃されたユーザーの ID を使用して、対応する Web サイトにログインします。このため、これを防ぐには次の方法があります。 まず、セッション ID を定期的に変更します。 セッション ID の変更は、PHP 独自の機能を使用して実現できます。 次に、セッションのデフォルト名を変更します。この変数は通常、Cookie に保存され、その名前が変更されると、ハッカーによる一部の攻撃をブロックできます。いわゆる透過性とは、Cookie が使用されないことを意味します。 http リクエストを使用する場合、セッション ID はリンクを使用して渡されます。透過的なセッション ID をオフにするには、PHP.ini ファイルを使用して非表示パラメータを渡します。ハッカーがセッション データを取得した場合、関連パラメータは隠蔽されます。はい、セッション ID 変数値を取得することも困難です。

2. SQL インジェクションの脆弱性の防止

ハッカーは SQL を挿入するさまざまな方法を持っており、それらは柔軟で変更可能ですが、SQL インジェクションに共通しているのは、入力フィルターの脆弱性を利用することです。したがって、SQLインジェクションを根本的に防ぐためには、リクエストコマンド、特にクエリリクエストコマンドのフィルタリングを強化することが根本的な解決策となります。具体的には、次の点が含まれます。 まず、フィルタリング ステートメントがパラメータ化されます。つまり、ユーザー情報の入力は、ユーザー入力をステートメントに直接埋め込むのではなく、パラメーター化されたステートメントを通じて実現されます。 2 つ目は、Web サイトを開発するときに解釈プログラムをできるだけ使用しないことです。3 つ目は、Web サイトを開発するときにこの方法を使用して、Web サイトのバグをできる限り回避することです。そうしないと、ハッカーがこの情報を使用する可能性があります。さらに、Web サイトの脆弱性をスキャンするには、専門的な脆弱性スキャン ツールを頻繁に使用する必要があります。

3. スクリプト実行の脆弱性の防止

ハッカーがスクリプト実行の脆弱性を攻撃する手段は多様かつ柔軟です。そのため、ハッカーによるスクリプト実行の脆弱性の攻撃を効果的に防止する必要があります。 。ここでよく使われる方法は以下の4つです。 1 つは、実行可能ファイルのパスを事前に設定することです。これは、safe_moade_exec_dir によって実現できます。2 つ目は、通常、escapeshellarg 関数を使用してコマンド パラメータを処理することです。3 つ目は、システム独自の関数ライブラリを使用して外部コマンドを置き換えることです。

4. グローバル変数の脆弱性を防ぐ

PHPのグローバル変数の脆弱性問題については、以前のPHPバージョンでもこのような問題がありましたが、PHPバージョン5.5以降はphp.iniの設定とGPCへのruquest_orderの設定で実現可能になりました。さらに、php.ini 設定ファイルで、magic_quotes_runtime のブール値を設定して、外部引用符付きデータのオーバーフロー文字にバックスラッシュを追加するかどうかを設定できます。 Web サイトのプログラムがサーバーのどのような設定状態でも実行できることを保証するため。 get_magic_quotes_runtime を使用してプログラム全体の先頭で設定ステータスを検出し、手動で処理するかどうかを決定するか、set_magic_quotes_runtime(0) を使用して最初 (または自動エスケープが必要ないとき) で設定をオフにすることができます。

5. ファイルの脆弱性の防止

PHP ファイルの漏洩については、サーバーの設定と構成によって防止の目的を達成できます。ここでの具体的な操作は次のとおりです。まず、PHP コード内のエラー プロンプトをオフにします。これにより、ハッカーがエラー プロンプトを通じてデータベース情報や Web ページ ファイルの物理パスを取得するのを防ぐことができます。次に、open_basedir を慎重に設定します。これは、外部でのファイル操作を禁止することを意味します。処理: これにより、ローカル ファイルまたはリモート ファイルが攻撃から保護されます。3 番目に、コマンドが実行されるのを防ぐために、safe-made をオンに設定します。ファイルのアップロードを標準化して禁止することで、PHP Web サイトのセキュリティ要素を効果的に向上させることができます。


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。