ホームページ >Java >&#&チュートリアル >Java EE に欠けている 10 の最も重要なセキュリティ制御

Java EE に欠けている 10 の最も重要なセキュリティ制御

黄舟
黄舟オリジナル
2017-04-01 10:36:241295ブラウズ

JavaEE にはいくつかの素晴らしい組み込み セキュリティ メカニズムがありますが、アプリケーションが直面するすべての脅威をカバーしているわけではありません。クロスサイト スクリプティング (XSS)、SQL インジェクション、クロスサイト リクエスト フォージェリ (CSRF)、XML外部エンティティ (XXE) などの攻撃はまったくカバーされていません。Web アプリケーションや Web サービスが公開されるのを防ぐことができます。ただし、これにはある程度の作業とテストが必要です。幸いなことに、Open Web Application Security Project (OWASP) は、「最も重大な Web アプリケーション セキュリティ リスク トップ 10」に関するレポートをリリースしました

これらの主要なリスクが Java EE Web アプリケーションと Web サービスにどのように適用されるかを見てみましょう:

1. インジェクション

インジェクションは、開発者が 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) インジェクションなど、他にも多くの種類のインジェクションがあり、これらはすべて非常に危険なので、これらのインタープリターにデータを送信するときは注意してください

2. 壊れた認証とセッション管理

JavaEE は認証とセッション管理をサポートしていますが、ここで問題が発生する可能性がたくさんあります。 JSESSIONID は、ユーザーが知らないうちにユーザーのセッションをハイジャックするために使用される可能性があるため、セッション固定攻撃を防ぐために JSESSIONID を使用しないようにする必要があります。ユーザーの JSESSIONID を URL に追加することで、開示または盗難が容易になります

3. クロスサイト スクリプティング攻撃 (XSS)

XSS は、JavaEE 開発者が HTTP リクエストから信頼できない情報を取得し、それを適切な情報なしで HTTP レスポンスに含めると発生します。出力エンコード時のコンテキスト。攻撃者はこの 動作 を悪用してスクリプトを Web サイトに挿入し、セッションをハイジャックしてデータを盗むことができます。これらの攻撃を防ぐには、開発者は機密性の高いコンテキスト出力のエンコードを実行する必要があります。データを HTML に変換する場合は、x; 形式を使用します。さまざまな文字が多数ある場合、括弧のない属性は終了してしまうため、HTML 属性 を必ず括弧で囲んでください。信頼できないデータを JavaScript、URL、または CSS に入れる場合は、それぞれに適切なエスケープ方法を使用する必要があります。また、HTML 属性内で Javascript で記述された URL など、ネストされたコンテキストを扱うときは十分に注意してください。 OWASP ESAPI などのコーディング ライブラリを手伝うこともできます。

4. 安全でない直接オブジェクト参照

データベースキー、ファイル名、ハッシュマップインデックスなどの内部識別子をアプリケーションが公開すると、攻撃者はそれらの識別子の文字を操作して不正なデータにアクセスしようとする可能性があります。 。たとえば、信頼できないデータを HTTP リクエストから Java ファイル コンストラクターに渡すと、攻撃者は「../」または null バイト攻撃を使用して検証を欺く可能性があります。この種の攻撃を防ぐには、データへの間接参照の使用を検討する必要があります。 ESAPI ライブラリは、このような間接参照を容易にする ReferenceMap をサポートしています。

5. 間違ったセキュリティ設定

最新の JavaEE アプリケーションや フレームワーク (Struts や Spring など) には、多数のセキュリティ設定があります。セキュリティ設定を確認し、希望どおりに設定してください。たとえば、 タグには注意してください。これは、セキュリティ制約がリストされたメソッドにのみ適用され、攻撃者が HEAD や PUT などの他の HTTP メソッドを使用してセキュリティ制約全体をバイパスできることを示します。 web.xml の タグを 削除

する必要があるかもしれません。

6. 機密データの漏洩

Java には多数の暗号化ライブラリがありますが、それらを正しく使用するのは簡単ではありません。 JCE 上に構築された、便利な暗号化方法を便利かつ安全に提供するライブラリが見つかるはずです。たとえば、Jasypt や ESAPI がそのようなライブラリです。暗号化には AES、ハッシュには SHA256 などの強力なアルゴリズムを使用する必要があります。ただし、パスワード ハッシュはレインボー テーブルを使用して復号化できるため、bcrypt や PBKDF2 などの適応アルゴリズムを使用してください。

7. 機能レベルのアクセス制御の欠如

JavaEE は宣言型アクセス制御と手続き型アクセス制御の両方をサポートしていますが、多くのアプリケーションは依然として独自のソリューションを作成することを選択しています。 Spring のようなフレームワークには、アノテーション

に基づくアクセス制御プリミティブもあります。最も重要なことは、Web サービスを含め、すべての公開ポートに適切なアクセス制御チェックが行われていることを確認することです。攻撃者はエンドポイントに直接アクセスできるため、クライアントが何でも制御できるとは考えないでください。

8. クロスサイト リクエスト フォージェリ (CSRF)

状態を変更する各エンドポイントは、リクエストが偽造されたかどうかを確認する必要があります。開発者は、各ユーザーのセッションにランダムなトークンを入力し、リクエストが到着したときにそれを検証する必要があります。そうしないと、攻撃者は、保護されていないアプリケーションにリンクされた悪意のある IMG、SCRIPT、FRAME、または FORM タグを介して「攻撃」ページを作成する可能性があります。被害者がそのようなページを閲覧すると、ブラウザはタグで指定されている URL に対して「偽の」HTTP リクエストを生成し、被害者の認証情報を自動的に含めます。

9. 既知の脆弱性を持つコンポーネントの使用

最新の JavaEE アプリケーションには何百ものライブラリがあります。 Maven などの依存関係解決ツールにより、この数は過去 5 年間で爆発的に増加しました。広く使用されている Java ライブラリの多くには、Web アプリケーションを完全に破壊する可能性がある既知の脆弱性があります。解決策は、ライブラリを適時に更新することです。毎日新しい脆弱性がリリースされるため、1 回のスキャンだけを実行しないでください。 10. 認証されていないリダイレクトとリダイレクト

アプリケーションが、response.sendRedirect() を呼び出すときに request.getParameter() や request.getCookie() などの信頼できないデータを使用するたびに、攻撃者は被害者のブラウザを強制的に停止させる可能性があります。マルウェアを

インストール

する目的で信頼できない 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。