組み込みチェックとカスタムチェックの両方の経験を探しています。
商用ソースコードアナライザーへの参照は必要ありません。
より完全なルールセットを作成するには、FindBugsプラグイン Find Security Bugs を使用します。 36個の新しい検出器が含まれています。もちろん、プラグインはいくつかの誤検知を生成しますが、特定の検出機能をいつでも無効にすることができます。
免責事項:私はツールの言及の著者です
checkstyleは、コードをコーディング標準と照合してチェックします。Sun/ Oracle標準を使用することも、独自の標準を使用することもできます。脆弱性自体は実際には検出されませんが、コードがコーディング標準に従っていない場合、脆弱性を見つけるのは難しくなります。
Findbugs は、SQLインジェクション、ハードコードされたデータベースパスワード、XSSコードの脆弱性、不正なCookieの作成などを検出します。これはカスタマイズ可能であるため、独自のルールを追加したり、他のルールを追加したりできます。
しかしながら。それは物語のほんの一部です。私の見解では、checkstyle、pmd、findbugsを使用する本当の利点は、オープンソースツール Sonar を使用して、調査結果を視覚的に報告できることです。これにより、コードの品質の概要が得られるため、リソースを積み上げて最悪の問題のコードを修正できます。各ライブラリを視覚的に拡大して、最悪の犯罪者の家に帰ることができます。これは特に、大規模なプロジェクトや、さまざまな開発チームに依存している場合に適しています。
なし、checkstyleはコードのフォーマットとコードの結合/結合ルールのチェッキング用です。つまりどのファイルも長くするべきではありません。どのメソッドも長くすることはできません。findbugsは、セキュリティに固有ではなく、一般的なソフトウェアエラーを探します。一般的なチェックは、未使用の変数、省略された条件などです。一般的なB/Oを除いて、ソフトウェアにセキュリティ上の脆弱性がないかチェックするのはかなり難しいです。また、静的アナライザーの機能は制限されています。
モバイルコードの脆弱性(つまり、信頼できるコードを信頼性の低いコードで安全に使用できるようにするために、通常はWeb経由で動的にダウンロードされる)に関して、FindBugsはいくつかの変更可能な静的脆弱性を見つけます。 "package.access"
セキュリティプロパティを理解していないため、一部の過剰報告が行われます。アクセス修飾子(またはpackage.access)によって隠された変更可能なstaticが間接的にアクセス可能である場合の検出はあまり適切ではないため、レポート内で大規模に行われますが、その領域はある程度改善されています。
SQLインジェクションなどを検出する試みがいくつかあると思います。 IMO、インジェクションの脆弱性がある場合、最初は非常に悪い場所にいます。
私の知る限り、Java静的アナライザーは、前述の変更可能な静的検出以外は非常に重要です。それとgrep
(grep -R Java.lang.reflect. .
など)。とは言っても、私の経験では、一般的なコードの品質が安全なソフトウェアの基盤であり、静的アナライザー(コンパイラーによって実行されるものを含む)は小さな役割を果たす可能性があります。