ホームページ  >  記事  >  バックエンド開発  >  PHP の脆弱性について、また PHP の脆弱性を防ぐ方法について教えてください。

PHP の脆弱性について、また PHP の脆弱性を防ぐ方法について教えてください。

WBOY
WBOYオリジナル
2016-07-29 08:56:071096ブラウズ
脆弱性は、XSS、SQL インジェクション、コマンド実行、アップロードの脆弱性、ローカル インクルード、リモート インクルード、権限バイパス、情報漏洩、Cookie 偽造、CSRF (クロスサイト リクエスト) などのカテゴリにすぎません。これらの脆弱性は PHP 言語だけのものではありません。この記事では、PHP がこれらの脆弱性を効果的に防ぐ方法を紹介するだけです。

1.xss + SQL インジェクション (xss 攻撃の詳細な紹介)

それらの大部分は当然 XSS と SQL インジェクションです。フレームワーク タイプまたはパブリック ファイルの場合は、パブリック ファイルで XSS と SQL を実行することをお勧めします。インジェクションフィルター。次のように PHP でフィルター関数を作成します:

$_REQUEST = filter_xss($_REQUEST);

$_GET = filter_xss($_GET);

$_POST = filter_xss($_POST);

$_COOKIE = filter_xss($ _COOKIE);

$_POST = filter_sql($_POST);

$_GET = filter_sql($_GET);

$_COOKIE = filter_sql($_COOKIE);

$_REQUEST = filter_sql($_REQUEST);最も単純な filter_xss 関数は htmlspecialchars() です

最も単純な filter_sql 関数は mysql_real_escape_string() です

もちろん、この filter_sql (SQL インジェクションの詳細な防止) が文字と検索型インジェクションのみをフィルターできることは誰もが知っています。数値型に対する解決策はありません。ただし、この層のフィルタリングの後は、後から数値 SQL ステートメントに注意するだけで済み、intval フィルタリングを追加するだけで済むこともわかります。

2. コマンド実行

コマンド実行はキーワードから始めて、全部で3つに分類できます

(1) PHPコード実行: evalなど

(2) シェルコマンド実行: exec 、passthru、system、shell_execなど

(3) ファイル処理: fwrite、fopen、mkdirなど

これらのカテゴリでは、パラメータがユーザー制御可能かどうかに注意する必要があります。

3. アップロードの脆弱性

アップロードの脆弱性も、その処理フローを注意深く分析する必要があります。最も安全な方法は、ファイルを保存するときにランダムなファイル名を使用することです。 . およびサフィックス ホワイトリスト モード。 2 番目に注意すべきことは、ファイルをアップロードする場所が複数ある可能性があることです。サードパーティのエディタが特定のディレクトリに突然含まれる場合があります。

ファイルには、include()、include_once()、require()、require_once()、file_get_contents()などの脆弱性に関連する関数が含まれています。

最も一般的なものは、download.phpなどのダウンロードファイル関数です。このタイプでは、?file=./../../etc/passwd。

4. 許可バイパス

許可バイパスは 2 つのカテゴリに分類できます

(1) バックグラウンド ファイルへの不正アクセス。バックグラウンドファイルにはセッション検証が含まれていないため、この問題が発生しやすくなります

(2) ユーザー分離が実装されていない場合、たとえば、mail.php?id=23 でメールが表示され、ID を変更します。 id= 24 で他の人のレターを見ました。コードを書くのに便利です。文字はデータ テーブルに保存され、ID はフロント エンドに表示されるとき、ID をクリックするだけで取得できます。ただし、ユーザーの分離と所有権が決定されないため、不正アクセスが発生しやすくなります。

このような例は、特定の銀行の評価を行うときによく発見されます。

5. 情報漏洩

たとえば、ディレクトリのリスト化は、コード監査とは関係なく、比較的リスクの低い脆弱性であると考えられています。こんなコードに遭遇したことがあります

表面的には問題ないように見えますが、リクエストがxx.phpになると?a[]=1、つまりパラメータが配列になるとエラーが発生してパスが漏れてしまいますが、もちろんissetで判定することはありません。設定ファイル、または公開ファイルでエラープロンプトをオフにすることをお勧めします。 エラー表示機能をオフにする次のコードを追加します:

という記事がありましたPHP Diandiantong (phpddt.com) で以前: PHP の脆弱性防止戦略に関して、register_globals の害と Magic Quotes の使用方法が紹介されました。

以上、PHPの脆弱性とPHPの脆弱性を防ぐ方法を紹介しました。 、関連コンテンツも含めて、PHP チュートリアルに興味のある友人に役立つことを願っています。

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