4 votes

La multiplication par 1 est-elle un moyen sûr de nettoyer les valeurs numériques contre les injections sql ?

Si j'ai une valeur dont je sais qu'elle doit être numérique, la multiplier par 1 est-elle une méthode sûre pour la nettoyer ?

function x($p1){
   $p1*=1;
   sql="select * from t where id ={$p1}";
   //run query..
}

Bien que mon exemple utilise un ID, celui-ci est utilisé pour de nombreux types de valeurs numériques que j'ai dans mon application (peut être de l'argent, peut être du pai, etc.).

2voto

GordonM Points 14008

Je ne vois pas pourquoi ça ne le serait pas. Mais qu'y a-t-il de mal à utiliser des déclarations préparées ? C'est toujours plus sûr que d'utiliser les variables PHP directement dans les instructions SQL.

2voto

ilhan Points 1923

Vous pouvez utiliser is_numeric()

0voto

druciferre Points 1330

Je suis sûr qu'il existe un moyen plus "approprié", mais pour le champ de votre question, je dirais oui. Si une sorte de chaîne est passée, PHP l'interprétera comme un zéro lors de l'opération mathématique.

0voto

Amir Raminfar Points 17939

Vous pouvez également utiliser is_int()

0voto

Zach Rattner Points 5849

Même si ça va probablement marcher, intval semble être une meilleure solution. http://php.net/manual/en/function.intval.php . Votre intention sera probablement plus évidente pour quelqu'un d'autre qui lit votre code.

Si vous voulez vérifier si une valeur est numérique avant de la convertir en un int, utilisez is_numeric ( http://php.net/manual/en/function.is-numeric.php ). Il vérifiera les chaînes de caractères numériques ainsi que les entiers. Par exemple, si un nombre revient d'un formulaire de saisie de texte via AJAX, il peut s'agir d'une chaîne. Dans ce cas, is_int retournerait faux, mais is_numeric retournerait vrai.

EDIT

Maintenant que je sais que vous utilisez DECIMAL pour le type de colonne MySQL, vous pouvez faire quelque chose comme ceci :

function getItem($pValue)
{

    if (!is_numeric($pValue))
    {
        return false;
    }

    $Query = sprintf
    (
        'SELECT * FROM %s WHERE %s = %.2f',
        'TableName',
        'Price',
        $pValue
    );
    // Do something with $Query
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X