2010-12-13 3 views
2

Je suis dans l'idée de démarrer un site à partir de zéro en utilisant PHP & MYSQL en utilisant MVC Architecture. Mais selon les exigences du client, le site doit être empêché de SQL INJECTION et CODE INJECTION.Comment empêcher un site de SQL INJECTION

Quelles sont les étapes nécessaires que je dois faire.

OU

Quel est le meilleur cadre pour démarrer le site qui empêche de SQL injection et injection de code.

Je n'ai pas demandé cela pour créer une discussion en gardant à l'esprit. Je veux juste savoir lequel est le meilleur pour que je puisse commencer avec des conseils professionnels.

merci j'avance ...

Répondre

3

échapper à toute entrée de $_GET[], $_POST[] etc avec mysql_real_escape_string() tout de suite.

1

Utilisez mysql_real_escape_string lors de la transmission de paramètres de chaîne pour générer des instructions SQL. Cela inclut des paramètres numériques, etc., que vous gérez en tant que chaînes.

0

utilisation mysql_real_escape_string

+0

Pourquoi le downvote? –

+0

Je ne sais pas non plus. Pourquoi? –

5

De loin le moyen le plus fiable pour éviter l'injection SQL est d'utiliser des requêtes paramétrées mysqli exclusivement au lieu de construire des instructions SQL manuellement.

C'est beaucoup mieux que mysql_real_escape_string() car le risque d'oublier accidentellement de l'utiliser est plus faible.

Pour éviter l'injection de code côté serveur, ne jamais en aucun cas utiliser eval()

Pour éviter l'injection Javascript, traiter tout le contenu généré par l'utilisateur avec strip_tags() avant de l'afficher ou le stocker dans la base de données.

+1

J'ai mis à jour, mais gardez à l'esprit que strip_tags ne vous protégera pas des attaques XSS. Considérez htmlenitites et si vous envisagez de placer l'entrée dans l'attribut d'une balise, créez également une entité pour '(que htmlentities n'attrapera pas, mais peut échapper à vos attributs) remplacez tout simplement par ' – DampeS8N

3

Ces deux fonctions vous aideront à:

function escape($escape) 
{ 
    $escape = mysql_real_escape_string($escape) ; 
    return $escape ; 
} 

function _INPUT($name) 
{ 
    if ($_SERVER['REQUEST_METHOD'] == 'GET') { 
     return strip_tags($_GET[$name]); 
     } 
    if ($_SERVER['REQUEST_METHOD'] == 'POST') { 
     return strip_tags($_POST[$name]); 
     } 
} 

Envoyer tout avec fonction d'échappement() pour db et de saisir toutes les formes avec _INPUT(). Vous pouvez utiliser la fonction _INPUT pour chaque $ _POST ou $ _GET sauf pour les fonctions booléennes telles que empty ($ _ POST ['name']) ou isset ($ _ POST ['name']) etc.

0

La meilleure façon de procéder est d'utiliser des instructions préparées, sans exception. Cela vous évitera de devoir coder à la main et d'équilibrer tout par vous-même. Le mysqli de PHP a ceci intégré dedans et est un bon premier pas dans ce monde. Regardez le PHP manual page à ce sujet.

0

Après tous les bons conseils donnés ici pour échapper vos données d'utilisateur avant de le mettre dans la base de données, vous devez penser comme au second côté du problème.

échapper à la ouptuts

Cela signifie que chaque sortie de votre demande doit être échappé en fonction de la règle de ce format de sortie. Par exemple, lorsque vous renvoyez quelque chose à une page HTML, vous devez l'échapper via htmlentites, de sorte que tout HTMl conservé dans vos données ne soit pas html dans la sortie. Et pour une sortie csv vous devriez échapper des guillemets ou des virgules, pour JSON vous devriez aussi échapper à des choses, etc chaque sortie a ses règles. Cette chose est parfois utilisée pour stocker des données potentiellement dangereuses (code js, code html) dans le DB, en empêchant seulement l'injection SQL avant l'insertion. Et puis s'assurer qu'il est correctement échappé avant toute sortie.

Une autre façon de penser est d'empêcher tout code js ou HTML avant le stockage de la base de données, mais vous devriez toujours échapper la sortie (en cas de). En ce qui concerne les frameworks, vous devriez jeter un oeil à Zend Framework sur Zend_Filter, Zend_Validate, et les fonctions d'échappement sur les vues.

Questions connexes