ホームページ  >  記事  >  バックエンド開発  >  PHP プログラムに存在するセキュリティの詳細_PHP チュートリアル

PHP プログラムに存在するセキュリティの詳細_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 17:08:59803ブラウズ

海外のさまざまなバグトラックによくアクセスすると、その半分以上が SQL インジェクション、XSS、パス開示、リモート コマンド実行などのスクリプトに関連していることがわかります。それらを読んだ後、彼らの目的はブロイラーを捕まえることだけですか? Webセキュリティをやりたい人は、Webセキュリティを使って学ぶのが一番良いのですが、根本を考えると、私たちが求めているのは魚ではなく釣りです。中国では、さまざまな PHP プログラムのバージョン 1.0 とバージョン 2.0 が雨後の筍のように現れていますが、誰もがいくつかの有名な cms、フォーラム、ブログ プログラムに注目しており、それらの未知のプログラムに注目している人はほとんどいません。ますます多くの PHP プログラマーや Web マスターにとって、サーバーの要塞設定に依存することに加えて、PHP プログラム自体のセキュリティを理解する必要があります。

PHP のセキュリティはインジェクションとクロスサイトに過ぎないと言う人もいますが、それは完全に間違っています。もしこれが事実であれば、magic_quotes_gpc またはサーバーの一部のセキュリティ設定により、私たちは生き残ることができなくなります。今日はインジェクションやクロスサイトについて話したいのですが、php プログラムのセキュリティの詳細について話します。それでは本題に入りましょう。

一部の機能のフィルタリングに注意してください

include()、require()、fopen()、fwrite()、readfile()、unlink()、eval() およびそのバリアント関数など、いくつかの関数はプログラムで頻繁に使用されます。これらの機能は非常に実用的であるため、より注意を払う必要があります。 :)

1.include()、require()、fopen()、include_once()、require_once() はすべてリモートでファイルを呼び出すことができます。その害については、Google で検索するとよくわかります。含まれている変数については保証がありません。フィルタリングが完了すると、任意のファイルを呼び出しに含めることができます。たとえば、print.php を見てください

...

