0% ont trouvé ce document utile (0 vote)
0 vues28 pages

InjectionIssues

Le document traite des meilleures pratiques de sécurité dans le développement d'applications, incluant la validation des entrées pour prévenir les injections, la séparation des responsabilités, et l'utilisation de PreparedStatement pour éviter les injections SQL. Il aborde également la sécurisation des connexions à la base de données, la gestion des erreurs, et la protection des sessions, ainsi que l'implémentation de l'authentification multi-facteurs et des jetons JWT. Enfin, il décrit l'intégration de la sécurité dans les pipelines CI/CD avec DevSecOps, en utilisant des outils comme SonarQube et ZAP pour l'analyse de sécurité.

Transféré par

julaudengambet
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
0 vues28 pages

InjectionIssues

Le document traite des meilleures pratiques de sécurité dans le développement d'applications, incluant la validation des entrées pour prévenir les injections, la séparation des responsabilités, et l'utilisation de PreparedStatement pour éviter les injections SQL. Il aborde également la sécurisation des connexions à la base de données, la gestion des erreurs, et la protection des sessions, ainsi que l'implémentation de l'authentification multi-facteurs et des jetons JWT. Enfin, il décrit l'intégration de la sécurité dans les pipelines CI/CD avec DevSecOps, en utilisant des outils comme SonarQube et ZAP pour l'analyse de sécurité.

Transféré par

julaudengambet
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

INJECTION ISSUES

VALIDATION ET SANITATION DES ENTRÉES

Objectif : Empêcher les attaques par injection (comme XSS ou SQLi).


String email = request . getParameter ( " email " ) ;
if ( email == null || ! email . matches ( " ^[\ w . -]+ @ [\ w. -]+\\.[ A - Za - z ]{2 ,6} $ " ) ) {
[Link]( HttpServletResponse.SC_BAD_REQUEST , " Email invalide " ) ;
return ;
}

// Une méthode pour traiter les caractères spéciaux


public static String escapeHtml ( String input ) {
if ( input == null ) return " " ;
return input . replaceAll ( " & " , " & amp ; " )
<c:out value = "${ user }" / > :
. replaceAll ( " <" , " & lt ; " )
<c:out value = "${ message }" / >
. replaceAll ( " >" , " & gt ; " )
. replaceAll ( " \" " , " & quot ; " )
. replaceAll ( " ’" , " &# x27 ; " );
}
SÉPARATION DES RESPONSABILITÉS

Objectif : Implémenter la logique d’accès aux données dans une classe dédiée (DAO ou Service).

public class MessageDAO {


public List<Message> getAllMessg(Connection conn) throws SQLException {
List<Message> messages = new ArrayList<>();
String sql = "SELECT * FROM messages";
try (PreparedStatement ps = [Link](sql);
ResultSet rs = [Link]()) {
while ([Link]()) {
[Link]( new Message([Link]("username"), [Link]("message")) );
}
}
return messages;
}
}
UTILISATION DES PREPAREDSTATEMENT

Objectif : Neutralise les risques d’injection SQL en utilisant les requêtes paramétrées.

String sql="SELECT * FROM messages WHERE username = ? ";


PreparedStatement ps = [Link](sql);
[Link](1, usernameInput);
ResultSet rs = [Link]();
SÉCURISATION DE LA CONNEXION À LA BD

Objectif : Ne jamais exposer les passwords/identifiants de connexion dans le code source.

# [Link]
[Link]=jdbc:mysql://localhost:3306/testdb
[Link]=root
[Link]=secret

Properties props = new Properties();


[Link](new FileInputStream("[Link]"));
String url = [Link]("[Link]");
//…
GESTION DES ERREURS

Objectif : Ne jamais afficher les détails des exceptions aux utilisateurs finaux.

try {
// Traitement classique
} catch (Exception e) {
// Log pour serveur
[Link](getClass().getName()).log([Link], null, e);
// Message generique pour l'utilisateur
[Link]("error", "Une erreur s'est produite.");
}
GESTION SÉCURISÉE DES SESSIONS/COOKIES

Objectif : Protéger les données de session (authentification, autorisation) contre le vol ou


l’usurpation en configurant correctement les cookies de session.

// création d’un cookie avec l’identifiant de session


Cookie jsessionCookie = new Cookie("JSESSIONID", [Link]());
// empêche l’accès au cookie depuis le JavaScript
[Link](true);
// force l’envoi du cookie uniquement via HTTPS
[Link](true);
// ajout du cookie à la réponse HTTP
[Link](jsessionCookie);
AUTHENTIFICATION ET AUTORISATION

Objectif : Restreindre l’accès aux pages protégées de l’application aux utilisateurs authentifiés.

if([Link]("user") == null) { [Link]("[Link]"); return; }

Il faudrait implémenter un contrôle d’authentification et d’autorisation pour limiter l'accès à la page


aux utilisateurs légitimes.

public class AuthFilter implements Filter {


public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
throws IOException, ServletException {
HttpSession s = [Link](false);
if (s == null||[Link]("user")==null){ [Link]("[Link]"); }
else { [Link](req, res); }
}
}
PROTECTION AVANCÉE : MFA ET JWT

Objectif : Renforcer l'authentification et l'autorisation en combinant plusieurs facteurs de sécurité


et des jetons robustes.

MFA (Multi-Factor Authentication) : Implique la vérification de l'identité par au moins deux


méthodes (mot de passe + code reçu par SMS/email, par exemple), ce qui complexifie fortement
les attaques par vol de crédenciales.

JWT (JSON Web Token) : Permet d'authentifier et d'autoriser l’accès aux ressources à l’aide de
jetons signés, envoyés au client.

String jwt = [Link]()


