Je viens de créer un script qui récupère les e-mails d'IMAP et stocke le titre et le contenu dans la base de données.
Bien sûr, je ne veux pas sauvegarder ces informations sans un chèque; Je suis un peu paranoïaque mais je pense qu'il serait possible de faire une attaque MySQL-Injection-Attack, si je stocke le titre et le contenu de l'e-mail sans vérifier.
Maintenant ma question: comment puis-je stocker ces informations? Existe-t-il des méthodes Joomla-On-Board pour vérifier le contenu?
Merci d'avance :-)
Pour éviter les attaques par injection MySQL, vous pouvez devoir échapper et citer correctement des caractères spéciaux. Par exemple:
$query = 'SELECT * FROM #__table WHERE ' . $db->quoteName( $field-name ) . '=' . $db->quote( $field-value );
Référence: Directives de codage sécurisé
En plus de citer correctement les données sous Anibal, vous pouvez utiliser JFilterInput->clean()
pour nettoyer les différentes entrées. Cela est particulièrement utile si vous vous attendez à ce que les données soient d'un certain format. Donc, si vous vous attendez à ce que le titre du courrier soit une simple chaîne sans rien d’extraordinaire, vous pouvez utiliser
$filter = JFilterInput::getInstance();
$title = $filter->clean($title, 'STRING');
Extrait du docblock parmi les filtres disponibles:
INT: An integer,
UINT: An unsigned integer,
FLOAT: A floating point number,
BOOLEAN: A boolean value,
Word: A string containing A-Z or underscores only (not case sensitive),
ALNUM: A string containing A-Z or 0-9 only (not case sensitive),
CMD: A string containing A-Z, 0-9, underscores, periods or hyphens (not case sensitive),
BASE64: A string containing A-Z, 0-9, forward slashes, plus or equals (not case sensitive),
STRING: A fully decoded and sanitised string (default),
HTML: A sanitised string,
ARRAY: An array,
PATH: A sanitised file path,
TRIM: A string trimmed from normal, non-breaking and multibyte spaces
USERNAME: Do not use (use an application specific filter),
RAW: The raw string is returned with no filtering,
unknown: An unknown filter will act like STRING. If the input is an array it will return an
array of fully decoded and sanitised strings.