ホームページ > バックエンド開発 > PHPチュートリアル > HTTP 攻撃と防御 PHP セキュリティ構成

HTTP 攻撃と防御 PHP セキュリティ構成

WBOY
リリース: 2016-06-23 13:04:20
オリジナル
992 人が閲覧しました

1セキュリティとは

いわゆるセキュリティとは、Web アプリケーションや Web ページをハッカーによる攻撃から保護することです。純粋に楽しみのために他人のコンピュータに侵入するハッカーもいますが、さらに多くのハッカーは、目的を達成するために他人のコンピュータから機密ファイルを盗んだり、コンピュータ全体を麻痺させたりするためにあらゆる手段を講じます。インターネット上にはハッカーが使用できるソフトウェアが多数あり、それらのソフトウェアのほとんどは無料で使いやすいため、一般の人がコンピュータを攻撃することはそれほど難しくありません。重要なのは、コンピュータにどのような保護が施されているかです。ウイルス チェック ソフトウェアやファイアウォールをインストールするだけですべてが安全であると考えている場合、セキュリティの本当の意味を理解していません。


2 register global

PHP4.2.0 以降、php.ini の register_global オプションのデフォルト値はデフォルトで Off です。 register_globals が On に設定されている場合、プログラムはフォームによって送信された変数を含むさまざまな環境変数をサーバーから受け取ることができます。また、PHP は変数の値を事前に初期化する必要がないため、大きなセキュリティ リスクにつながります。たとえば、HTML フォームのリクエスト変数です。 PHPは変数値を事前に初期化する必要がないため、安全でないコードを書きやすくなります。これは難しい選択でしたが、PHP コミュニティはこのオプションをデフォルトでオフにすることを決定しました。オンにすると、人々は変数を使用するときにその変数がどこから来たのか本当に分からなくなり、それを当然のこととして受け入れることしかできなくなります。しかし、 register_globals をオフにすると、コード内の変数とクライアントから送信された変数が混在するという悪い状況が変わります。


3 セーフ モード

セーフ モード (safe_mode) は、ドキュメントへのアクセスを制限し、環境変数へのアクセスを制限し、外部プログラムの実行を制御するために PHP によって使用されます。

ウェブサイトサーバーはシングルシステムユーザーモードで実行されるため、このシステムのユーザーアカウントは各ユーザーのドキュメントを読み取ることができる必要があります。これは、Web サイト サーバー上で実行されるコード ファイルが各ユーザーのファイルにアクセスできることを意味します。 PHP のセーフ モードは、プログラムの安全な動作を保証するために、マルチユーザー システムにいくつかの制限的なオプションを設定します。セーフ モードでは PHP ドキュメントのみを制限できますが、PHP によって実行される外部アプリケーションを制限することはできません。したがって、実行可能アプリケーションを安全なフォルダーに配置し、外部ユーザーによる実行を許可しないでください。 PHP のセーフ モードを開始し、php.ini ファイルのsafe_mode オプション (ディレクティブ) を On に設定します:

safe_mode = On


例 1:

test.php の内容は次のとおりです。

<?php    if($authorized){        echo "变量赋值";    }else{        echo "变量没有赋值";    }
ログイン後にコピー

php.ini で register_globals=Off の場合

アクセス URL: http://localhost/test.php?authorized=1

出力結果:

変数には値がありません割り当てられました。


php.ini で register_globals=On の場合

攻撃:

変数は初期化されておらず、URL を通じて変数に値を割り当てることができます

出力結果は

変数の代入


保護:

URLを介した変数割り当てへの攻撃を防ぐための変数の初期化。

コードを次のように変更する必要があります:

<?php    $authorized=false;    if($authorized){        echo "变量赋值";    }else{        echo "变量没有赋值";    }
ログイン後にコピー

ケース 2:

例: test.php の内容は次のとおりです:

<?phpif(isset($_SESSION['username'])){        echo "访问者:".$_SESSION['username'];}else{        echo "访问者尚未登陆";}
ログイン後にコピー

http://localhost/test.php にアクセスする場合、

出力: ユーザーがログインしていませんにアクセスします


攻撃:

URL の後に ?_SESSION[username]=admin

を追加します

つまり: http://localhost/test.php?_SESSION[username]= admin

出力: 訪問者: admin


保護:

session_start() はセッションを開き、セッション内の値を取得し、URL を介したセッション変数へのインジェクション攻撃を防ぎます。

コードは

に変更されます


<?phpsession_start();if(isset($_SESSION['username'])){        echo "访问者:".$_SESSION['username'];}else{        echo "访问者尚未登陆";}
ログイン後にコピー

ケース3:

php.iniでallow_url_fopen = Onの場合

demo.phpの内容は次のとおりです:

<?php@include "$path";if(!isset($path)){        echo "文件没有被调用";}
ログイン後にコピー

testの内容.phpは:


<?phpecho "this is test.php。文件被调用。";
ログイン後にコピー


URL にアクセスした場合:

http://localhost/demo.php

出力: ファイルは呼び出されませんでした。


攻撃:

リンクの後のSplice ?path=test.php

つまり: http://localhost/demo.php?path=test.phpにアクセスします

出力: これはtest.phpです。ファイルが呼び出されます。


保護:

パス変数の初期化については上記と同じ。

注:

ini_get_all 関数を呼び出して、PHP 設定値を表示できます。

例:

<?php         echo "<pre class="brush:php;toolbar:false">";        print_r(ini_get_all());        echo "
";
ログイン後にコピー

実行結果部分は次のとおりです:




<?phpini_set("allow_url_fopen",1);
ログイン後にコピー



を介してphpファイルの構成を変更できます。


ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート