HTTP攻撃と防犯--PHP安全配置
3374 ワード
1セキュリティとは、WebアプリケーションとWebページがハッカーから攻撃されないように保護することです.一部のハッカーは純粋に面白いために他人のパソコンに侵入したが、より多くのハッカーは他人のパソコンの機密文書を盗むことに苦労し、パソコン全体を麻痺させて彼の目的を達成しようとした.ネット上にはハッカーが使用できるソフトウェアがたくさんあります.これらのソフトウェアの多くは無料で使いやすいので、一般の人があなたのパソコンを攻撃するのは、非常に難しいことではありません.重要なのは、コンピュータをどのように保護しているかです.ウイルスチェックソフトやファイアウォールをインストールして無事だと思っているだけでは、セキュリティの本当の意味が全く分からないと言えます.
2 register globalはPHP 4.2.0からphp.iniのregister_Globalオプションのデフォルト値はOffに設定されています.register_globalsがOnに設定されている場合、プログラムは、フォームがコミットした変数を含むサーバからの様々な環境変数を受信できます.また、PHPが変数の値を事前に初期化する必要がないため、HTMLフォームの要求変数などのセキュリティ上の危険性があります.PHPは変数の値を事前に初期化する必要がないため、安全でないコードを書きやすくなります.これは難しい選択ですが、PHPコミュニティはデフォルトでこのオプションを閉じることにしました.開くと、変数がどこから来たのか分からないので、当然だと思います.でもレジスターglobalsのクローズは,このコード内部変数とクライアントが送信する変数が混在する悪い状況を変化させた.
3 セーフモードセーフモード( safe_mode)は、PHPが文書のアクセスを制限し、環境変数のアクセスを制限し、外部プログラムの実行を制御するために使用される.ウェブサイトサーバは単一のシステムユーザのモードで動作しているため,このシステムのユーザアカウントは各ユーザのドキュメントを読み取ることができる必要がある.これは、ウェブサイトサーバ上で実行される任意のコードドキュメントが、各ユーザのドキュメントにアクセスできることを示す.PHPのセキュリティモードはマルチユーザのシステムにいくつかの制限オプションを設定してプログラムの安全運行を保障する.セキュリティモードではPHPのドキュメントのみが制限されますが、PHPが実行する外部アプリケーションは制限されません.したがって、実行可能なアプリケーションを安全なフォルダに配置し、外部ユーザーに実行させないでください. PHPのセキュリティモードを起動し、php.iniファイルのsafe_をmodeオプション(directive)をOn:safe_に設定mode = On
事例1:test.php内容は以下の通り:
php.iniのregister_globals=On時攻撃:変数は初期化されずurlで変数に値を付与して結果を 変数付与保護:変数を初期化し、urlによる変数付与攻撃を阻止します.コードを次のように変更する必要があります.
事例2:
たとえばtest.phpの内容は次のとおりです.
アクセスhttp://localhost/test.phpの場合、
出力:アクセス者がログインしていません
攻撃:
サイトの后ろに追加しますか?SESSION[username]=admin
次のようになります.http://localhost/test.php?_SESSION[username]=admin
出力:アクセス者:admin
保護:
session_start()はセッションを開き、セッション内の値を取得し、urlによるセッション変数への注入攻撃を阻止します.
コードの変更
事例3:
php.iniのallow_url_fopen=Onの場合
demo.phpの内容は次のとおりです.
test.phpの内容は:
Webサイトにアクセスするとき:
http://localhost/demo.php時
出力:ファイルが呼び出されませんでした.
攻撃:
リンクの後ろにつなぎますか?path=test.php
アクセスhttp://localhost/demo.php?path=test.php
出力:this is test.php.ファイルが呼び出されます.
保護:
同様にpath変数を初期化します.
注意:
ini_を呼び出すことができますget_all関数でPHPの設定値を表示します.
例:
実行結果セクションは次のとおりです.
に合格
phpファイルでの構成の変更
2 register globalはPHP 4.2.0からphp.iniのregister_Globalオプションのデフォルト値はOffに設定されています.register_globalsがOnに設定されている場合、プログラムは、フォームがコミットした変数を含むサーバからの様々な環境変数を受信できます.また、PHPが変数の値を事前に初期化する必要がないため、HTMLフォームの要求変数などのセキュリティ上の危険性があります.PHPは変数の値を事前に初期化する必要がないため、安全でないコードを書きやすくなります.これは難しい選択ですが、PHPコミュニティはデフォルトでこのオプションを閉じることにしました.開くと、変数がどこから来たのか分からないので、当然だと思います.でもレジスターglobalsのクローズは,このコード内部変数とクライアントが送信する変数が混在する悪い状況を変化させた.
3 セーフモードセーフモード( safe_mode)は、PHPが文書のアクセスを制限し、環境変数のアクセスを制限し、外部プログラムの実行を制御するために使用される.ウェブサイトサーバは単一のシステムユーザのモードで動作しているため,このシステムのユーザアカウントは各ユーザのドキュメントを読み取ることができる必要がある.これは、ウェブサイトサーバ上で実行される任意のコードドキュメントが、各ユーザのドキュメントにアクセスできることを示す.PHPのセキュリティモードはマルチユーザのシステムにいくつかの制限オプションを設定してプログラムの安全運行を保障する.セキュリティモードではPHPのドキュメントのみが制限されますが、PHPが実行する外部アプリケーションは制限されません.したがって、実行可能なアプリケーションを安全なフォルダに配置し、外部ユーザーに実行させないでください. PHPのセキュリティモードを起動し、php.iniファイルのsafe_をmodeオプション(directive)をOn:safe_に設定mode = On
事例1:test.php内容は以下の通り:
<?php
if($authorized){
echo " ";
}else{
echo " ";
}
php.iniのregister_globals=OffでのWebサイトへのアクセス:http://localhost/test.php?authorized=1 出力結果: 変数には値が割り当てられていません.php.iniのregister_globals=On時攻撃:変数は初期化されずurlで変数に値を付与して結果を 変数付与保護:変数を初期化し、urlによる変数付与攻撃を阻止します.コードを次のように変更する必要があります.
<?php
$authorized=false;
if($authorized){
echo " ";
}else{
echo " ";
}
事例2:
たとえばtest.phpの内容は次のとおりです.
<?php
if(isset($_SESSION['username'])){
echo " :".$_SESSION['username'];
}else{
echo " ";
}
アクセスhttp://localhost/test.phpの場合、
出力:アクセス者がログインしていません
攻撃:
サイトの后ろに追加しますか?SESSION[username]=admin
次のようになります.http://localhost/test.php?_SESSION[username]=admin
出力:アクセス者:admin
保護:
session_start()はセッションを開き、セッション内の値を取得し、urlによるセッション変数への注入攻撃を阻止します.
コードの変更
<?php
session_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の内容は:
<?php
echo "this is test.php。 。";
Webサイトにアクセスするとき:
http://localhost/demo.php時
出力:ファイルが呼び出されませんでした.
攻撃:
リンクの後ろにつなぎますか?path=test.php
アクセスhttp://localhost/demo.php?path=test.php
出力:this is test.php.ファイルが呼び出されます.
保護:
同様にpath変数を初期化します.
注意:
ini_を呼び出すことができますget_all関数でPHPの設定値を表示します.
例:
<?php
echo "<pre>";
print_r(ini_get_all());
echo "</pre>";
実行結果セクションは次のとおりです.
に合格
<?php
ini_set("allow_url_fopen",1);
phpファイルでの構成の変更