Maison Java javaDidacticiel Guide pratique de programmation de sécurité JAVA Core

Guide pratique de programmation de sécurité JAVA Core

Nov 08, 2023 am 08:48 AM
java Sécurité pratique

Guide pratique de programmation de sécurité JAVA Core

Java est l'un des langages de programmation les plus utilisés à l'heure actuelle. Il présente les avantages d'être multiplateforme, de sécurité, de fiabilité et de maintenance facile. Toutefois, les applications Java étant largement répandues sur Internet, elles sont devenues l’une des principales cibles des cyberattaques. Par conséquent, lors du développement de programmes Java, vous devez prêter attention à des pratiques de programmation sûres pour garantir la sécurité et la fiabilité du programme.

Cet article abordera les principales pratiques de programmation de sécurité de Java, y compris les bases de la programmation sécurisée, de la cryptographie, de la programmation défensive, de l'audit de code, etc., et fournira des exemples de code spécifiques.

1. Bases de la programmation sécurisée

  1. Validation des entrées

La validation des entrées est un concept important dans la programmation sécurisée Java, qui consiste à vérifier et filtrer les données avant de recevoir les données d'entrée de l'utilisateur. Cela permet d'éviter les attaques telles que l'injection SQL, les scripts intersites (XSS) et la falsification de requêtes intersites (CSRF). Les méthodes pour implémenter la validation des entrées peuvent inclure des expressions régulières, des bibliothèques spécialisées de validation des entrées, etc.

Exemple de code :

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

La gestion des autorisations peut contrôler qui peut accéder à quelles ressources dans le programme. En Java, vous pouvez utiliser des frameworks pour implémenter la gestion des autorisations, tels que Spring Security, etc.

Exemple de code :

// 在Controller中使用Spring Security进行权限管理
@PreAuthorize("hasRole('admin')")
@RequestMapping(value = "/delete/{id}", method = RequestMethod.DELETE)
public void delete(@PathVariable Integer id) {
    // 执行删除操作
}
  1. En-têtes de sécurité

Les en-têtes HTTP peuvent contenir des informations sur le navigateur, le serveur et la connexion. En définissant les en-têtes de sécurité corrects, vous pouvez empêcher certaines attaques telles que le détournement de clics, les attaques CORS, etc. Les en-têtes de sécurité couramment utilisés incluent X-Frame-Options, X-XSS-Protection et Content-Security-Policy, etc.

Échantillon de code :

// 在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. Cryptographie

La cryptographie est un domaine important pour protéger la sécurité des informations, y compris les technologies de cryptage, de hachage et de signature numérique. En Java, les implémentations de cryptographie couramment utilisées incluent BouncyCastle et Java Cryptography Extension (JCE).

  1. Cryptage

Le cryptage est le processus de conversion de texte brut en texte chiffré pour protéger les données contre l'accès par des parties non autorisées. En Java, les algorithmes de chiffrement couramment utilisés incluent AES, DES, RSA, etc.

Exemple de code :

// 使用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. Hashing

Le hachage est le processus de transformation irréversible de données de toute taille. En Java, les algorithmes de hachage couramment utilisés incluent MD5, SHA-1, SHA-256, etc.

Exemple de code :

// 使用SHA-256哈希数据
MessageDigest md = MessageDigest.getInstance("SHA-256");
md.update(data.getBytes("UTF-8"));
byte[] hashBytes = md.digest();
  1. Signature numérique

La signature numérique consiste à utiliser une clé privée pour crypter les informations afin de garantir l'intégrité et l'authentification des informations. En Java, les algorithmes de signature numérique couramment utilisés incluent RSA et DSA.

Exemple de code :

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

3. Programmation défensive

La programmation défensive est une méthode de programmation qui prend en compte les attaques possibles lors de l'écriture de code pour éviter les failles de sécurité. Les méthodes de programmation défensives couramment utilisées en Java incluent la vérification des paramètres, la gestion des exceptions et la journalisation.

  1. Vérification des paramètres

Les paramètres saisis doivent être vérifiés et vérifiés avant toute opération. La vérification des paramètres peut éviter certaines failles de sécurité, telles que les exceptions de pointeur nul, les accès hors limites, etc.

