GitHub で安全を確保する方法
出典:
DZone GitHub は当然のことながら、最も人気のあるチーム開発プラットフォームと考えられています。昨年秋のデータによると、4,000 万人以上のプログラマーがこのサービスを利用していました。そして、そのほとんどがオープンソースを使用してソフトウェアを作成しているため、Github で作業するときのセキュリティは最優先事項である必要があります。コードを再利用すると、脆弱性が広がるリスクが高まります。これは、すべての GitHub ユーザーが安全な開発環境の構築に最大限の注意を払う必要があることを意味します。
GitHub コードを安全に保つために従う必要がある 8 つのルールがあります。
アクセス制御を提供する
アクセス制御は、GitHub だけでなく、コード保護が必要な他の環境でもセキュリティを向上させる最良の方法の 1 つです。GitHub は、作業のリスクを軽減するいくつかの方法を提供します。まず、最小限の権限を付与することを習慣にしてください。つまり、リポジトリ ユーザーには、業務を実行するために必要な権限のみを付与します。他にも従うべきアクセス制御方法があります。
- ユーザーが組織に関する情報を公開リポジトリに公開できないように、リポジトリの作成を制限します。
- ブランチ保護と状態チェックを有効にして、ユーザーがコミットをマージしたりブランチを安全に管理したりできるようにします。
- プライベート リポジトリのフォークを許可または無効にして、ユーザーがコードを他の人に開示または共有しないようにします。
- コミュニティのメンバーまたは会社の従業員ではなくなったすべての非アクティブなユーザーのアクセスを取り消します。
- GitHub 上のプロジェクトへのアクセス権を定期的に確認してください。
- ユーザーが GitHub アカウントのアクセス権やパスワードを他のユーザーと共有しないようにしてください。
- 各リポジトリ ユーザーが自分のアカウントで 2 要素認証を使用していることを確認します。
- 個人のアクセス トークンと SSH キーを定期的に変更します。
アクセス データを GitHub ファイルに保存しないでください
コード、設定ファイル、コミット メッセージを通じて GitHub リポジトリへのアクセス情報が漏洩すると、攻撃に利用される可能性があります。機密データがリポジトリに追加されないようにするには、
git-secretsや
vaultなどのアクセス制御ツールを使用します。これらのツールはコード ベースをスキャンし、コードまたは構成ファイルで機密情報が見つかるたびにアクセスを変更します。GitHub リポジトリで機密情報を見つけた場合は、すぐに削除する必要があります。ただし、GitHub はリポジトリ内のすべてのコミットの履歴を保持するため、データを削除するだけでは十分ではありません。GitHub リポジトリ履歴から
ファイルを削除する必要があります。セキュリティを向上させるための重要なステップは、以前に公開されていたすべてのパスワードとトークンを置き換えることです。
脆弱な依存関係のアラートを有効にする
GitHub ユーザーが取り組むプロジェクトが増えるにつれて、増加する依存オブジェクトを制御することがますます困難になります。幸いなことに、GitHub はリポジトリ内で見つかった
脆弱な依存関係に対して自動アラートを提供します。これらのアラートは、 National Vulnerability Database (NVD)、
GitHub Security Advisories、および 200 以上のプログラミング言語をサポートする WhiteSource 脆弱性データベースに基づいています。GitHub アラートにより、オープンソース ライブラリをより簡単かつ安全に使用できるようになります。
GitHubから追加したアプリを確認する
GitHub Marketplace には、サードパーティの開発者や企業によって作成された何百ものアプリケーションが含まれています。したがって、リポジトリに追加する各アプリケーションを注意深く確認することが重要です。GitHub Marketplace からアプリケーションをインストールする場合は、次のガイドラインに従ってください。
- 最小特権の原則を強制します。アプリケーションに必要以上のアクセス権を与えないでください。
- アプリケーションによって要求されるアクセス権または許可については、常に疑問を持ってください。このレベルのアクセスによって引き起こされる可能性のある損害について考えてください。
- GitHub リポジトリへのアクセスを許可する前に、会社またはアプリ開発者が実際に存在することを確認してください。
- アプリケーションの機能とセキュリティを確認します。脆弱性が含まれている場合は、ハッキングの被害者になる可能性があります。
アプリケーションのセキュリティは、アプリケーションの最も弱い部分によって判断されます。これは GitHub リポジトリにも当てはまります。したがって、アプリにストレージへのアクセスを許可する前に、そのアプリが信頼できること、また、アプリが要求するアクセス レベルと一致していることを確認してください。
GitHub からインポートされたすべてのコードを確認する
開発者は他の人のコードを使用することがよくあります。他の人のコードの一部を自分のプロジェクトにコピーするたびに、そのコードを完全にレビューしてください。これは、特に小規模なプロジェクトの場合、時間の無駄のように思えるかもしれませんが、このルールを無視すると、リポジトリに脆弱性が導入される可能性があります。インポートされたコードに関連するもう 1 つのリスクは、アクセス データなどの機密情報が含まれる可能性があることです。これらが GitHub ファイルに保存されている場合、別のセキュリティ リスクが生じます。コードをコピーする前にコードを監査すると、そのような抜け穴を特定するのに役立ちます。他人のコードがプライベート リポジトリにあるからといって安全であるとは考えないでください。コードベースに損害を与える可能性が非常に高くなります。
リポジトリの自動静的ソース コード分析を使用する
リポジトリの脆弱性を分析するために使用できるサードパーティ ツールがいくつかあります。そのうちの 1 つは、GitHub Marketplace の無料ツールである
WhiteSource Boltです。WhiteSource Bolt は、公開されているすべてのコードの脆弱性についてリポジトリをスキャンします。また、脆弱性に関する詳細情報を提供し、修復オプションを提案します。
ニーズに合った GitHub プランを使用する
多くの企業は、開発者が GitHub などのプラットフォームにコードを投稿することを禁止するポリシーを持っています。これらの制限は、政府部門や金融機関で特に一般的です。厳しく規制された環境で作業する場合は、ローカル サーバー上でリポジトリをホストできるエンタープライズ プランである
GitHub Enterpriseを使用してください。これにより、会社の開発者は無許可の GitHub ユーザーを心配することなくすべてのプロジェクトにアクセスできるため、より高いレベルのセキュリティが提供されます。
プロジェクトでは包括的なセキュリティ ポリシーに従ってください
安全は集団的な責任です。チームで作業する場合、すべての関係者が従わなければならない安全ルールを確立することが重要です。理想的には、計画段階でサイバーセキュリティ チームと開発チームを連携させ、連携して作業できるようにする必要があります。これにより、開発プロセス中の保護を確保することが容易になります。チーム メンバーの 1 人がパスワードやその他の機密情報の保存に不注意な場合、リポジトリ全体が危険にさらされる可能性があります。これを避けるために、同僚全員が従わなければならない安全手順を明確に文書化してください。
結論
GitHub 上のコードを保護するのは簡単です。GitHub の組み込みセキュリティ機能を利用して、適切なアクセス制御を確保する必要があるだけです。最大限の保護に関心がある場合は、開発のすべての段階でコードのセキュリティを強化する追加ツールを統合してください。また、ドキュメントの「GitHub Security
for Business」および
「Free Users」セクションを参照することをお勧めします。これにより、コードのセキュリティと保護に関する追加情報を取得できます。
Java コードを迅速にデバッグするための役立つヒント
出典:
Hackernoon 効率的なコードを書くこととは別に、デバッグが上手になることは、Java 開発者としての作業を楽にするためにできる最も役立つことの 1 つです。これは、ソフトウェアの世界が分散アーキテクチャと非同期コードに積極的に移行している現代のソフトウェア開発状況では特に重要です。
ソフトウェア エラーは避けられませんが、複雑なビルドでは検出して修正することがますます困難になってきています。そして、製品リリース段階に移行すると、デバッグプロセスがさらに深刻な問題になります。残念ながら、これを回避する方法はありません。デバッグが必要です。あなたを助けるために、開発のさまざまな段階で Java アプリケーションをデバッグするための役立つヒントをいくつか共有することにしました。
コントロールポイントを使用する
ブレークポイントから始めましょう。ブレークポイントは、あらゆるデバッグ プロセスの基礎となる明白ですが非常に重要なポイントです。チェックポイントを使用すると、アプリケーションの実行を停止できるため、プログラムの状態を分析し、コードが正しく動作しない原因を突き止めることができます。各デバッガーは、条件付きブレークポイント、例外ブレークポイント、ウォッチポイント、トレースポイントなど、いくつかのブレークポイント オプションを提供します。さまざまな種類のブレークポイントをいつどのように使用するかを学ぶと、デバッグ プロセスがよりスムーズになります。最新のツールの中には、アプリケーションを中断することなくチェックポイントをサポートしているものもあります。これにより、プログラムの実行を停止することなく、コード内にポイントを設定し、デバッグ データを収集することが可能になります。
論理構造を表示する
論理構造の表示機能は、Java クラスのコンテンツを監視する場合に非常に役立ちます。この機能を有効にすると、変数リストに配列が表示され、デバッグのコンテキストで非常に便利になります。これは、特にコードにオブジェクトの toString() メソッドがない場合に非常に便利です。変数ビューを使用すると、デバッグ中に変数の値を直接変更することもできます。これにより、変更された入力データでデバッグ セッションを再開する必要がなくなり、時間を大幅に節約できます。
コードベースの操作方法を学ぶ
どの Java デバッガでも、デバッグ中にコードのさまざまなセクションを移動できるようにするいくつかの関数を使用できます。それらの中には、「ラインまで走る」、「ステップオーバー」、「ステップイン」、「ステップイン」などがあります。これらに加えて、さらに 2 つのオプションを検討してください。
- フレームにドロップ - この関数は、スタック フレーム内のポイントに戻るために使用されます。ポイントを見逃して元に戻る必要がある場合は、フレームにドロップ機能を使用してください。
- ステップ フィルタリング - デバッグ中に特定のパケットをスキップできます。必要のない型をフィルタリングするだけで済むため、JDK システム内のすべてのクラスを移動する必要はありません。
コードのナビゲーション速度を向上させるには、ファンクション キーの組み合わせをマスターする必要があります。
- F5 - 「ステップイン」。
- F6 - 「またぐ」。
- F7 - 「ステップリターン」。
- F8 - 次のチェックポイントまで実行します。
ホットキーは IDE によって異なる場合がありますが、覚えておくと、マウスを頻繁に使用する必要がなくなります。
デッドロックを回避する方法を学ぶ
循環依存関係を形成した後に 2 つ以上のスレッドがブロックされると、デッドロック シナリオが発生します。一連の Java スレッドは通常、別のリソースを待機しているため、アプリケーションが完全に停止する可能性があります。jstack デッドロックのデバッグは、メモリのスパイクや CPU 負荷などの問題の兆候を示さないため、非常に困難になる可能性があります。jstack のデッドロック状況をトラブルシューティングするには、さまざまなアプローチがあります。まず、JVM クラスター内の複数のスレッド ダンプをキャプチャして、スレッド パターンを推測できます。この場合、静的スレッド ダンプを分析するだけでは十分ではない可能性があります。JVM クラスターのサイズによっては、複数のファイルをトロールする必要がある場合がありますが、これは多くの場合、労力と時間がかかるプロセスです。スレッドのデッドロックを分離するために必要な JV レイヤーとコード レイヤーを提供するアプリケーション監視ソリューションを使用するのが最善です。幸いなことに、最新のデバッガーや商用 APM ツールなど、この状況に役立つ革新的なツールがあります。これらのツールは、エラーを特定しながら Java コードの透明性を高めます。
本番デバッガの機能を活用する
ほとんどの開発者が通常従う典型的なデバッグ プロセスには、環境を複製し、エラーを切り分けて修正することが含まれます。ただし、これはすべての場合に当てはまるわけではありません。このような状況の場合、開発者は強力な実稼働デバッガーを使用する必要があります。Rookout もそのようなツールの 1 つです。これにより、アプリケーションの状態やフロー制御を変更せずに、アプリケーションからデバッグ データを収集できます。Rookout を使用すると、非破壊ブレークポイントを設定して完全なスタック トレースを取得したり、ライブ変数やデバッグに必要なその他のアプリケーション データをキャプチャしたりできます。したがって、実稼働環境のデバッグにオーバーヘッドの高い監視ソリューションを使用する代わりに、Rookout を使用するだけで済みます。Rookout は、再デプロイしたり、新しいコードを作成したりすることなく、アプリケーションのデバッグに必要なものをすべて提供します。サーバーサイド アプリケーションで作業している場合でも、コンテナ化されたアプリケーションで作業している場合でも、Rookout はデバッグ ツールへの優れた追加機能です。
リモートデバッグを忘れないでください
NetBeans、Eclipse、IntelliJ IDEA、Visual Studio などの IDE の大部分は、別のコンピュータにある Java コードを修正できる技術であるリモート デバッグをサポートしています。これは、システムがローカル デバッグをサポートしていない場合、またはコンピュータにデバッガを実行するための十分なリソースがない場合に特に重要です。リモート デバッグを実行するには、デバッガーがリモート ポートに接続するために使用する構成情報を提供する必要があります。リモート デバッグは、オフサイトの開発者がバグを修正するためにアプリケーションに接続する必要があるトラブルシューティングの状況にも役立ちます。デバッグには実際の実装よりも時間がかかる場合があることに注意してください。Java のデバッグ スキルを磨くときは、常にクリーンで効率的なコードを書くように努めてください。バグを修正する場合には、その努力が報われます。物事が制御不能になっていると感じた場合は、常に休憩を取ることをお勧めします。バグはプログラミングのパズルであり、多くのプログラマーがコンピューターの近くにいなくてもこの問題を解決できました。Java のデバッグの問題を解決するには、上記の戦略を使用してください。コーディングを楽しんでください!
GO TO FULL VERSION