2010-04-16 6 views
7

J'ai un fichier php sur mon site, et je me connecte à DB, obtenir des enregistrements et les lister dans le même fichier.morceau de code PHP pour empêcher le piratage

mysql_connect("localhost", "blabla", "blabla") or die(mysql_error()); 
mysql_select_db("blabla") or die(mysql_error()); 

$blabla1 = mysql_query("SELECT * FROM gallery WHERE id_cat=1"); 
$blabla2 = mysql_query("SELECT * FROM gallery WHERE id_cat=2"); 
$blabla3 = mysql_query("SELECT * FROM gallery WHERE id_cat=3"); 

Alors, y a-t-il quelque chose que je dois faire pour la sécurité? Comme l'injection sql ou toute autre chose. il n'y a rien à faire. C'est juste www.blabla.com/gallery.php.

Répondre

10

Cet extrait est parfaitement sûr, car il n'y a pas de variables dans la chaîne de requête.

Pour travailler en toute sécurité si vous devez traiter des variables un jour - qu'elles viennent directement de l'utilisateur ou d'une autre source de données - vous pouvez passer à une bibliothèque mySQL supportant les requêtes paramétrées, comme PDO . Ceux-ci éliminent complètement le danger des injections, car ils prennent soin d'échapper automatiquement les données entrantes.

Si vous restez avec les mysql_* fonctions, assurez-vous échapper tous entrants des données à l'aide mysql_real_escape_string()et assurer qu'ils sont insérés dans une paire de guillemets simples.

+1

Vous continuez à répéter la même erreur encore et encore. pas de données entrantes, mais des données. –

+1

@Col vous avez raison. Corrigée. –

+1

pas de données mais seulement des données qui vont être placées entre guillemets :) Ce sont des règles simples mais tout le monde en oublie une partie. C'est pourquoi l'utilisation inconditionnelle de requêtes paramétrées est considérée comme une meilleure pratique. –

4

Tant que vos requêtes n'utilisent pas de paramètres, l'injection SQL n'est pas un risque. SQL Injection ne peut arriver que lorsque les utilisateurs (ou autres sources) peuvent influencer tout ce qui est envoyé à la base de données en SQL, par exemple searchwords

+0

Injection En fait SQL ne peut se produire lorsque le ** programmeur ** ne suit pas les règles de syntaxe simples.Et les injections SQL n'ont rien à voir avec l'utilisation de l'utilisateur –

+5

Comment effectuer une injection sql sans userinput? –

+0

@Col. Schrapnel: Un développeur doit toujours désinfecter tous les paramètres avant de l'utiliser dans une requête. Il est vrai que les données peuvent également provenir d'une autre source (par exemple un fichier sur le disque dur) – Jasper

2

Il n'y a pas de problèmes de sécurité ici. L'injection SQL peut se produire lorsque vous recevez des entrées de l'utilisateur et que vous l'utilisez dans vos requêtes.

1

Cet extrait est sécurisé, car aucune entrée n'est fournie par l'utilisateur dans les requêtes.

Si vous avez un utilisateur, par exemple en obtenant la catégorie qui doit être affichée à partir de l'URL ou du POST, vous devez utiliser des instructions préparées. cela peut vous être sûr même avec l'entrée de l'utilisateur. C'est beaucoup plus sûr que l'échappement pur car le sql est analysé et ensuite les paramètres sont insérés. Cela est meilleur pour les performances et l'utilisateur ne peut pas modifier la structure de la requête SQL.

2

Si la table gallery contient une entrée utilisateur, une attaque XSS peut être effectuée. Pour éviter cela, toutes les entrées utilisateur non fiables doivent être préparées en utilisant la fonction htmlspecialchars() avant d'imprimer dans le navigateur.

0

La seule chose que vous pouvez envisager, en supposant que le code de connexion est dans le script PHP accessible sur le Web, est soit:

  1. déplacer la connexion MySQL sur le script et en un fichier en dehors de le document de votre site racine

  2. ou, utiliser des variables en externe provenant (c.-à-partir d'un fichier différent en dehors de la racine du document) pour le nom d'utilisateur et mot de passe à la place de détails codés en dur dans le script

De cette façon, si, pour une raison quelconque le serveur affiche le code au lieu de rendre le PHP, puis les détails restent à l'abri de vue

Questions connexes