Exemple de code :

// 对方法参数进行检查
public void operation(String data) {
    if (data == null || data.isEmpty()) {
        throw new IllegalArgumentException("data不能为空");
    }
    // 执行相应操作
}
  1. Gestion des exceptions

Lors de la gestion des exceptions, les informations sur les exceptions doivent être enregistrées dans le journal pour un meilleur débogage et un meilleur dépannage. Dans le même temps, lorsque vous renvoyez des informations anormales au monde extérieur, vous devez éviter de renvoyer des informations sensibles.

Exemple de code :

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

La connexion à un programme peut aider les développeurs à mieux comprendre comment le programme fonctionne et faciliter l'identification et la réparation des vulnérabilités de sécurité. Lors de la connexion, vous devez éviter d'écrire des informations sensibles telles que des mots de passe, des numéros de carte de crédit, etc.

Exemple de code :

// 记录日志
logger.info("用户{}尝试登录,结果为{}", username, result);

4. Audit de code

L'audit de code est un moyen de vérifier les vulnérabilités de sécurité potentielles dans les applications. Lorsque vous effectuez des audits de code Java, vous devez vous concentrer sur la validation des entrées, l'injection SQL, les attaques XSS, l'inclusion de fichiers, la gestion des autorisations, etc.

  1. Validation des entrées

La validation des entrées est la partie la plus importante lors de la réalisation d'un audit de code Java. Lors de la vérification de la validation des entrées, vous devez prêter attention à toutes les entrées des utilisateurs, y compris les requêtes GET, POST, les cookies, etc.

  1. Injection SQL

L'injection SQL est une technique d'attaque courante, à laquelle il faut également prêter attention lors de l'audit du code Java. Les requêtes SQL, les mises à jour SQL, les procédures stockées, etc. doivent être vérifiées pour détecter les vulnérabilités d'injection SQL.

  1. XSS Attack

L'attaque XSS est une méthode d'attaque des utilisateurs en injectant des scripts malveillants dans des applications Web. Lors de l'audit du code Java, toutes les entrées utilisateur doivent être vérifiées et vérifiées pour détecter les scripts malveillants.

  1. Inclusion de fichiers

L'inclusion de fichiers fait référence à l'attaque du système en référençant des fichiers pour afficher ou exécuter le contenu de fichiers inattendus. Lors de l'audit du code Java, tous les points d'inclusion de fichiers dans le système de code doivent être vérifiés, en particulier les inclusions de fichiers qui utilisent des chemins saisis par l'utilisateur.

  1. Gestion des autorisations

Dans l'audit de code Java, toute gestion des autorisations doit être vérifiée, en particulier tout le code pouvant contenir des données d'entrée utilisateur. Recherchez les entrées utilisateur qui n'ont pas été traitées correctement, telles que des vulnérabilités de téléchargement de fichiers arbitraires, etc.

En résumé, les pratiques de programmation de sécurité de base Java doivent impliquer les bases de la programmation de sécurité, la cryptographie, la programmation défensive, l'audit de code, etc. Ce qui précède fournit quelques pratiques de programmation spécifiques et des exemples de code, notant que la programmation sécurisée est toujours risquée et nécessite une adaptation constante aux nouvelles menaces et vulnérabilités de sécurité. Par conséquent, lorsque vous écrivez du code Java, vous devez toujours faire attention aux pratiques de programmation sûres pour garantir la sécurité et la fiabilité de votre programme.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Tutoriel PHP
1517
276
Qu'est-ce qu'une liste liée en Java? Qu'est-ce qu'une liste liée en Java? Aug 12, 2025 pm 12:14 PM

LinkedList est une liste liée bidirectionnelle dans Java, implémentant la liste et les interfaces de Deque. Il convient aux scénarios où les éléments sont fréquemment insérés et supprimés. Surtout lorsqu'il fonctionne aux deux extrémités de la liste, il a une efficacité élevée, mais les performances d'accès aléatoire sont médiocres et la complexité du temps est O (n). L'insertion et la suppression peuvent atteindre O (1) à des endroits connus. Par conséquent, il convient à la mise en œuvre de piles, de files d'attente ou de situations où les structures doivent être modifiées dynamiquement et ne convient pas aux opérations à forte intensité de lecture qui accèdent fréquemment par index. La conclusion finale est que LinkedList est meilleur que ArrayList lorsqu'il est fréquemment modifié mais a moins d'accès.

