Comment puis-je prévenir l'injection SQL, PYTHON-DJANGO?
Si un lamer entrée est insérée dans une requête SQL directement, l'application devient vulnérable à l'injection SQL, comme dans l'exemple suivant:
dinossauro = request.GET['username']
sql = "SELECT * FROM user_contacts WHERE username = '%s';" % username
À déposer les tables ou quoi que ce soit -- la requête:
INSERT INTO table (column) VALUES('`**`value'); DROP TABLE table;--`**`')
Que peut-on faire pour éviter cela?
Puis-je vous demander pourquoi vous manuellement l'écriture de requêtes sql au lieu d'utiliser django Modèles?
L'ORM de django, en dehors de
L'ORM de django, en dehors de
raw
et extra
échappera à vos questions pour vous. Voir le sécurité docs.OriginalL'auteur Jayron Soares | 2013-12-09
Vous devez vous connecter pour publier un commentaire.
Tout d'abord, vous devriez probablement juste de l'utilisation L'ORM de Django, il permettra d'éviter toute possibilité d'injection SQL.
Si pour une raison quelconque vous ne pouvez pas ou ne voulez pas, alors vous devriez utiliser Python API de Base de données. Ici est la façon dont vous le faites habituellement que dans Django:
Vous pouvez également utiliser maniable paquet python pour réduire le passe-partout:
OriginalL'auteur Suor
Si vous utilisez
.extra()
la syntaxe est la suivante:De répéter ici de cette réponse que c'est dur à trouver, et l' docs que dire
"you should always be careful to properly escape any parameters"
ne vais pas en dire comment pour échapper correctement!OriginalL'auteur Chris
De la Django Docs:
OriginalL'auteur cstrutton