ホームページ Java &#&チュートリアル JAVA コア セキュリティ プログラミング実践ガイド

JAVA コア セキュリティ プログラミング実践ガイド

Nov 08, 2023 am 08:48 AM
java 安全性 練習する

JAVA コア セキュリティ プログラミング実践ガイド

Java は現在最も広く使用されているプログラミング言語の 1 つであり、クロスプラットフォーム、安全性、信頼性、メンテナンスが容易であるという利点があります。しかし、Java アプリケーションはインターネット上に広く存在するため、サイバー攻撃の主なターゲットの 1 つとなっています。したがって、Java プログラムを開発するときは、プログラムの安全性と信頼性を確保するために、安全なプログラミングの実践に注意を払う必要があります。

この記事では、セキュリティ プログラミングの基本、暗号化、防御的プログラミング、コード監査などを含む、Java のコア セキュリティ プログラミングの実践について説明し、具体的なコード例を示します。

1. セキュア プログラミングの基本

  1. 入力検証

入力検証は、Java セキュア プログラミングにおける重要な概念、つまりユーザー入力を受け取る前に行われます。 data 、データを検証してフィルタリングします。これは、SQL インジェクション、クロスサイト スクリプティング (XSS)、クロスサイト リクエスト フォージェリ (CSRF) などの攻撃を防ぐのに役立ちます。入力検証を実装するメソッドには、正規表現、特殊な入力検証ライブラリなどが含まれます。

コード例:

// 对手机号进行验证
Pattern pattern = Pattern.compile("^1[3|4|5|7|8]\d{9}$");
Matcher matcher = pattern.matcher(phoneNumber);
if(matcher.matches()){
    // 如果验证通过,执行相应操作
}else{
    // 如果验证不通过,抛出异常或进行其他错误处理
}
ログイン後にコピー
  1. 権限管理

権限管理では、プログラム内のどのリソースに誰がアクセスできるかを制御できます。 Java では、Spring Security などのフレームワークを使用して権限管理を実装できます。

コード例:

// 在Controller中使用Spring Security进行权限管理
@PreAuthorize("hasRole('admin')")
@RequestMapping(value = "/delete/{id}", method = RequestMethod.DELETE)
public void delete(@PathVariable Integer id) {
    // 执行删除操作
}
ログイン後にコピー
  1. セキュリティ ヘッダー

HTTP ヘッダーには、ブラウザ、サーバー、および接続に関する情報を含めることができます。正しいセキュリティ ヘッダーを設定することで、クリックジャッキングや CORS 攻撃などの一部の攻撃を防ぐことができます。一般的に使用されるセキュリティ ヘッダーには、X-Frame-Options、X-XSS-Protection、Content-Security-Policy などが含まれます。

コード例:

// 在Spring中设置安全标头
@Configuration
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.headers()
            .frameOptions().sameOrigin()
            .xssProtection().block(false)
            .contentSecurityPolicy("default-src 'self'");
    }
}
ログイン後にコピー

2. 暗号化

暗号化は、暗号化、ハッシュ、デジタル署名技術など、情報セキュリティを保護する重要な分野です。 Java で一般的に使用される暗号化実装には、BouncyCastle および Java Cryptography Extension (JCE) が含まれます。

  1. 暗号化

暗号化は、権限のない者によるアクセスからデータを保護するために、プレーン テキストを暗号テキストに変換するプロセスです。 Java で一般的に使用される暗号化アルゴリズムには、AES、DES、RSA などが含まれます。

コード例:

// 使用AES加密数据
SecretKey secret = new SecretKeySpec(keyBytes, "AES");
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, secret);
byte[] encryptedBytes = cipher.doFinal(plainText.getBytes("UTF-8"));
ログイン後にコピー
  1. ハッシュ

ハッシュとは、あらゆるサイズのデータ​​を不可逆的に変換するプロセスです。 Java で一般的に使用されるハッシュ アルゴリズムには、MD5、SHA-1、SHA-256 などが含まれます。

コード例:

