独自の PHP 半自動コード監査ツールを構築する
0x00 コード分析 (動的分析) 用の PHP 拡張機能
1. 基本環境
#!bashapt-get install php5apt-get install php5-devapt-get install apacheapt-get install mysql
2. PHPTracert を使用する
#!bashmkdir godheadwget https://github.com/Qihoo360/phptrace/archive/v0.3.0.zipunzip v0.3.0.zipcd ./phptrace-0.3.0/extensionphpize5./configure --with-php-config=/usr/bin/php-configmake & make installcd ../cmdtoolmake
php.ini を編集し、以下を追加します:
#!bashextension=trace.so
3. テスト
#!php<?php for($i=0;$i<100;$i++){ echo $I; sleep(1);}?>
CLI
りーapache
#!shellphp test.php &ps -axu|grep php./phptrace -p pid
Four.phptrace解析
実行されたコードは次のとおりです:
#!bashcurl 127.0.0.1/test.phpps -aux|grep apache./phptrace -p pid
実行順序は次のとおりです:
#!php<?phpfunction c(){ echo 1;}function b(){ c();}function a(){ b();}a();?>
パラメータの意味:
Name | Value | 意味 |
---|---|---|
シーケンス | int| 実行された関数の数 | |
type | 1/2 | 1 は呼び出し元の関数を表し、2 は関数の戻り値を表します |
level | -10 | 実行の深さ (例: 関数 a) bを呼び出すと、aのレベルは1、bのレベルは2となり、順番に増加します |
func | eval | 呼び出される関数の名前 |
st | 1448387651119460 | タイムスタンプ |
params | string | 関数のパラメータ |
file | c.php | lineno |
行番号この関数に対応する | ログ出力: |
1. 監視プロセスを解析します
バックグラウンドプロセスを開き、トレーサーのないプロセスがある場合は、すぐにホストします
2.json 抽出
を抽出します。各ファイルの json の抽出プロセスは次のとおりです:
すべてのファイルに便利
ファイルを読み取る
- json を抽出し、seq で並べ替える
- type=2 と type=1 を抽出してマージする
- 同じものを保存する上司部下関係のレベルに応じて辞書を作成
- seqでソートし、ヘッダ関数を取り出して出力
- 悪意のある関数を抽出し、level=0までレベルを抽出
- 対応する関数は以下の通りです:
-
#!basha>b>c>echo
ログイン後にコピー 3. データレビュー
人間によるレビューの前に、危険な関数を追跡し、関数が実行される前に出力の関係を整理します。
デモを入れます
6. XDEBUGを使用します
インストール
#!js{"seq":0, "type":1, "level":1, "func":"{main}", "st":1448387651119445, "params":"", "file":"/var/www/html/2.php", "lineno":11 }{"seq":1, "type":1, "level":2, "func":"a", "st":1448387651119451, "params":"", "file":"/var/www/html/2.php", "lineno":11 }{"seq":2, "type":1, "level":3, "func":"b", "st":1448387651119452, "params":"", "file":"/var/www/html/2.php", "lineno":9 }{"seq":3, "type":1, "level":4, "func":"c", "st":1448387651119453, "params":"", "file":"/var/www/html/2.php", "lineno":6 }{"seq":4, "type":2, "level":4, "func":"c, "st":1448387651119457, "return":"NULL", "wt":4, "ct":4, "mem":48, "pmem":144 }{"seq":5, "type":2, "level":3, "func":"b, "st":1448387651119459, "return":"NULL", "wt":7, "ct":6, "mem":48, "pmem":144 }{"seq":6, "type":2, "level":2, "func":"a, "st":1448387651119459, "return":"NULL", "wt":8, "ct":8, "mem":80, "pmem":176 }{"seq":7, "type":2, "level":1, "func":"{main}, "st":1448387651119460, "return":"1", "wt":15, "ct":14, "mem":112, "pmem":208 }
php.iniを変更します
#!pythonlist1={ level1:[seq,type,func,param,return] level2:[seq,type,func,param,return] level3:[seq,type,func,param,return] #eval level4:[seq,type,func,param,return]}list2=
いくつかのデモ画像を入れます:
7.メリットとデメリット
デメリット
人の関与 それは強力すぎるため、手動操作なしに単独で実行することはできません。
利点
精度が高く、オブジェクト指向コードとプロセス指向コードの両方を分析できます。
0x01 構文解析 (静的解析)
ケース:
http://php-grinder.com/
http://rips-scanner.sourceforge.net/
- 1 php-parser を使用します。
- はじめに:
http://www.oschina.net/p/php-parser
https://github.com/nikic/PHP-Parser/
- 2. インストール
- PHP >= 5.3; PHPからPHP5.6 PHP&GT;
#!bashapt-get install php5-xdebug
#!bash[xdebug]zend_extension = "/usr/lib/php5/20131226/xdebug.so"xdebug.auto_trace = onxdebug.auto_profile = onxdebug.collect_params = onxdebug.collect_return = onxdebug.profiler_enable = onxdebug.trace_output_dir = "/tmp/ad/xdebug_log"xdebug.profiler_output_dir = "/tmp/ad/xdebug_log"
その後、結合した後、元のステートメントが以下であることがわかります:
#!shellgit clone https://github.com/nikic/PHP-Parser.git & cd PHP-Parsercurl -sS https://getcomposer.org/installer | php
4. 論理分析
コード分析
ライブラリによる構文分析
結果を抽出する
危険な関数を抽出する
危険な関数に存在する変数を抽出
上記からこの変数の代入方法を抽出
制御可能な結果を解析
- 結果を出力
- 5. メリットとデメリット
- デメリット
- オブジェクト指向プログラム比較的弱いです。
- 利点
- 大量の自動分析に適しており、手動操作なしで単独で実行できます

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









Laravelは、直感的なフラッシュメソッドを使用して、一時的なセッションデータの処理を簡素化します。これは、アプリケーション内に簡単なメッセージ、アラート、または通知を表示するのに最適です。 データは、デフォルトで次の要求のためにのみ持続します。 $リクエスト -

PHPクライアントURL(CURL)拡張機能は、開発者にとって強力なツールであり、リモートサーバーやREST APIとのシームレスな対話を可能にします。尊敬されるマルチプロトコルファイル転送ライブラリであるLibcurlを活用することにより、PHP Curlは効率的なexecuを促進します

Laravelは簡潔なHTTP応答シミュレーション構文を提供し、HTTP相互作用テストを簡素化します。このアプローチは、テストシミュレーションをより直感的にしながら、コード冗長性を大幅に削減します。 基本的な実装は、さまざまな応答タイプのショートカットを提供します。 Illuminate \ support \ facades \ httpを使用します。 http :: fake([[ 'google.com' => 'hello world'、 'github.com' => ['foo' => 'bar']、 'forge.laravel.com' =>

顧客の最も差し迫った問題にリアルタイムでインスタントソリューションを提供したいですか? ライブチャットを使用すると、顧客とのリアルタイムな会話を行い、すぐに問題を解決できます。それはあなたがあなたのカスタムにより速いサービスを提供することを可能にします

記事では、PHP 5.3で導入されたPHPの後期静的結合(LSB)について説明し、より柔軟な継承を求める静的メソッドコールのランタイム解像度を可能にします。 LSBの実用的なアプリケーションと潜在的なパフォーマ

この記事では、フレームワークにカスタム機能を追加し、アーキテクチャの理解、拡張ポイントの識別、統合とデバッグのベストプラクティスに焦点を当てています。

記事では、入力検証、認証、定期的な更新など、脆弱性から保護するためのフレームワークの重要なセキュリティ機能について説明します。
