pour sécuriser des applications
Par Florent FREMONT, LeadDev MAIF
Avant de sécuriser une application, il est nécessaire d'identifier ce que cela veut dire.
La sécurité est l'affaire de tous et doit s'inscrire au quotidien
Documentation de sensibilisation à la sécurité. Version 2021
On va tenter d'identifier des principes qui peuvent nous aider à mieux concevoir et maintenir nos applications.
Le contrôle d'accès applique une politique telle que les utilisateurs ne peuvent pas agir en dehors de leurs autorisations prévues.
Les défaillances entraînent généralement la divulgation, la modification ou la destruction non autorisées de toutes les données ou l'exécution d'une fonction commerciale en dehors des limites de l'utilisateur.
Adéquation à REST
Filtrer les accès / informations retournées
Traçer les défaillances
Deny by default
En passant d'une position à la deuxième position, auparavant connue sous le nom d'exposition aux données sensibles, qui est plus un symptôme large qu'une cause fondamentale, l'accent est mis sur les échecs liés à la cryptographie (ou à l'absence de cryptographie).
Ce qui conduit souvent à l'exposition de données sensibles.
Cryptage de bout en bout ?
Vive HTTPS
Fiabiliser la création de passwords
MD5 / SHA1 poubelle
TLS 1.2+
Une application est vulnérable aux attaques lorsque :
Les données fournies par l'utilisateur ne sont pas validées, filtrées ou épurées par l'application.
Les requêtes dynamiques ou les appels non paramétrés sans échappement contextuel sont utilisés directement dans l'interpréteur....
Tu valides et je valide
éviter les interprétations dynamiques
échapper les donnéess
Requêtes préparées
La conception non sécurisée est une catégorie large représentant différentes faiblesses, exprimée par « conception de contrôle manquante ou inefficace ».
Il y a une différence entre une conception non sécurisée et une mise en œuvre non sécurisée.
cycle de dev sécurisé
s'appuyer sur des libs dédiées
limiter les consommations
<!-- exploiter la syntaxe JSX -->
<p style={{color: myAppColor}}>{myAppRating}</p>
<!-- pour rendu dynamiquement du HTML -->
<p dangerouslySetInnerHTML={{__html: myAppReview}}></p>
<!-- ou utiliser DomPurify -->
// Pensez à valider les liens avant
function validateURL(url) {
const parsed = new URL(url)
return ['https:', 'http:'].includes(parsed.protocol)
}
<a href={validateURL(url) ? url : ''}>This is a link!</a>
<!-- oubliez les variables pour passer un état -->
<script>window.__STATE__ = ${JSON.stringify({ data })}</script>
// en cas de vulnérabilité XSS
localStorage.setItem('monChat', 'Tom'); // not SAFE
// pour les données non sensibles, préférez IndexDB
Software development life cycle
Proportion de l'effort d'essai dans le cycle de développement du logiciel
Proportion de l'effort de test selon la technique de test
Permet de formuler et mettre en œuvre une stratégie de sécurité logicielle
Un cycle de fonctionnement continu de 3 à 12 mois