JavaEE にはいくつかの素晴らしい組み込み セキュリティ メカニズムがありますが、アプリケーションが直面するすべての脅威をカバーしているわけではありません。クロスサイト スクリプティング (XSS)、SQL インジェクション、クロスサイト リクエスト フォージェリ (CSRF)、XML外部エンティティ (XXE) などの攻撃はまったくカバーされていません。Web アプリケーションや Web サービスが公開されるのを防ぐことができます。ただし、これにはある程度の作業とテストが必要です。幸いなことに、Open Web Application Security Project (OWASP) は、「最も重大な Web アプリケーション セキュリティ リスク トップ 10」に関するレポートをリリースしました
これらの主要なリスクが Java EE Web アプリケーションと Web サービスにどのように適用されるかを見てみましょう:
インジェクションは、開発者が request.getParameter()、request.getCookie などの信頼できない情報を取得したときに発生します。 () または request.getHeader() など、コマンド インターフェイスで使用するときはいつでも、たとえば、信頼できないデータを「SELECT * FROM users WHERE username='」などの通常の SQL クエリに接続すると、SQL インジェクションが発生します。 + request.getParameter("user") + "' AND password='" + request.getParameter("pass") = "'" 開発者は、攻撃者がクエリの意味を変更して取得することを防ぐために PreparedStatement を使用する必要があります。コマンドインジェクション、LDAP インジェクション、Expression Language (EL) インジェクションなど、他にも多くの種類のインジェクションがあり、これらはすべて非常に危険なので、これらのインタープリターにデータを送信するときは注意してください
JavaEE は認証とセッション管理をサポートしていますが、ここで問題が発生する可能性がたくさんあります。 JSESSIONID は、ユーザーが知らないうちにユーザーのセッションをハイジャックするために使用される可能性があるため、セッション固定攻撃を防ぐために JSESSIONID を使用しないようにする必要があります。ユーザーの JSESSIONID を URL に追加することで、開示または盗難が容易になります
XSS は、JavaEE 開発者が HTTP リクエストから信頼できない情報を取得し、それを適切な情報なしで HTTP レスポンスに含めると発生します。出力エンコード時のコンテキスト。攻撃者はこの 動作 を悪用してスクリプトを Web サイトに挿入し、セッションをハイジャックしてデータを盗むことができます。これらの攻撃を防ぐには、開発者は機密性の高いコンテキスト出力のエンコードを実行する必要があります。データを HTML に変換する場合は、x; 形式を使用します。さまざまな文字が多数ある場合、括弧のない属性は終了してしまうため、HTML 属性 を必ず括弧で囲んでください。信頼できないデータを JavaScript、URL、または CSS に入れる場合は、それぞれに適切なエスケープ方法を使用する必要があります。また、HTML 属性内で Javascript で記述された URL など、ネストされたコンテキストを扱うときは十分に注意してください。 OWASP ESAPI などのコーディング ライブラリを手伝うこともできます。
データベースキー、ファイル名、ハッシュマップインデックスなどの内部識別子をアプリケーションが公開すると、攻撃者はそれらの識別子の文字を操作して不正なデータにアクセスしようとする可能性があります。 。たとえば、信頼できないデータを HTTP リクエストから Java ファイル コンストラクターに渡すと、攻撃者は「../」または null バイト攻撃を使用して検証を欺く可能性があります。この種の攻撃を防ぐには、データへの間接参照の使用を検討する必要があります。 ESAPI ライブラリは、このような間接参照を容易にする ReferenceMap をサポートしています。
最新の JavaEE アプリケーションや フレームワーク (Struts や Spring など) には、多数のセキュリティ設定があります。セキュリティ設定を確認し、希望どおりに設定してください。たとえば、
状態を変更する各エンドポイントは、リクエストが偽造されたかどうかを確認する必要があります。開発者は、各ユーザーのセッションにランダムなトークンを入力し、リクエストが到着したときにそれを検証する必要があります。そうしないと、攻撃者は、保護されていないアプリケーションにリンクされた悪意のある IMG、SCRIPT、FRAME、または FORM タグを介して「攻撃」ページを作成する可能性があります。被害者がそのようなページを閲覧すると、ブラウザはタグで指定されている URL に対して「偽の」HTTP リクエストを生成し、被害者の認証情報を自動的に含めます。
最新の JavaEE アプリケーションには何百ものライブラリがあります。 Maven などの依存関係解決ツールにより、この数は過去 5 年間で爆発的に増加しました。広く使用されている Java ライブラリの多くには、Web アプリケーションを完全に破壊する可能性がある既知の脆弱性があります。解決策は、ライブラリを適時に更新することです。毎日新しい脆弱性がリリースされるため、1 回のスキャンだけを実行しないでください。 10. 認証されていないリダイレクトとリダイレクト
する目的で信頼できない Web サイトにアクセスします。 forward も同様の問題を引き起こしますが、攻撃者が管理ページなどの不正な機能に自分自身を転送できる点が異なります。リダイレクトと転送先を必ず再確認してください。 これらの問題には引き続き注意を払う必要があります。新しい攻撃や脆弱性が常に発見されています。理想的には、セキュリティ チェックを既存のビルド、テスト、展開プロセスに統合できます。
アプリケーションでこれらの問題を確認するには、無料の Contrast for
Eclipseプラグインを試すことができます。これは単純な静的分析ツールではありません。代わりに、C4E は Java インストルメンテーション API を利用して、アプリケーション内のセキュリティ関連のすべてを監視します。 C4E はリアルタイムで完全なデータ フロー分析を実行することもできるため、複雑なアプリケーションを介したリクエストからのデータを追跡できます。たとえば、コードがパラメータ値を取得し、base64 でデコードしてマップに格納し、マップをデータ Bean に配置し、Bean をセッション属性に格納して、 JSP で Bean 値を取得するとします。 EL を使用して、この値を Web ページに挿入します。 Contrast for Eclipse はこのデータを追跡し、XSS 脆弱性を報告できます。複雑なフレームワークやライブラリを使用している場合でも。その速度、精度、使いやすさに匹敵するツールは他にありません。 Contrast for Eclipse は、Eclipse マーケットプレイスで見つけることができます。次に、サーバータブの「コントラストで開始」に移動するだけです。残りの作業は自動的に行われます。
以上がJava EE に欠けている 10 の最も重要なセキュリティ制御の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。