Métadonnées d'image
Saviez-vous que les photos peuvent contenir beaucoup d'informations sur l'appareil utilisé pour prendre la photo, la date et l'heure et même l'emplacement où la photo a été prise ?
Protégez votre vie privée
Saviez-vous que vous pouvez supprimer les métadonnées de vos photos pour protéger votre vie privée ? Voici quelques outils qui peuvent vous aider à supprimer les métadonnées de vos photos.
- VerExif - Outil en ligne pour supprimer les métadonnées des photos.
- ExifRemove - Outil en ligne pour supprimer les métadonnées des photos.
- Remove Photo Metadata - Outil en ligne pour supprimer les métadonnées des photos.
- ExifTool - Outil en ligne de commande pour supprimer les métadonnées des photos.
Outils IP
Saviez-vous qu'une adresse IP peut fournir des informations sur sa localisation, son fournisseur d'accès et bien plus ? Cet outil affichera des informations détaillées sur une adresse IP donnée.
Outils IP
Votre adresse IP est :
REMOTE_ADDR: 216.73.216.64
Protégez votre vie privée
Saviez-vous que vous pouvez utiliser un VPN pour masquer votre adresse IP et protéger votre vie privée ? Voici quelques outils qui peuvent vous aider à masquer votre adresse IP.
- Firefox - Navigateur gratuit avec VPN intégré.
- ExpressVPN - Service VPN pour masquer votre adresse IP.
- NordVPN - Service VPN pour masquer votre adresse IP.
- CyberGhost VPN - Service VPN pour masquer votre adresse IP.
- Private Internet Access - Service VPN pour masquer votre adresse IP.
Traceur de pixel
Saviez-vous que le simple fait de voir une image dans un e-mail sans cliquer sur aucun lien peut exposer des informations vous concernant, telles que :
- Quand vous avez ouvert l'e-mail
- Votre adresse IP
- Votre localisation approximative
- Des informations sur votre appareil
- Votre client de messagerie
Protégez votre vie privée
Vous pouvez protéger votre vie privée en désactivant le chargement des images dans votre client de messagerie ou en utilisant un client de messagerie textuel. Cela empêchera les traceurs de pixel d'être chargés et d'envoyer des informations à l'expéditeur.
De plus, vous pouvez utiliser des extensions de navigateur ou des services de messagerie qui bloquent les pixels de suivi.
Test d'intrusion SQL
Saviez-vous que l'injection SQL est l'une des vulnérabilités d'application web les plus courantes ? Cet outil vous aidera à effectuer une analyse de base de l'URL fournie pour détecter des vulnérabilités potentielles d'injection SQL.
Protégez votre application web
Pour protéger votre application web des vulnérabilités d'injection SQL, tenez compte des meilleures pratiques suivantes :
- Important : Utilisez des instructions préparées et des requêtes paramétrées.
/* mot de passe en base de données précédemment haché avec la fonction password_hash() */
function login($db, $email, $pass) {
$stmt = $db->prepare("SELECT password FROM users WHERE email = ?");
$stmt->bind_param("s", $email); //HL
$stmt->execute();
$user = $stmt->get_result()->fetch_assoc();
if (!$user || !password_verify($pass, $user['password'])) {
unset($_SESSION['user_email']);
return false;
}
$_SESSION['user_email'] = $email;
return true;
}
# mot de passe en base de données précédemment haché avec la fonction bcrypt.hashpw
import bcrypt
def login(db, session, email, password):
cursor = db.cursor(dictionary=True)
cursor.execute("SELECT password FROM users WHERE email = %s", (email,)) //HL
user = cursor.fetchone()
if not user or not bcrypt.checkpw(password.encode(), user['password'].encode()):
session.pop('user_email', None)
return False
session['user_email'] = email
return True
/* mot de passe en base de données précédemment haché avec la fonction bcrypt.hash */
const bcrypt = require('bcrypt');
async function login(db, session, email, pass) {
const [rows] = await db.execute("SELECT password FROM users WHERE email = ?", [email]); //HL
const user = rows[0];
if (!user || !await bcrypt.compare(pass, user.password)) {
delete session.user_email;
return false;
}
session.user_email = email;
return true;
}
/* mot de passe en base de données précédemment haché avec la fonction BCrypt.HashPassword */
using BCrypt.Net;
using MySql.Data.MySqlClient;
using Microsoft.AspNetCore.Http;
public async Task<bool> Login(MySqlConnection db, ISession session, string email, string pass)
{
using var cmd = new MySqlCommand("SELECT password FROM users WHERE email = @email", db);
cmd.Parameters.AddWithValue("@email", email); //HL
using var reader = await cmd.ExecuteReaderAsync();
if (!await reader.ReadAsync() || !BCrypt.Verify(pass, reader.GetString("password")))
{
session.Remove("user_email");
return false;
}
session.SetString("user_email", email);
return true;
}
/* mot de passe en base de données précédemment haché avec la fonction BCrypt.hashpw */
import org.mindrot.jbcrypt.BCrypt;
import java.sql.*;
import jakarta.servlet.http.HttpSession;
public boolean login(Connection db, HttpSession session, String email, String pass) throws SQLException {
try (PreparedStatement stmt = db.prepareStatement("SELECT password FROM users WHERE email = ?")) {
stmt.setString(1, email); //HL
ResultSet rs = stmt.executeQuery();
if (!rs.next() || !BCrypt.checkpw(pass, rs.getString("password"))) {
session.removeAttribute("user_email");
return false;
}
session.setAttribute("user_email", email);
return true;
}
}
/* Dépendance Maven */
<dependency>
<groupId>org.mindrot</groupId>
<artifactId>jbcrypt</artifactId>
<version>0.4</version>
</dependency>
- Validez et assainissez les entrées utilisateur.
- Utilisez des frameworks ORM (mapping objet-relationnel) qui gèrent SQL en toute sécurité.
- Mettez régulièrement à jour et corrigez votre base de données et votre logiciel d'application web.
- Implémentez une gestion appropriée des erreurs pour éviter d'exposer les erreurs de base de données aux utilisateurs.
Test d'intrusion XSS
Saviez-vous que permettre les images sur votre site peut entraîner des vulnérabilités XSS ?
Test d'intrusion XSS
Dans une application de messagerie par exemple, vous pourriez essayer de publier une fausse image :
Bonjour, comment allez-vous aujourd'hui ?
Bien merci.
Ou :
<svg onload="window.location='https://LucLaverdure.com';" width="100" height="100">
<circle cx="50" cy="50" r="40" stroke="black" stroke-width="3" fill="red" />
</svg>
Note : Vous pouvez enregistrer le SVG ci-dessus dans un fichier et le téléverser si les fichiers SVG sont autorisés. L'événement onload déclenchera le JavaScript lorsque le SVG sera rendu dans le navigateur.
Protégez votre application web
Pour protéger votre application web des vulnérabilités XSS, tenez compte des meilleures pratiques suivantes :
- Assainissez et validez les entrées utilisateur.
/* Installer via composer :
composer require ezyang/htmlpurifier */
require_once 'HTMLPurifier.auto.php';
function sanitize_html(string $input): string {
$config = HTMLPurifier_Config::createDefault();
$config->set('HTML.Allowed', 'b,i,u,strong,em,p,br,ul,ol,li,a[href|title],img[src|alt]');
return (new HTMLPurifier($config))->purify($input);
}
# Installer via pip :
# pip install bleach
import bleach
ALLOWED_TAGS = ['b', 'i', 'u', 'strong', 'em', 'p', 'br', 'ul', 'ol', 'li', 'a', 'img']
ALLOWED_ATTRIBUTES = {
'a': ['href', 'title'],
'img': ['src', 'alt'],
}
def sanitize_html(input: str) -> str:
return bleach.clean(input, tags=ALLOWED_TAGS, attributes=ALLOWED_ATTRIBUTES, strip=True)
/* Installer via npm :
npm install sanitize-html */
const sanitizeHtml = require('sanitize-html');
const ALLOWED_TAGS = ['b', 'i', 'u', 'strong', 'em', 'p', 'br', 'ul', 'ol', 'li', 'a', 'img'];
const ALLOWED_ATTRIBUTES = {
'a': ['href', 'title'],
'img': ['src', 'alt'],
};
function sanitizeHtmlInput(input) {
return sanitizeHtml(input, {
allowedTags: ALLOWED_TAGS,
allowedAttributes: ALLOWED_ATTRIBUTES,
});
}
/* Installer via dotnet :
dotnet add package HtmlSanitizer */
using Ganss.Xss;
public static string SanitizeHtml(string input)
{
var sanitizer = new HtmlSanitizer();
sanitizer.AllowedTags.Clear();
foreach (var tag in new[] { "b", "i", "u", "strong", "em", "p", "br", "ul", "ol", "li", "a", "img" })
sanitizer.AllowedTags.Add(tag);
sanitizer.AllowedAttributes.Clear();
sanitizer.AllowedAttributes.Add("href");
sanitizer.AllowedAttributes.Add("title");
sanitizer.AllowedAttributes.Add("src");
sanitizer.AllowedAttributes.Add("alt");
return sanitizer.Sanitize(input);
}
/* Installer via Gradle :
implementation 'org.jsoup:jsoup:1.17.2' */
import org.jsoup.Jsoup;
import org.jsoup.safety.Safelist;
public static String sanitizeHtml(String input) {
Safelist safelist = new Safelist()
.addTags("b", "i", "u", "strong", "em", "p", "br", "ul", "ol", "li", "a", "img")
.addAttributes("a", "href", "title")
.addAttributes("img", "src", "alt");
return Jsoup.clean(input, safelist);
}
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.17.2</version>
</dependency>
- Utilisez les en-têtes de politique de sécurité du contenu (CSP).
header("Content-Security-Policy:
default-src 'self';
script-src 'self';
style-src 'self' 'unsafe-inline' https://fonts.googleapis.com;
img-src 'self' data: https:;
font-src 'self' https://fonts.gstatic.com;
connect-src 'self';
frame-src 'none';
object-src 'none';
");
# Avec Flask
@app.after_request
def set_csp(response):
response.headers['Content-Security-Policy'] = (
"default-src 'self'; "
"script-src 'self'; "
"style-src 'self' 'unsafe-inline' https://fonts.googleapis.com; "
"img-src 'self' data: https:; "
"font-src 'self' https://fonts.gstatic.com; "
"connect-src 'self'; "
"frame-src 'none'; "
"object-src 'none';"
)
return response
# Django (middleware.py) :
# pip install django-csp
class CSPMiddleware:
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
response = self.get_response(request)
response['Content-Security-Policy'] = (
"default-src 'self'; "
"script-src 'self'; "
"style-src 'self' 'unsafe-inline' https://fonts.googleapis.com; "
"img-src 'self' data: https:; "
"font-src 'self' https://fonts.gstatic.com; "
"connect-src 'self'; "
"frame-src 'none'; "
"object-src 'none';"
)
return response
# Ensuite, l'enregistrer dans settings.py :
MIDDLEWARE = [
'yourapp.middleware.CSPMiddleware',
...
]
- Échappez les sorties dans les contextes HTML, JavaScript et CSS.
- Utilisez des frameworks qui gèrent automatiquement la protection XSS.
Test d'intrusion fichiers
Saviez-vous que permettre le téléversement de fichiers dans votre application web peut entraîner des vulnérabilités de sécurité ?
Test d'intrusion fichiers
Dans une application web qui permet le téléversement de fichiers, vous pourriez essayer de téléverser un fichier malveillant pour tester les vulnérabilités. Par exemple, vous pourriez essayer de téléverser un fichier .htaccess ou un script shell.
Exemple d'un fichier .htaccess malveillant qui pourrait être utilisé pour tester des vulnérabilités :
Options -Indexes -ExecCGI
Order deny,allow
Deny from all
<Files "*">
Order deny,allow
Deny from all
</Files>
Protégez votre application web
Pour protéger votre application web des vulnérabilités de téléversement de fichiers, tenez compte des meilleures pratiques suivantes :
- Validez les types et tailles de fichiers. Acceptez les types de fichiers définis plutôt que de bloquer les types inconnus.
- Stockez les fichiers téléversés en dehors de la racine web.
- Renommez les fichiers téléversés pour éviter l'écrasement et l'exécution de scripts. Par exemple, renommez ".htaccess" en "my-download-001.bin"
- Définissez des permissions appropriées sur les fichiers et répertoires téléversés.
- Utilisez un antivirus pour analyser les fichiers téléversés.
Tables arc-en-ciel
Saviez-vous que les tables arc-en-ciel sont des tables précalculées pour inverser les fonctions de hachage cryptographique ? Elles peuvent être utilisées pour craquer des hachages de mots de passe.
Tables arc-en-ciel
Dans une application web qui stocke des hachages de mots de passe, vous pourriez essayer d'utiliser une table arc-en-ciel pour craquer les hachages. Par exemple, vous pourriez utiliser une table arc-en-ciel pour craquer des hachages MD5.
Exemple d'un hachage MD5 : 5f4dcc3b5aa765d61d8327deb882cf99
Ce hachage correspond au mot de passe "password".
Par exemple, vous pouvez fournir un hachage et voir s'il peut être déchiffré ici : Recherche de hachage MD5
Protégez votre application web
Pour protéger votre application web des attaques par tables arc-en-ciel, tenez compte des meilleures pratiques suivantes :
- Utilisez un algorithme de hachage robuste (ex. : bcrypt, Argon2) avec un sel unique pour chaque mot de passe.
- Implémentez des mécanismes de limitation de débit et de verrouillage de compte pour prévenir les attaques par force brute.
- Sensibilisez les utilisateurs à la création de mots de passe forts et uniques.
- Une façon de définir un mot de passe est d'utiliser une phrase plutôt que des caractères aléatoires, par exemple : "Regardezcequejaifaitaujourdhuichezmoicestaitsuper !"
Dictionnaires de force brute
Saviez-vous que les attaques par force brute peuvent être effectuées à l'aide de listes de dictionnaires de mots de passe courants ?
Dictionnaires de force brute
Voici un lien vers un dictionnaire : évitez de stocker des mots de passe correspondant à cette liste :
Protégez votre application web
Pour protéger votre application web des attaques par force brute, tenez compte des meilleures pratiques suivantes :
- Implémentez des mécanismes de verrouillage de compte après un certain nombre de tentatives de connexion échouées.
- Utilisez des CAPTCHAs pour empêcher les tentatives de connexion automatisées.
- Encouragez les utilisateurs à créer des mots de passe forts et uniques et envisagez d'implémenter des exigences de robustesse des mots de passe.
- Utilisez l'authentification multi-facteurs (MFA) pour ajouter une couche de sécurité supplémentaire.
- Vous pourriez également vérifier que le mot de passe n'existe pas dans les fichiers de dictionnaire.
Bombes fork
Saviez-vous qu'une bombe fork est une attaque par déni de service contre un système informatique ? Elle fonctionne en créant un grand nombre de processus très rapidement, ce qui peut saturer le système et le rendre non réactif.
Bombes fork
Dans une application web qui permet l'exécution de code, vous pourriez essayer d'exécuter une bombe fork pour tester des vulnérabilités. Par exemple, vous pourriez utiliser la commande suivante (en bash : macos ou linux) :
:(){ :|:& };:
La commande ci-dessus définit une fonction qui s'appelle elle-même deux fois, créant une croissance exponentielle des processus.
Pour PowerShell :
function Fork-Bomb {
while ($true) {
Start-Job -ScriptBlock { Fork-Bomb }
}
}
Ligne de commande MS :
@echo off
:start
start %0
goto start
Protégez votre application web
Pour protéger votre application web des attaques par bombe fork, tenez compte des meilleures pratiques suivantes :
- Limitez le nombre de processus qu'un utilisateur peut créer.
#Via la stratégie de groupe :
# Win + R → gpedit.msc
# Configuration de l'ordinateur → Paramètres Windows → Paramètres de sécurité → Stratégies locales → Attribution des droits utilisateur
# Trouvez "Augmenter la priorité de planification" et restreignez les utilisateurs
# Limiter les processus pour un utilisateur spécifique en utilisant des objets de travail
# Nécessite des outils tiers comme Process Lasso ou SysInternals pour les limites par utilisateur
# Windows n'a pas de limite de processus par utilisateur native comme Linux — utilisez Process Lasso ou SysInternals PsExec pour un contrôle granulaire.
# Contenu du fichier /etc/security/limits.conf :
# Nombre maximum de processus par utilisateur
username hard nproc 100
# Ou pour tous les utilisateurs
* hard nproc 100
# Temporairement dans le shell :
ulimit -u 100
# Vérifier dans le shell :
ulimit -u
# Modifier /etc/launchd.conf (ancienne macOS) ou utiliser launchctl :
# Vérifier les limites actuelles
launchctl limit maxproc
# Définir la limite
sudo launchctl limit maxproc 100 200
# (limite souple 100, limite stricte 200)
# Ou via /etc/sysctl.conf :
kern.maxprocperuid=100
sudo sysctl -w kern.maxprocperuid=100
- Implémentez une surveillance et des alertes pour les activités de processus inhabituelles.
- Sensibilisez les utilisateurs aux dangers de l'exécution de code non fiable.

