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
- 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{ // 如果验证不通过,抛出异常或进行其他错误处理 }
- 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) { // 执行删除操作 }
- 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).
- 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"));
- 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();
- 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.
- 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不能为空"); } // 执行相应操作 }
- 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("操作失败,请稍后再试"); }
- 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.
- 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.
- 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.
- 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.
- 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.
- 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!

Outils d'IA chauds

Undress AI Tool
Images de déshabillage gratuites

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

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

Clothoff.io
Dissolvant de vêtements AI

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 !

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

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

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.

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.

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

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

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

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

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

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