Comment utiliser l'API HTTPClient en Java Comment utiliser l'API HTTPClient en Java Aug 12, 2025 pm 02:27 PM

Le cœur de l'utilisation du javahttpclientapi est de créer un httpclient, de créer un httprequest et de traiter httpResponse. 1. Utilisez httpclient.newhttpclient () ou httpclient.newbuilder () pour configurer les délais d'expiration, proxy, etc. pour créer des clients; 2. Utilisez httpRequest.newBuilder () pour définir URI, méthode, en-tête et corps pour construire des demandes; 3. Envoyez des demandes synchrones via client.send () ou envoyez des demandes asynchrones via client.sendaSync (); 4. Utilisez des handleurs.

The Best Ides for Java Development: une revue comparative The Best Ides for Java Development: une revue comparative Aug 12, 2025 pm 02:55 PM

Thebestjavaidein2024Denpendyourndeds: 1.chooseintellijideaforprofessional, l'entreprise, le development orfulldevelopmentduetoitsSuperiorCodeIntelligence, le framewory

Correction: Ethernet 'réseau non identifié' Correction: Ethernet 'réseau non identifié' Aug 12, 2025 pm 01:53 PM

RestartyourRouterAndComputerToresolvetemporaryGlithes.2.RunthenetWorkTrouleshooTerviATheSystemTraytomAticalMatterFixComMonissues.3.RenewtheipAddressusingcomandPomptSADMinistratorByrunningIpConfig / Release, Ipconfig / Renew, NetShwinsockReset, etnetSh

Excel trouver et remplacer ne fonctionne pas Excel trouver et remplacer ne fonctionne pas Aug 13, 2025 pm 04:49 PM

CheckkSearchSettings like "MatchEnteRireCellContents" et "MatchCase" ByExpandingOptionsInFindanDreplace, garantissant "lookin" issettominuesand »dans" TOCORRECTSCOPE; 2.LOORHFORHIDDENCHARACTER

Edge ne sauvant pas l'histoire Edge ne sauvant pas l'histoire Aug 12, 2025 pm 05:20 PM

Tout d'abord, Checkif "ClearbrowsingDataOnClose" IsTurneDOninsettingsandTurnitofftoenSureHistoryissaved.2.Confirmyou'renotusingInprivateMode, asitdoesNotsAvehistoryByDesigr.3.Disable ExtensionStendatoryToUleoutHeleft

Comment déployer une application Java Comment déployer une application Java Aug 17, 2025 am 12:56 AM

Préparez-vous en application par rapport à Mavenorgradletobuildajarorwarfile, externalisationConfiguration.2.ChoOSEADPLOYENDIRONMENT: Runonbaremetal / vmwithjava-jarandsystemd, deploywarontomcat, compeneriserisewithdocker, orusecloudplatformslikelise.

Comment configurer la journalisation dans une application Java? Comment configurer la journalisation dans une application Java? Aug 15, 2025 am 11:50 AM

L'utilisation de SLF4J combinée avec la journalisation ou le log4j2 est le moyen recommandé de configurer les journaux dans les applications Java. Il introduit des bibliothèques API et implémentation en ajoutant des dépendances Maven correspondantes; 2. Obtenez l'enregistreur via le loggerfactory de SLF4J dans le code et écrivez le code journal découplé et efficace à l'aide de méthodes de journalisation paramétrée; 3. Définir le format de sortie du journal, le niveau, la cible (console, le fichier) et le contrôle du journal du package via Logback.xml ou les fichiers de configuration log4j2.xml; 4. Activer éventuellement la fonction de balayage de fichiers de configuration pour atteindre un ajustement dynamique du niveau de journal, et Springboot peut également être géré via des points de terminaison de l'actionneur; 5. Suivez les meilleures pratiques, y compris

See all articles