.withClaim("user", username)
.sign(algorithm);
RÈGLES DE CODAGE SÉCURISÉ API

Objectif : Protéger les APIs contre les abus, valider systématiquement les données reçues, et gérer
correctement les erreurs.

if( [Link](ip) > 100) {


[Link](429, "Trop de requêtes");
return;
}

Rate limiting : Empêche un utilisateur ou un bot d’effectuer trop de requêtes en peu de temps, ce
qui évite les abus ou la saturation du serveur.
DEVSECOPS ET PIPELINE CI/CD

Objectif : Intégrer la sécurité dans l’automatisation du développement et du déploiement, afin de


détecter les vulnérabilités au plus tôt.

Un pipeline CI/CD (Intégration Continue / Déploiement Continu) automatise la construction,


l'analyse, les tests et la livraison de votre application. DevSecOps ajoute à ce pipeline des contrôles
de sécurité automatisés et des vérifications à chaque étape.
DEVSECOPS ET PIPELINE CI/CD

• Validation : une modification apportée au code.


• Job : une série d'instructions qu'un Runner doit exécuter.
• Runner : un agent ou serveur qui exécute chaque job individuellement et qui peut se mettre à
l'échelle selon les besoins.
• Étapes : un mot-clé qui définit certaines phases spécifiques d'un job, comme la phase de
compilation et de déploiement. Les jobs d'une même étape s’exécutent en parallèle.
• Les pipelines sont configurés à l'aide d'un fichier YAML nommé .[Link], soumis au
contrôle de version et situé à la racine du projet.
FONCTIONNEMENT CI
1.Récupération du code : Vérification des nouvelles modifications depuis le dépôt Git.
[Link] et Build : Construction de l’application pour s’assurer qu’elle est fonctionnelle.
[Link]écution des tests :
1. Tests unitaires pour vérifier les fonctionnalités isolées.
2. Tests d’intégration pour s’assurer que les modules fonctionnent ensemble.
3. Tests statiques (linting, analyse de sécurité).
[Link] du code : Vérification des standards de qualité (ex: SonarQube, ESLint, …).
[Link] et feedback : Les résultats sont envoyés aux développeurs (succès ou échec).
FONCTIONNEMENT CD

[Link] et génération d’un artefact (ex: image Docker, binaire…)


2.Déploiement en environnement de staging
[Link]écution des tests post-déploiement (test d’intégration, tests UI…)
4.Déploiement automatique en production (si tout est valide)
[Link] et rollback (en cas de problème)
DEVSECOPS

• Analyse des risques, politiques de sécurité, architecture défensive, …


• SAST (Static Application Security Testing) :
o analyse statique du code (ex : SonarQube, Semgrep)
• DAST (Dynamic Application Security Testing) :
o tests dynamiques (ex : OWASP ZAP, Burp Suite)
• SCA (Software Composition Analysis) :
o analyse des dépendances (ex : Snyk, Trivy)
PIPELINE CI/CD SÉCURISÉE AVEC DEVSECOPS

• GitLab CI/CD permet d’automatiser l'intégration et le déploiement continu.


• GitLab Runner est programme agent qui exécute les jobs d’un pipeline CI/CD dans GitLab
(build, test, déploiement…).
• Les instructions reçues viennent du fichier .[Link] propre au projet GitLab.
• Indispensable pour automatiser intégration, testing et déploiement continu dans un workflow
DevOps.
INSTALLATION GITLAB RUNNER
[Link]
>sudo apt install sudo curl --output /usr/local/bin/gitlab-runner [Link]
[Link]/gitlab-runner-downloads/latest/binaries/gitlab-runner-darwin-amd64
>sudo chmod +x /usr/local/bin/gitlab-runner
>gitlab-runner install
>gitlab-runner start
>gitlab-runner status
>gitlab-runner register
SONARQUBE (SAST)

+ Bugs et erreurs logiques


+ Code Smells (odeurs de code)
+ Vulnérabilités de sécurité (SAST)
+ Security Hotspots
+ Qualité Gate
SONARQUBE (SAST)

docker run -d --name sonarqube -p 9000:9000 sonarqube


SONARQUBE (SAST)
SONARQUBE (SAST)
SONARQUBE (SAST)
stages:
- build
- test
- sonarqube
build-job:
stage: build
script: "mvn compile"
test-job:
stage: test
script: "mvn test"
sonarqube-check:
stage: sonarqube
image: sonarsource/sonar-scanner-cli:latest
script:
- sonar-scanner -[Link]=$SONAR_PROJECT_KEY -[Link]=$SONAR_URL
-[Link]=$SONAR_TOKEN
SONARQUBE (SAST)
SONARQUBE (SAST)

➢ git init
➢ git remote add origin [Link]
➢ git add .
➢ git commit -m "Initial commit"
➢ git push -u origin main
SONARQUBE (SAST)
SONARQUBE (SAST)

+ Bugs et erreurs logiques


+ Code Smells (odeurs de code)
+ Vulnérabilités de sécurité (SAST)
+ Security Hotspots
+ Qualité Gate
ZAP PROXY (DAST)
➢ docker pull zaproxy/zap-stable

➢ docker run --network="host"


-t --rm -v $(pwd):/zap/wrk zaproxy/zap-stable [Link]
-t [Link]
-r [Link]
ZAP PROXY (DAST)
stages:
- build
- test
- sonarqube
- dast
# ... (jobs build, test, sonarqube comme précédemment)
dast:
stage: dast
image: owasp/zap2docker-stable
variables: TARGET_URL: "[Link]
script: # Scan baseline sur l'URL cible avec génération d'un rapport HTML
-[Link] -t $TARGET_URL -r [Link]
artifacts:
paths:
- [Link]
reports:
dast:
[Link]

Vous aimerez peut-être aussi