// 使用SHA-256哈希数据
MessageDigest md = MessageDigest.getInstance("SHA-256");
md.update(data.getBytes("UTF-8"));
byte[] hashBytes = md.digest();
ログイン後にコピー
  1. デジタル署名

デジタル署名は、秘密キーを使用して情報を暗号化し、情報の整合性と認証を保証することです。 。 Java では、一般的に使用されるデジタル署名アルゴリズムには RSA と DSA があります。

コード例:

// 使用RSA对数据进行数字签名
PrivateKey privateKey = getPrivateKey();
Signature signature = Signature.getInstance("SHA256withRSA");
signature.initSign(privateKey);
signature.update(data.getBytes("UTF-8"));
byte[] signatureBytes = signature.sign();
ログイン後にコピー

3. 防御的プログラミング

防御的プログラミングとは、セキュリティの抜け穴を防ぐために、コードを記述する際に起こり得る攻撃を考慮したプログラミング手法です。 Java で一般的に使用される防御的なプログラミング手法には、パラメータ チェック、例外処理、ロギングなどがあります。

  1. パラメータのチェック

操作を実行する前に、入力されたパラメータを検証してチェックする必要があります。パラメーターをチェックすると、ヌル ポインター例外、境界外アクセスなどの一部のセキュリティ ホールを防ぐことができます。

コード サンプル:

// 对方法参数进行检查
public void operation(String data) {
    if (data == null || data.isEmpty()) {
        throw new IllegalArgumentException("data不能为空");
    }
    // 执行相应操作
}
ログイン後にコピー
  1. 例外処理

例外を処理する場合、デバッグとトラブルシューティングの処理を改善するために、例外情報をログに記録する必要があります。同時に、異常な情報を外部に返す場合は、機密情報を返すことは避けるべきです。

コードサンプル:

// 在异常处理中记录日志并返回友好的错误信息
try {
    // 执行相应操作
} catch (Exception e) {
    logger.error("操作失败", e);
    throw new RuntimeException("操作失败,请稍后再试");
}
ログイン後にコピー
  1. ログ記録

プログラムにログインすると、開発者がプロ​​グラムの動作をより深く理解し、セキュリティの特定と修正に役立ちます。脆弱性。ログインするときは、パスワードやクレジット カード番号などの機密情報を書き込まないようにしてください。

コード サンプル:

// 记录日志
logger.info("用户{}尝试登录,结果为{}", username, result);
ログイン後にコピー

4. コード監査

コード監査は、アプリケーションの潜在的なセキュリティ脆弱性をチェックする方法です。 Java コード監査を実施するときは、入力検証、SQL インジェクション、XSS 攻撃、ファイルのインクルード、権限管理などに焦点を当てる必要があります。

  1. 入力検証

Java コード監査を実施する場合、入力検証は最も重要な部分です。入力検証をチェックするときは、GET、POST リクエスト、Cookie などを含むすべてのユーザー入力に注意を払う必要があります。

  1. SQL インジェクション

SQL インジェクションは一般的な攻撃手法であり、Java コード監査でも特別な注意が必要です。 SQL クエリ、SQL 更新、ストアド プロシージャなどに SQL インジェクションの脆弱性がないかチェックする必要があります。

  1. XSS 攻撃

XSS 攻撃は、Web アプリケーションに悪意のあるスクリプトを挿入することによってユーザーを攻撃する方法です。 Java コード監査では、すべてのユーザー入力をチェックし、悪意のあるスクリプトがないか検証する必要があります。

  1. ファイル インクルージョン

ファイル インクルージョンとは、ファイルを参照して予期しないファイルの内容を表示または実行し、それによってシステムを攻撃することを指します。 Java コード監査では、コード システム内のすべてのファイル インクルード ポイント、特にユーザーが入力したパスを使用するファイル インクルードをチェックする必要があります。

  1. 権限管理

Java コード監査では、すべての権限管理、特にユーザー入力データが含まれる可能性のあるすべてのコードをチェックする必要があります。任意のファイルアップロードの脆弱性など、正しく処理されていないユーザー入力をチェックします。

