Javaチュートリアルをスキャンするコードへようこそ!このチュートリアルでは、GitHub Advanced Security:Code Scanningと、発見される結果を解釈する方法を設定する方法を説明します。次のリポジトリには、デモンストレーションの目的でSQLインジェクションの脆弱性が含まれています。
コードスキャンは、GitHubリポジトリのコードを分析するために使用して、セキュリティの脆弱性とコーディングエラーを見つける機能です。分析によって特定された問題はGitHubに示されています。
セマンティックコード分析エンジンであるCodeQLを使用して、コードスキャンを使用できます。 CodeQLはコードをデータとして扱い、従来の静的アナライザーよりも自信を持ってコードの潜在的な脆弱性を見つけることができます。
コード内の脆弱性を検索するために、コードスキャンを使用したCodeQL分析を使用したこのチュートリアル。
フォーク(public)から新しいリポジトリを作成するか、リポジトリをクローニングすることから始めます。

フォークリポジトリを作成する場合は、必ず確認してください
Securityタブをクリックします。

Set up code scanningクリックします。

CodeQL分析により、 Setup this workflowボタンをクリックします。

これにより、codeqlが既にセットアップされたGithubアクションワークフローファイルが作成されます。 Javaはコンパイルされた言語であるため、後のステップでビルドをセットアップする必要があります。 GitHubアクションを使用する代わりに、サードパーティCIシステムでCodeQL分析を構成する場合は、ドキュメントを参照してください。
アクションワークフローファイルには、以下を含むさまざまなセクションが含まれています。

Start Commit - > Commit this fileをクリックして、メインブランチへの変更をコミットします。
GitHubアクションワークフローをトリガーできるイベントが多数あります。この例では、ワークフローがトリガーされます

新しいCodeQLワークフローを設定し、上のステップでメインブランチにコミットすると、スキャンがトリガーされます。
Actionsタブをクリック - > CodeQL
特定のワークフローをクリックします。分析が完了するまで、ワークフローの進行状況を表示できます。

ワークフローが完了したら、 Securityタブ - > Code Scanning Alertsをクリックします。セキュリティアラート「ユーザー制御ソースから構築されたクエリ」が表示される必要があります。
セキュリティアラートをクリックすると、以下を含むセキュリティアラートに関する詳細が提供されます。

Show moreをクリックして、追加情報への例とリンクを含むアラートの完全な解剖を表示します。


CodeQL分析は、ソースからシンクまでのデータフローパスをトレースすることができ、アラート内のパストラバーサルを表示する機能を提供します。
show pathsをクリックして、このアラートをもたらしたデータフローパスを確認します。


この特定のアラートを修正するには、SQLクエリで使用されるパラメーターが検証および消毒されるようにする必要があります。
Codeタブをクリックして、 ControllersフォルダーのファイルIndexController.javaを編集し、コンテンツをファイルfixmeに置き換えます。

Create a new branch for this commit and start a pull request 、Branch fix-sql-injectionに名前を付けて、プルリクエストを作成します。
プルリクエストでは、CodeQL分析がステータスチェックとして開始されたことに気付くでしょう。完了するまで待ちます。

ワークフローが完了した後Code Scanning Results / CodeQLステータスチェックにより、 Detailsをクリックしてください。

コードスキャンにより、このプルリクエストが以前に検出されたSQLインジェクションの脆弱性を修正することに注意してください。

プルリクエストをマージします。プルリクエストがマージされた後、別のワークフローが始まり、脆弱性のリポジトリをスキャンします。
最終的なワークフローが完了したら、[ Securityタブに戻り、 Closedクリックします。ユーザー制御されたソースのセキュリティアラートから構築されたクエリが、閉じた問題として表示されることに注意してください。

セキュリティアラートをクリックして、修正が行われたとき、誰が、特定のコミットを詳述していることに注意してください。これにより、セキュリティアラートがいつどのように修正されたか、および問題を修正するために何が変更されたかを詳細に詳細に完全に提供します。

CodeQL分析をセットアップし、セキュリティアラートを修正したので、アラートをプルリクエストに導入してみてください。
mainブランチとしてベースブランチを使用して新しいプルリクエストを作成し、 new-featureブランチとしてCompare Branchを作成します。

ベースブランチが、元のリポジトリのmainブランチに対して、独自のリポジトリmainブランチに設定されていることを確認してください。
プル要求が作成されると、CodeQL分析がステータスチェックとして開始されたことに気付くでしょう。完了するまで待ちます。
ワークフローが完了した後、 Code Scanning Results / CodeQLステータスチェックが失敗します。コードスキャンにより、このプルリクエストが新しいセキュリティアラートを導入することを検出したことに注意してください。

プルリクエストでは、GitHubコードスキャンボットがセキュリティアラートの詳細を使用してプルリクエストのレビューを残したことに気付くでしょう。これにより、開発者はプルリクエストで導入されたセキュリティの問題を迅速に特定できます。

これにより、開発者とセキュリティチームのコラボレーションがセキュリティアラートとそれを修正する方法について議論することもできます。

新しいCode Scanning AlertでShow more detailsて、 Securityタブにジャンプし、セキュリティアラートの詳細を表示します。

mainブランチ(生産)ではなく、セキュリティアラートがIn pull request見つかったことに注意してください。
GitHub Enterpriseの高度なセキュリティ機能について話す準備はできましたか?詳細については、販売にお問い合わせください!
GitHubに埋め込まれたセキュリティ機能については、GitHubのセキュリティ機能ページをご覧ください。
追加の構成オプションと技術的な詳細については、コードスキャンドキュメントをご覧ください。