web-dev-qa-db-fra.com

Filtrer les chaînes avant de les enregistrer dans la base de données

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 :-)

3
MyFault

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é

4
Anibal

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.
4
Bakual