要約すると、Java コア セキュリティ プログラミングの実践には、セキュリティ プログラミングの基本、暗号化、防御的プログラミング、コード監査などが含まれる必要があります。上記では、安全なプログラミングには常にリスクがあり、新しいセキュリティの脅威や脆弱性に常に適応する必要があることに注意しながら、いくつかの具体的なプログラミングの実践とコード例を示しています。したがって、Java コードを作成するときは、プログラムの安全性と信頼性を確保するために、安全なプログラミングの実践に常に注意を払う必要があります。

以上がJAVA コア セキュリティ プログラミング実践ガイドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Javaの完全数 Javaの完全数 Aug 30, 2024 pm 04:28 PM

Java における完全数のガイド。ここでは、定義、Java で完全数を確認する方法、コード実装の例について説明します。

ジャワのウェカ ジャワのウェカ Aug 30, 2024 pm 04:28 PM

Java の Weka へのガイド。ここでは、weka java の概要、使い方、プラットフォームの種類、利点について例を交えて説明します。

Javaのスミス番号 Javaのスミス番号 Aug 30, 2024 pm 04:28 PM

Java のスミス番号のガイド。ここでは定義、Java でスミス番号を確認する方法について説明します。コード実装の例。

Java Springのインタビューの質問 Java Springのインタビューの質問 Aug 30, 2024 pm 04:29 PM

この記事では、Java Spring の面接で最もよく聞かれる質問とその詳細な回答をまとめました。面接を突破できるように。

Java 8 Stream Foreachから休憩または戻ってきますか? Java 8 Stream Foreachから休憩または戻ってきますか? Feb 07, 2025 pm 12:09 PM

Java 8は、Stream APIを導入し、データ収集を処理する強力で表現力のある方法を提供します。ただし、ストリームを使用する際の一般的な質問は次のとおりです。 従来のループにより、早期の中断やリターンが可能になりますが、StreamのForeachメソッドはこの方法を直接サポートしていません。この記事では、理由を説明し、ストリーム処理システムに早期終了を実装するための代替方法を調査します。 さらに読み取り:JavaストリームAPIの改善 ストリームを理解してください Foreachメソッドは、ストリーム内の各要素で1つの操作を実行する端末操作です。その設計意図はです

Java での日付までのタイムスタンプ Java での日付までのタイムスタンプ Aug 30, 2024 pm 04:28 PM

Java での日付までのタイムスタンプに関するガイド。ここでは、Java でタイムスタンプを日付に変換する方法とその概要について、例とともに説明します。

カプセルの量を見つけるためのJavaプログラム カプセルの量を見つけるためのJavaプログラム Feb 07, 2025 am 11:37 AM

カプセルは3次元の幾何学的図形で、両端にシリンダーと半球で構成されています。カプセルの体積は、シリンダーの体積と両端に半球の体積を追加することで計算できます。このチュートリアルでは、さまざまな方法を使用して、Javaの特定のカプセルの体積を計算する方法について説明します。 カプセルボリュームフォーミュラ カプセルボリュームの式は次のとおりです。 カプセル体積=円筒形の体積2つの半球体積 で、 R:半球の半径。 H:シリンダーの高さ(半球を除く)。 例1 入力 RADIUS = 5ユニット 高さ= 10単位 出力 ボリューム= 1570.8立方ユニット 説明する 式を使用してボリュームを計算します。 ボリューム=π×R2×H(4

Spring Tool Suiteで最初のSpring Bootアプリケーションを実行するにはどうすればよいですか? Spring Tool Suiteで最初のSpring Bootアプリケーションを実行するにはどうすればよいですか? Feb 07, 2025 pm 12:11 PM

Spring Bootは、Java開発に革命をもたらす堅牢でスケーラブルな、生産対応のJavaアプリケーションの作成を簡素化します。 スプリングエコシステムに固有の「構成に関する慣習」アプローチは、手動のセットアップを最小化します。

See all articles