if (empty ($bn) ) { //変数 $bn が空かどうかを確認します

include ("$cfg_dir/site_${site}.php"); //site_${site}.php をパス $cfg_dir に含めます

...

$cfg_dir ディレクトリが存在するかどうかに関係なく、$site 変数をまったくチェックしないため、$site 変数を自然に使用できます。変数 $site を指定してリモート ファイルを呼び出すことも、ローカル ファイルを指定することもできます。すると、次のように、PHP ステートメントを含むファイルがインクルードされて実行されます。

ファイルディレクトリをリストする

これは、phpwind や bo-blog の以前の脆弱性と同様に、いくつかの管理者ファイルを含めて権限を昇格するように拡張することもできます。 php.ini のallow_url_fopen を off に設定してファイルのリモート使用を禁止し、open_base_dir を使用してディレクトリ外のファイルの使用を禁止することに加えて、どのファイルのみを含めることができるかを事前に宣言する必要もあります。ここでは詳細に立ち入りません。

2.fopen()、file()、readfile()、openfile() なども特に注意を払う必要がある領域です。関数自体はファイルを開くだけですが、変数のフィルタリングが徹底されていないとソースコードが漏洩してしまいます。このような機能テキスト フォーラムは数多くあります。

...

$articlearray=openfile("$dbpath/$fid/$tid.php"); // パス $dbpath/$fid にある $tid.php ファイルを開きます

$topic_detail=explode("|",$articlearray[0]); //区切り文字を使用して投稿の内容を読み取ります

...

これは ofstar の read.php の以前のバージョンです。 $fid と $tid を送信ファイルとして指定すると、元のコードが漏洩します。このような。

http://explame.com/ofstar/read.php?fid=123&tid=../index

$tidにはphpが付くので、indexを直接書きます。これはほんの一例ですので、見てみましょう。

3.fwrite() とそのバリアント関数にはこの種の脆弱性があります。考えてみれば、ユーザーが送信した文字がフィルタリングされていなければ、PHP バックドアを作成することは不可能ではありません。

4.unlink() 関数。少し前まで、この関数は phpwind でファイルを任意に削除するために使用されていました。もちろん、変数は任意のファイルとして指定できます。あらゆるファイルを削除できます。

5.eval()、preg_replace() 関数は、文字列が何らかの方法でフィルタリングされていない場合に何が起こるでしょうか。一言で言えば、これが使われているのをよく目にします。 eval() 原則に基づいて作成された PHP トロイの木馬ではないでしょうか?

6. system() などのシステム関数については、php.ini でシステム関数を無効にすることも良い考えですが、一部のプログラムで必要な場合は使用する必要はありません。 ?前回見た美しいphpの写真アルバムのように。さらに、popen()、proc_open()、および proc_close() 関数には特別な注意を払う必要がありますが、コマンドの実行後に直接出力はありませんが、これはハッカーにとって有益だと思いますか?ここで、PHP は 2 つの関数、escapeshellarg() とscapeshellcmd() を提供します。これらの 2 つの関数は、システム関数呼び出し攻撃 (フィルタリング) に対抗するために使用されます。

害については、例として、某フォーラムのprod.phpを見てみましょう。

07 $doubleApp = isset($argv[1]) //変数$doubleAppを初期化します

...

14 if( $doubleApp ) //if ステートメント

15{

16 $appDir = $argv[1] //$appDirを初期化します

;

17 system("mkdir $prodDir/$appDir"); // システム関数 system を使用して、ディレクトリ $prodDir/$appDir を作成します

元々は $prodDir/$appDir ディレクトリを作成するために使用されていましたが、プログラムは $argv[1] が存在するかどうかのみを検出し、$argv[1] の必要なフィルタリングが欠けているようです。

/prod.php?argv[1]=|ls -la または /prod.php?argv[1]=|cat /etc/passwd

(ここでの区切り文字 | は、複数のコマンドを実行できる UNIX パイプ パラメーターです。)

この時点で、一般的な種類の脆弱性について少し知っておく必要があります。

個性的なキャラクターに注目

特殊な文字については、「すべての文字は無効です」という格言があります。この文は海外の記事でよく使われます。すべての入力は有害です。これらの危険に対処するために、プログラマは何かを見逃すことを恐れて、大量の文字をフィルタリングすることに忙しいのです。一部のプログラマーはどうでしょうか?これらの問題はまったく注目されていないようで、常に抜け穴への扉が開かれたままになっています。さっそく、次のことを見てみましょう。

1. 実際、プログラムの最も重要な抜け穴、つまり開発者を最も心配させるのは、$ 記号の付いた変数です。抜け穴を探している人にとって、変数という言葉を理解することがすべてです。ディレクトリ トラバーサルのバグと同様に、このバグは多くの電子メール プログラムに存在します。開発者はこれを非常に慎重に検討し、

と同様にネットワーク ハード ドライブを追加したものもあります。

http://mail.com/file.php?id=1&put=list&tid=1&file=./

ファイル変数を ./../ またはそれ以上に変更したらどうなるでしょうか?このようにしてディレクトリが横断されます。

2. 一部の検索バー、記事、メッセージなどにある山括弧「<>」(以前の phpwind 添付ファイルのクロスサイトなど)もちろん、クロスサイトの問題の場合は、山かっこ以外のものもフィルタリングする必要があります。フィルタリングするときに何かを見逃すことは心配ありませんが、フィルタリングを忘れることが心配です。

3. 傾斜バーと傾斜防止バー: / およびフィルタリングについては、Magic Forum の添付ファイルのダウンロードで漏洩した元のコードを覚えていますか?

attachment.php?id=684&u=3096&extension=gif&attach=....includesconfig.php&filename=1.gif

たとえば ../ のフィルタリングの問題に関しては、Windows ホストは ../ をフィルタリングするだけでなく .. もフィルタリングする必要があり、Windows ホストのペアは / として解析されます。SQL インジェクションと比較すると、これらの詳細、何が含まれているかを説明します。 -深さ?

4. バックティック (``) については、PHP では system() などのシステム関数と同様に、バックティックは非常に強力です。ユーザーの悪意のあるステートメントが実行されると、サーバーに損害を与えます。サーバーを適切に設定することに加えて、正直にフィルタリングする必要があると考えてください。

5. 改行文字、NULL 文字などの場合、「 ,x0B, , ,

http://www.bkjia.com/PHPjc/629780.html

tru​​ehttp://www.bkjia.com/PHPjc/629780.html技術記事スクリプトセキュリティの話題は尽きないようです。よく海外のさまざまなバグトラックにアクセスすると、その半分以上が SQL インジェクション、XS などのスクリプトに関連していることがわかります...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。