web-dev-qa-db-ja.com

手動レビューのための危険な呼び出しのphpファイルを介した検索のスクリプト

大きなサイトのすべてのphpファイルを検索して危険なコマンドを探すスクリプトを自動化しています。見つかったファイルは手動でコードレビューされます。

私のスクリプトに対する推奨事項はありますか?検索するのを忘れたものはありますか?このスクリプトは10分でまとめられたことに注意してください。(複数のegrep引数のように)より簡単に、より良くするために実行できる多くの改善があると確信しています。

find . | grep "php$" | xargs grep -s "eval(" >> /tmp/review.txt
find . | grep "php$" | xargs grep -s "fopen(" >> /tmp/review.txt 
find . | grep "php$" | xargs grep -s "passthru(" >> /tmp/review.txt 
find . | grep "php$" | xargs grep -s "exec(" >> /tmp/review.txt 
find . | grep "php$" | xargs grep -s "proc_" >> /tmp/review.txt 
find . | grep "php$" | xargs grep -s "dl(" >> /tmp/review.txt 
find . | grep "php$" | xargs grep -s "require($" >> /tmp/review.txt
find . | grep "php$" | xargs grep -s "require_once($" >> /tmp/review.txt
find . | grep "php$" | xargs grep -s "include($" >> /tmp/review.txt 
find . | grep "php$" | xargs grep -s "include_once($" >> /tmp/review.txt 
find . | grep "php$" | xargs grep -s "include($" >> /tmp/review.txt 
find . | grep "php$" | xargs grep -s "query(" >> /tmp/review.txt 
8
Chris Dale

確かにこのリストは十分ではありません。まず第一に、それは完全ではありません。第二に、さまざまな難読化手法を使用して、Webシェルやその他の悪意のあるスクリプトを隠すことができます。

そのような目的のために、私は危険な場所を探すための独自のPHPスクリプトを作成しました http://0x416d73.name/proj/fcc.html 。 PHPで記述されているため、「検索」コマンドほど高速であるとは期待しないでください。ただし、ファイルのハッシュをチェックしたり、どのファイルが表示されたか、見つからないか、変更されているかを確認したりできます。本番サーバーで実行する前に、まず小さなスクリプトに対してテストして、動作を確認することをお勧めします。また、特にPHPコードで脆弱性を検索するために、少し前に簡単なbashスクリプト http://privatepaste.com/88a5d5eaa をまとめました。完全ではありません、bash達人のチューニングと批評が必要かもしれません:)

独自のスクリプトを続行する場合は、必要なものを抽出できる素敵なリストを以下に示します: http://privatepaste.com/dc335ccb86

更新:理解したように、トピックはコードレビューに関するものです。上記の解決策はまだ理にかなっていますが、私はこの1つのプロジェクト http://sourceforge.net/projects/rips-scanner/ について言及したいと思います。私の考えでは、現在、これはPHP Webアプリケーション用の無料で入手できる最高のソースコードアナライザーです。

8
anonymous

PHPで静的分析ツールを使用した直接的な経験はありませんが、オープンソースと商用の両方で使用できるツールがいくつかあるようです。

簡単に言うと、PHPLintはかなり高速で使いやすいはずです。私の解釈では、これはCのlint/splintとかなり似た動作をすることが示されています。

オープンソース

商業の

5
Scott Pack

私はPHP whizではないので、探すために追加する必要のあるものは多くありませんが、ランダムな空白の種類によって検出結果が台無しになることに注意してください。
例えば。

fopen  ( 

見つかりません...

3
AviD

extract も危険な言語構成要素だと思います。 (eval()よりも使用されることはめったにありませんが、多くの人はそれを理解していません。)

また、Php Code Snifferを使用して、これらを独自の「スニフ」として作成することもできます。 これは1つです 自分が取り組んでいるオープンソースプロジェクト用に書きました。

2
Mark E. Haase