Question:
L'injection SQL a 17 ans. Pourquoi est-ce toujours là?
Ishan Mathur
2016-06-27 10:13:09 UTC
view on stackexchange narkive permalink

Je ne suis pas un technicien et j'aimerais votre expertise pour comprendre cela. J'ai récemment lu un article détaillé sur SQLi pour un article de recherche.

Cela me semble étrange. Pourquoi tant de violations de données se produisent-elles encore par injection SQL? N'y a-t-il pas de solution?

Les commentaires ne sont pas destinés à une discussion approfondie;cette conversation a été [déplacée vers le chat] (http://chat.stackexchange.com/rooms/41748/discussion-on-question-by-ishan-mathur-sql-injection-is-17-years-old-why-est-ce).
Vous savez que le paludisme est toujours là, non?et cela tue des gens.
Les exploits de débordement de tampon existent depuis * plus de 30 ans *, mais ils sont toujours d'actualité, malgré le fait que ce n'est vraiment pas si difficile à corriger pour les vendeurs.
Je demanderais la même chose à propos de SQL.
Les clients non avertis en technologie ne paieront tout simplement pas pour les changements de code tant qu'ils ne verront pas quelque chose de mauvais se produire qui nuit à leur résultat net: "Ce n'est pas dans le budget!", "Je ne vois pas le problème, cela fonctionne bien ces 15 dernières années". Ils ne savent pas qu'ils ont été piratés via injection SQL car ils ne vérifient jamais les journaux de leur serveur, et le pirate n'est jamais assez gentil pour leur envoyer un email ...
Cueillir les poches des gens est toujours «une chose» après des milliers d'années de pantalon.
Les ceintures de sécurité existent depuis plus de 17 ans et certaines personnes ne les utilisent toujours pas.L'injection SQL sera toujours présente car vous avez des utilisateurs de confiance qui doivent écrire des requêtes directes.Si vous avez des données (utilisateur) non fiables, il existe des outils fiables (préparés / paramétrés) pour les requêtes qui empêchent à 100% l'injection.
À mon avis, cela revient aux utilisateurs (ou aux acheteurs, ce qui est presque la même chose, dans les cas où le logiciel est acheté).Ils sont prêts à payer moins cher pour des déchets bon marché que plus pour des programmes solides.C'est bien plus important que dans l'industrie informatique, bien sûr, mais cela se résume au fait que le temps supplémentaire pour empêcher correctement l'injection SQL n'en vaut pas la peine pour l'entreprise, et ils paient nos chèques de paie.
"N'y a-t-il pas de * correctif *?"le libellé me fait soupçonner une idée fausse: SQLi n'est pas un «bogue» qui doit être * corrigé. * La question pourrait être reformulée comme suit: «Pourquoi un moyen 100% infaillible et automatisé de bloquer SQLi n'a-t-il pas été développé?La réponse est qu'il n'y a pas de moyen automatisé et infaillible à 100% pour distinguer le SQL légitime du SQL illégitime.Seul le concepteur d'une application saura si le texte soumis doit autoriser SQL ou non.C'est donc au concepteur de mettre en œuvre les différentes protections mentionnées dans les autres réponses.
Seize réponses:
Steffen Ullrich
2016-06-27 10:25:48 UTC
view on stackexchange narkive permalink

Il n'y a pas de correctif général pour SQLi car il n'y a pas de correctif pour la stupidité humaine. Il existe des techniques établies qui sont faciles à utiliser et qui résolvent les problèmes (en particulier la liaison de paramètres) mais il faut encore utiliser ces techniques. Et de nombreux développeurs ne sont tout simplement pas conscients des problèmes de sécurité. La plupart se soucient que l'application fonctionne du tout et ne se soucient pas beaucoup de la sécurité, surtout si cela rend les choses (même légèrement) plus complexes et entraîne des coûts supplémentaires comme les tests.

Ce type de problème ne se limite pas à SQLi mais vous le trouverez avec des dépassements de tampon, la vérification des certificats, XSS, CSRF .... Il est plus coûteux de faire une programmation sécurisée en raison des tests supplémentaires et de l'expertise supplémentaire requise par le développeur (donc plus coûteux). Et tant que le marché le préfère bon marché et ne se soucie pas beaucoup de la sécurité, vous obtenez des solutions bon marché et peu sûres. Et bien que la sécurité dès la conception aide beaucoup à l'améliorer, les développeurs contournent souvent cette conception parce qu'ils ne la comprennent pas et que c'est juste sur leur chemin.

Manque de conscience et paresse ...
"Il n'y a pas de solution générale pour SQLi car il n'y a pas de solution pour la stupidité humaine."C'est une belle citation!
Il existe des correctifs généraux pour sqli, tout comme il existe des correctifs pour les débordements de tampon, ils impliquent de travailler sur des constructions de niveau supérieur qui ne permettent pas que cela se produise.Travailler avec la plupart des langages gérés corrige les débordements de tampon, des techniciens comme linq corrigent sqli.Sqli sera là aussi longtemps que les gens utiliseront directement sql mais c'est déjà parti pour ceux qui le veulent
Ce n'est pas toujours de la bêtise humaine (du moins pas de la part du développeur)!Je connais de nombreuses entreprises brésiliennes qui font un tatic bon marché ici: ils embauchent au lieu de développeurs à part entière, ils embauchent un groupe de stagiaires pour éviter les impôts et payer moins leurs employés.Et ce sont de grandes entreprises!Ces juniors n'ont encore aucune connaissance (certains d'entre eux sont au premier semestre de leurs études) ou même conscience de ces problèmes, et se voient confier la responsabilité de construire des systèmes qui seront, bien sûr, défectueux.J'ai trop vu cela ici.Je pourrais même donner 5 à 6 noms.C'est vraiment triste.
@Malavos: Je ne veux pas nécessairement dire la stupidité du développeur.Embaucher des développeurs en fonction du salaire plutôt que des connaissances est également stupide.
** Les commentaires ne sont pas destinés à une discussion approfondie **;cette conversation a été [déplacée vers le chat] (http://chat.stackexchange.com/rooms/41757/discussion-on-answer-by-steffen-ullrich-sql-injection-is-17-years-old-why-est-ce).
"parce qu'il n'y a pas de solution pour la stupidité humaine" Alors pourquoi les humains sont-ils toujours là?
@Malavos Je partage votre sentiment.J'ai perdu le compte sur le nombre de systèmes que j'avais à réparer et qui avaient été construits par «ce stagiaire qui travaillait ici avant».En tant qu'autre développeur brésilien, je peux également affirmer que cela se produit partout dans ce pays!
@Turion, lui donne [un peu plus de temps] (https://books.google.com/books?hl=fr&lr=&id=gUXgpH6nizIC).Il est [3 minutes à minuit] (http://thebulletin.org/timeline)
L'injection n'est pas un échec d'un langage ou d'une plateforme;c'est un échec d'un programmeur.Vous ne pouvez pas résoudre les problèmes des personnes avec des solutions technologiques (bien que vous puissiez les couvrir, par exemple, les requêtes paramétrées peuvent couvrir les vulnérabilités d'injection).
Je pense que la comparaison avec certaines maladies fonctionne de la manière que, bien que l'obtention de SQLi soit possible ET fréquente, il existe des moyens bien connus pour l'éviter.N'est-ce pas une vulnérabilité que vous «obtenez» d'un mauvais téléchargement, puis votre système meurt.Vous pouvez éviter de nombreuses maladies en suivant certaines directives, mais les gens tombent encore malades en ne se lavant pas les mains ou en ne cuisinant pas correctement les aliments.
Tant qu'il n'y a pas de feu, il est bon de ne pas ignifuger votre maison.
mais..il pourrait être corrigé en n'ayant pas SQL
La stupidité humaine est réglée par la mort.
TessellatingHeckler
2016-06-27 22:10:40 UTC
view on stackexchange narkive permalink

Parce que ce n'est pas un problème.

  • À quand remonte la dernière fois qu'une entreprise avec une vulnérabilité d'injection SQL a été traînée devant le tribunal et giflée d'une grosse amende pour avoir été imprudente avec les données des utilisateurs et les administrateurs avertis, condamnés à une amende ou enfermés pour négligence?

  • À quand remonte la dernière fois qu'une entreprise a perdu un gros contrat parce que sa page de connexion au site Web de l'entreprise ne l'a pas fait valider correctement les mots de passe?

  • À quand remonte la dernière fois qu'un régulateur / auditeur qualifié d'une organisation professionnelle a dû approuver et approuver un système informatique public avant qu'il puisse être mis en service ?

On pourrait penser que «les gens vont mourir» serait une raison suffisante pour construire des bâtiments avec des matériaux ignifuges, des alarmes et de bonnes voies d'évacuation. Ce n'était pas. Nous avons introduit une réglementation pour forcer les matériaux de construction ininflammables, des conceptions de sécurité incendie avec des coupe-feu, des alarmes d'incendie.

Vous pourriez penser que "des gens vont mourir" serait une raison suffisante pour inciter tout le monde se soucient de la conception structurelle du bâtiment. Ce n'est pas. Ce n'est tout simplement pas. Nous devons avoir une réglementation pour que les ingénieurs qualifiés approuvent la conception des bâtiments, qu'ils soient conçus et construits pour des utilisations spécifiques, et lorsque les choses échouent, la société poursuit les ingénieurs en justice.

On pourrait penser que "les gens vont mourir" serait une raison suffisante pour rendre la transformation des aliments propre et sûre, mais ce n'était pas le cas.

L'injection SQL est moins évidente, moins visible publiquement, et a moins d'impact sur la gravité, et est dans une industrie complètement non réglementée.

Même les entreprises qui s'en soucient, elles ne peuvent pas annoncer utilement " Aucune vulnérabilité d'injection SQL connue dans notre code " comme une puce marketing qui intéresse tout le monde. Ce n'est pas le genre de question que les clients posent aux vendeurs. Ce n'est pas un avantage concurrentiel pour eux, c'est un coût, des frais généraux. Se protéger contre cela les rend moins compétitifs, plus lents, faisant plus de travail pour la même fonctionnalité.

Les incitations sont toutes alignées pour qu'il continue d'exister. Donc, cela continue d'exister.

Faites de l'injection SQL un problème pour les entreprises, et elles le feront disparaître.

[Edit: Mais il existe une réglementation de l'UE selon laquelle les sites Web doivent vous avertir s'ils utilisent des cookies. Et ils le font. Donc, réglementer les systèmes informatiques destinés au public pour les rendre plus ennuyeux peut entrer en vigueur - même si la réglementation actuelle est assez inutile.]

Les commentaires ne sont pas destinés à une discussion approfondie;cette conversation a été [déplacée vers le chat] (http://chat.stackexchange.com/rooms/41860/discussion-on-answer-by-tessellatingheckler-sql-injection-is-17-years-old-why-i).
Je me demande quand le moment viendra pour l'introduction d'une législation relative à l'informatique
Faites attention à ce que vous souhaitez pour @prusswan.Aux États-Unis, au moins, la grande majorité des lois de réglementation de la technologie qui sont en place ou qui ont été tentées ont été mises en place par des lobbyistes avec peu ou pas de compréhension de la situation dans son ensemble.
eh bien, certaines lois valent mieux qu'aucune législation
@prusswan Je réfute ainsi votre argument: aucune législation n'est meilleure qu'une mauvaise législation.
Les [lois sur les notifications de violation de sécurité] (https://en.wikipedia.org/wiki/Security_breach_notification_laws) sont des problèmes d'entreprise.
@prusswan, il existe des lois.Regardez dans HIPPA par exemple.
@prusswan Vraiment?Vous préférez avoir * une * législation plutôt que pas de législation?Et si cette législation exigeait que votre cryptage ait une porte dérobée?Et si cette législation vous obligeait à utiliser md5 pour tout hachage?Et si cette législation vous obligeait à conserver tous les mots de passe en texte clair, non hachés et non salés?Êtes-vous * absolument sûr * que * certaines lois * valent mieux que * aucune législation *?
aucune législation ne donne l'idée que la profession dans son ensemble est réticente à accepter ses responsabilités et ne peut être prise plus au sérieux.Si la législation est mauvaise, corrigez-la, ou mieux encore, présentez une bonne législation avant que quelqu'un d'autre ne fasse entrer la mauvaise.
HIPAA est lié à la santé, donc tout le reste est un jeu équitable?
en quelques mots: préférez-vous écrire votre propre SQL ou laisser Trump l'écrire pour vous?
Luis Casillas
2016-06-27 10:49:40 UTC
view on stackexchange narkive permalink

L'injection SQL est toujours d'actualité car le monde du logiciel ne comprend toujours pas que la génération programmatique de valeurs structurées en arborescence (comme les requêtes ou le balisage) doit être effectuée en construisant des arbres de syntaxe en tant qu'objets de première classe , pas en concaténant des chaînes qui représentent des fragments d'un langage.

Il y a eu un peu de progrès ces dernières années avec la disponibilité croissante des outils de création de requêtes comme LINQ to SQL ou SQLAlchemy, mais c'est du côté du langage de programmation. Les bases de données relationnelles n'offrent toujours pas une interface alternative standard et convaincante qui n'est pas fondamentalement basée sur l'envoi de requêtes sous forme de chaînes.

Les instructions préparées avec des paramètres de requête ne sont guère une amélioration, car elles ne sont faciles à utiliser que si le La structure de vos requêtes (quelles tables sont jointes, quelles conditions de filtrage, quelles colonnes projeter) est fixe . Lorsque vous avez une application qui doit créer du texte de requête au moment de l'exécution, les paramètres de requête préparés sont très difficiles à utiliser.

Donc, si un protocole normalisé, non textuel et structuré en arborescence pouvait être construit pour décrire et communiquer des requêtes à la base de données, et qu'il était conçu pour être plus facile à utiliser que les requêtes textuelles, cela résoudrait le problème. problème à long terme. Mais le problème ne disparaîtra pas tant que l’industrie n’aura pas adopté quelque chose où le chemin de moindre résistance est sûr. Tant que nous insistons sur des systèmes non sécurisés par défaut où l'écriture de code sécurisé demande des efforts inutiles, les problèmes seront avec nous. (Pensez à tous les débordements de tampon qui n'existent pas du tout dans les langages gérés en mémoire!)


Notez que le même problème fondamental que l'injection SQL sévit sur le Web, sous le nom de cross-site scripting - qui n'est en réalité qu'une injection Javascript dans des pages HTML dynamiques. Un modèle très courant est celui des programmeurs Javascript qui, au lieu de travailler avec le DOM en le traitant comme un arbre d'objets, ont recours à la propriété innerHTML pour le définir sur du texte HTML construit par concaténation de chaînes naïve. De nombreuses vulnérabilités XSS n'auraient jamais existé si la propriété innerHTML n'avait jamais été placée dans les implémentations DOM des navigateurs.


Aussi, pour les gens qui n'ont pas vu le discours de Tony Hoare sur les pointeurs nuls, il est à la fois orthogonal (pointeurs nuls, pas d'injection SQL) mais en même temps incroyablement pertinent:

** Les bases de données relationnelles n'offrent toujours pas de norme, ... sur l'envoi de requêtes sous forme de chaînes. ** Les bases de données sont accessibles par les réseaux, donc l'API pour générer des requêtes sécurisées est toujours du côté de l'application.De plus, cela les obligerait à mettre en œuvre cette solution dans toutes les langues.Ils ont déjà implémenté des drivers pour communiquer, effectuer des transactions et permettre de faire des requêtes paramétrées plus facilement.Je ne pense pas que nous puissions vraiment demander plus de leur côté.
Les commentaires ne sont pas destinés à une discussion approfondie;cette conversation a été [déplacée vers le chat] (http://chat.stackexchange.com/rooms/41756/discussion-on-answer-by-luis-casillas-sql-injection-is-17-years-old-why-est son).
Je ne pense pas qu'il y aurait quelque chose de mal à utiliser `innerHTML` s'il se limitait à créer des objets anonymes contenant uniquement du texte.Il est beaucoup plus pratique de pouvoir définir un champ sur «Ceci est important : peu importe» plutôt que d'avoir à créer et insérer un objet imbriqué distinct pour le texte en gras.Malheureusement, je ne connais aucun mécanisme pour créer ce genre d'objet agrégé qui serait tout simplement incapable de créer des types d'objets plus «dangereux».
Je ne peux pas assez voter pour cette réponse.Je dis cela depuis des décennies, c'est tellement génial d'entendre au moins une autre personne le dire aussi.
En ce qui concerne les vulnérabilités les plus triviales résultant de l'utilisation naïve de la concaténation de chaînes, elles sont toujours courantes dans le code écrit par des personnes qui ne savent pas ce qu'elles font parce que ** les API les moins sûres n'ont pas été supprimées **.Si l'interface de base de données fonctionne en PHP et dans d'autres langages, supprimait complètement les API à chaîne plate à l'ancienne (brisant des tonnes de code existant), beaucoup de code homebrew écrit par des personnes qui ne savent pas vraiment comment programmer serait un peu plus sûr.
L'existence d'anciens tutoriels enseignant la mauvaise manière est également un problème majeur pour des choses comme PHP, où beaucoup de code est copié et collé par des personnes qui ne le comprennent pas.
Je suis un développeur SQL et je ne suis pas d'accord avec ceci "Lorsque vous avez une application qui a besoin de créer du texte de requête au moment de l'exécution, les paramètres de requête préparés sont très pénibles à utiliser."Il n'est pas plus difficile de créer une requête sécurisée dans un programme qu'à la main.
@PeterCordes L'utilisation des API les plus sûres ne forcera pas les gens à ne pas utiliser la concaténation de chaînes.Comment ça se passerait?Vous pouvez facilement faire `$ db-> buildQuery (" select * from users where username = '$ username' ") -> execute ()` ou similaire.
Je ne suis pas d'accord pour dire que les paramètres sont difficiles à utiliser dans la création de requêtes dynamiques.Ce n'est pas du tout difficile - une fois, nous avons dû développer notre propre solution de type hibernation pour un projet en interne, et les paramètres auxquels l'une des parties les plus faciles doit traiter.
J'aime vraiment sa réponse et je serais vraiment intéressé de voir une telle solution d'arbre syntaxique.Cependant, comme le dit Steffen Ullrich, la stupidité humaine ne connaît pas de limites, alors je parie que des gens construiraient cet arbre de syntaxe en concaténant des chaînes, puis en utilisant le pendentif eval de leur langage préféré pour le transformer en une structure de données réelle.Nous aurions donc deux failles de sécurité béantes là où il n'y en avait qu'une pour commencer.:-(
Nick Gammon
2016-06-27 12:23:35 UTC
view on stackexchange narkive permalink

Lors des tests, il est très facile de tester ce à quoi vous vous attendez . Par exemple, lorsque vous remplissez un champ "nom" dans une base de données, vous choisirez probablement quelque chose que vous connaissez bien, comme "John Doe". Cela fonctionne et votre application semble bien fonctionner.

Puis, un jour, quelqu'un nomme son enfant Robert '); DROP TABLE Étudiants; - (petites tables Bobby).

enter image description here

Bien sûr, vous ne testez pas votre application pour des noms comme celui-là , donc la faille de sécurité qu'un tel nom expose glisse à travers tous vos tests.

Il y a un commentaire intéressant ici: L'infalsifiabilité des revendications de sécurité

C'est Il est facile de prouver qu'il existe une faille de sécurité (il vous suffit de tester un nom comme celui ci-dessus). Il est également facile de prouver qu'un trou particulier a été corrigé. Il est difficile de prouver qu’il n’existe aucune autre faille de sécurité.

Bien qu'il ne couvre pas toutes les injections SQL, le simple fait de tester en utilisant le simple guillemet dans un nom ou le caractère dièse # couvre une part assez importante de la vulnérabilité des applications face à l'injection SQL.
@Walfrat Dommage que `O'Brien` veuille ouvrir un compte.
+1 pour une excellente réponse.Le manque de cas de test appropriés est (à mon humble avis) une meilleure raison que la stupidité humaine ou les erreurs.Il est difficile de prétendre que quelque chose qui est fonctionnellement correct pour les cas de test existants est une "erreur", et ne pas utiliser les meilleures pratiques n'est pas vraiment de la "stupidité" non plus, mais plutôt simplement un manque de connaissance du sujet.Si les cas de test incluaient toujours l'injection SQL, le problème ne se poserait pas aussi souvent et les meilleures pratiques seraient plus probablement respectées.
@MichaelKjörling Le prénom d'O'Brian est-il * Bobby *?Cela pourrait être un problème ...
@MichaelKjörling Je pense que le point @Walfrat's était qu'il est assez facile de faire des tests pour SQLi en incluant simplement l'étrange `` '' dans vos données d'entrée de test.Je ne pense pas qu'il voulait promouvoir les apostrophes de filtrage au niveau de l'application (bien que je puisse voir comment vous pourriez l'interpréter comme tel).
Ma réponse essayait vraiment de répondre à la question: * pourquoi le problème persiste-t-il après 17 ans? * Non: * comment résoudre au mieux l'injection SQL. *
Rien de tel qu'un exemple concret pour expliquer rapidement et clairement un problème.Impossible de voter suffisamment pour CETTE réponse ...
@MichaelKjörling c'est en fait une * raison de plus * pour tester que cela fonctionne avec `` '' dans le nom, pas une de moins.(J'ai récemment eu une boutique en ligne retirant le «+» de mon adresse e-mail. Ils ont dû m'envoyer un courrier papier à la place. Ils auraient également dû être testés.)
En ce qui concerne le dessin animé XKCD, assainir les entrées n'est * pas * la solution: rendre l'entrée dans la base de données, * et * tout traitement des données à l'intérieur de la base de données, car impuissante est la solution.C'est à quoi servent les paramètres SQL et une considération attentive du traitement (par exemple SQL dynamique).Une attitude similaire à l'égard du HTML rendu est également nécessaire.
h4ckNinja
2016-06-27 11:00:32 UTC
view on stackexchange narkive permalink

Steffen fait valoir de bons points dans sa réponse, mais j'aimerais ajouter quelque chose. Le pourquoi, je pense, peut être expliqué dans les sujets suivants:

  • Manque de connaissances ou de formation des développeurs
  • Churn dans un environnement de développement d'entreprise
  • Pression pour livrer plus tôt que prévu
  • Insistance insuffisante du haut sur la sécurité

Alors décomposons-les.

Formation des développeurs

De nos jours, on met beaucoup l'accent sur l'éducation des utilisateurs. Apprenez aux utilisateurs à conserver des mots de passe forts. Apprenez aux utilisateurs à identifier le phishing. Apprenez aux utilisateurs à ... Vous voyez l'idée. Certaines entreprises, probablement beaucoup, mais je ne peux parler que de mon expérience professionnelle et je n'ai pas travaillé dans beaucoup d'entreprises;), ont des programmes de formation. Mais ces programmes de formation peuvent être incomplets ou ne pas atteindre la profondeur des connaissances nécessaires. Il ne s'agit pas de dénigrer le travail acharné qui est nécessaire pour élaborer ces programmes. Mais dire que tout comme en milieu scolaire, différentes personnes apprennent différemment. Et à moins d'avoir un programme de formation continue pour les développeurs, il sera difficile de communiquer "utiliser des requêtes paramétrées, et voici comment le faire en PHP, Java, Python, Ruby, Scala, NodeJS, ...". C'est un travail acharné pour développer, fournir et maintenir des programmes pour développeurs qui atteignent efficacement le public.

Churn des développeurs

Ci-dessus, l'une des choses auxquelles j'ai fait allusion était d'atteindre efficacement le public pour différents types d'apprentissage. L'une des raisons à cela est que beaucoup d'entreprises ont un taux de désabonnement élevé pour les développeurs, car les développeurs sont des entrepreneurs qui passent d'un projet à l'autre dans différentes entreprises. Et les entreprises ne sont pas toujours à la même maturité de sécurité. Une entreprise peut ne pas avoir du tout de programme de sécurité, tandis qu'une autre peut avoir un excellent programme de sécurité et le développeur est soudainement bombardé de nouvelles informations qui lui seront demandées pendant les six mois avant de passer à une autre entreprise. C'est triste, mais cela arrive.

Livraison du projet

Livraison du projet dans les délais, voire en avance sur le calendrier. Le chemin le plus rapide pour terminer le projet n'est généralement pas de terminer le projet avec des contrôles de sécurité. C'est faire de la manière la plus brisée qui fonctionne encore. Nous savons que cela entraînera plus de travail, plus de temps et plus d'argent plus tard quand viendra le temps de maintenir le projet et de résoudre les problèmes, mais la direction veut juste que le projet soit retiré.

Un autre élément que j'ai abordé est développer des programmes de formation à la sécurité pour une myriade de langages de programmation. De nombreuses entreprises n'ont pas une ou deux langues définies. Les développeurs aiment donc (ou sont encouragés) à essayer la nouvelle fonctionnalité. Cela inclut les langages et les frameworks. Cela signifie que les programmes de sécurité doivent évoluer en permanence.

Adhésion de la direction

Et nous voici à la direction. Chaque fois, il semble que dans une violation publique, il y avait des contrôles qui auraient pu être mis en œuvre, qui ne sont pas si difficiles, mais qui ont été manqués. Les pressions pour livrer les produits en premier et les inquiétudes en second lieu toujours, malgré leçon après leçon après leçon, reviennent sur les entreprises de produits. La direction doit pousser du haut pour prendre le temps d'intégrer la sécurité au début. Ils doivent comprendre que plus de travail, plus de temps et plus d'argent seront consacrés à la résolution des problèmes, à l'entretien du produit et au paiement des amendes. Mais les analyses coûts-avantages indiquent que le problème est la livraison des produits, et non les amendes ou les travaux de maintenance nécessaires. Ces équations doivent changer, et cela vient, en partie, de l'éducation (wooo, cercle complet) au niveau du MBA. Les chefs d'entreprise doivent apprendre que pour réussir dans un paysage de failles de plus en plus nombreuses, la sécurité doit être au premier plan.

Conclusion

Le pourquoi, même si SQLi a presque 20 ans , a plusieurs raisons. En tant que praticiens de la sécurité, nous ne pouvons pas faire grand-chose pour éduquer et sensibiliser à ce qui se passe lorsque la sécurité n'est pas considérée comme faisant partie intégrante du SDLC.

"Formation de développeur" ... C'est vrai ... parfois les gens seraient mieux sans cela.Un de mes amis a terminé un cours de Java soi-disant accrédité (quoi que cela signifie) en Allemagne plus tôt cette année.Les stars de la partie SQL du cours?Concaténation de chaînes et méthode appelée `safe ()` qui rendrait les chaînes "sûres" en échappant des guillemets - et uniquement des guillemets.En 5 minutes, j'ai trouvé 2-3 façons différentes de faire SQLi sur l'exemple de code fourni par l'enseignant.Qui sait ce que les outils automatisés de sondage SQLi feraient de cette pile de code ...
Ensuite, ces programmes sont gérés par des personnes incompétentes.Mais cela ne signifie pas que la formation des développeurs ne fonctionne pas.Je l'ai vu fonctionner.Plutôt que de supposer que la formation des développeurs ne fonctionne pas, regardez la raison de son échec.Alors, d'accord ...
J'ajouterais "les vendeurs de DB essayant de tout entasser en un seul appel".Si la manière d'exécuter un SQL est de toujours appeler une fonction qui prend du SQL arbitraire, les développeurs doivent faire beaucoup de travail de sécurité.Les vendeurs pourraient facilement ajouter une fonction (peut-être nommée "sélectionner"?) Qui permet * seulement * * un * * sélectionner * - pas de séparateurs de déclaration, pas de commentaires, pas de "drop", pas de "mise à jour" .... Facile àimplémenté, facile à utiliser, assez sûr et couvre * beaucoup * de ce dont les utilisateurs (en particulier les débutants) ont besoin - donc pourrait réduire considérablement les surfaces d'attaque.
@TextGeek L'intégration entre SQL Server et C # /. NET est assez impressionnante.Vous disposez de plusieurs outils pour utiliser des sélections et des mises à jour sûres et quoi que ce soit - encore, de nombreux développeurs les ignorent et passent tout de suite aux appels non sûrs et génériques "exécutez simplement ce SQL".
David Mulder
2016-06-28 01:01:45 UTC
view on stackexchange narkive permalink

Je suis d'accord avec beaucoup de réponses, mais un point très important n'est pas fait: le code ne se répare pas comme par magie, et il y a beaucoup de code vieux de 17 ans. J'ai vu de nombreuses entreprises écrire un nouveau code propre et sûr, alors que l'application pouvait encore être attaquée dans certaines de ses sections plus anciennes. Et le pire de tout: réparer l'ancien code coûte cher, car cela oblige les développeurs à se plonger dans un code qui a été écrit à une époque différente avec différents styles de codage et différentes technologies. Parfois, réparer un ancien code pour ne pas provoquer d'injections SQL nécessite de recréer des bibliothèques entières qui ont été rachetées dans la journée (c'est quelque chose que j'ai dû faire il y a quelques années).

Pour ne pas dire que tout le nouveau code est exempt d'injections SQL, mais personnellement, je n'ai vu aucun nouveau code écrit par des professionnels au cours des 4 ou 5 dernières années qui les contenait. (La seule exception étant lorsque les développeurs doivent faire une correction rapide et sale dans l'ancien code et utiliser le même style / technologie dans lequel le reste du code est écrit.)

Andy Lester
2016-07-07 00:58:08 UTC
view on stackexchange narkive permalink

Je pense que c'est parce que de nombreux développeurs apprennent juste assez pour faire le travail, pour une certaine valeur de "fait". Ils apprennent à créer du code SQL, souvent à partir de didacticiels en ligne obsolètes, puis lorsque le code "fonctionne" dans la mesure où ils peuvent dire "Je peux mettre des éléments dans la base de données et je peux générer la page de résultats", alors ils êtes satisfait.

Considérez ce type sur l'échelle:

Guy on a dangerous ladder

Pourquoi fait-il ça? Pourquoi n'a-t-il pas un échafaudage approprié? Parce qu'il fait le travail. Mettez l'échelle contre le mur au-dessus des escaliers, et cela fonctionne très bien. Jusqu'à ce que ce ne soit pas le cas.

Même chose avec INSERT INTO users VALUES ($ _ POST ['user']) . Cela fonctionne très bien. Jusqu'à ce que ce ne soit pas le cas.

L'autre chose est qu'ils ne sont pas conscients des dangers. Avec le gars sur l'échelle instable, nous comprenons la gravité et la chute. Avec la création d'instructions SQL à partir de données externes non validées, ils ne savent pas ce qui peut être fait.

J'ai parlé à un groupe d'utilisateurs de développeurs Web le mois dernier, et sur les 15 développeurs de l'audience, deux avaient entendu d'injection SQL.

Bron Davies
2016-06-27 21:10:18 UTC
view on stackexchange narkive permalink

Je pense que la principale raison est que la formation des développeurs ne commence pas par les meilleures pratiques, elle commence par la compréhension du langage. Ainsi, les nouveaux programmeurs, croyant qu'ils ont été formés avec les outils pour créer quelque chose, procèdent à la création des requêtes comme on leur a appris. La prochaine étape, et la plus dangereuse, est de permettre à quelqu'un de développer quoi que ce soit sans examen et donc de continuer à faire des choix plus pauvres sans savoir qu'il y a quelque chose qui ne va pas et de produire de nouvelles habitudes qui ignorent les meilleures pratiques acceptées dans l'ensemble du secteur. Donc, pour résumer - des programmeurs mal formés opérant dans un environnement qui ne valorise rien d'autre que le produit final.

Cela n'a rien à voir avec l'intelligence ou la "stupidité humaine". Il existe une approche systématique qui a été bien définie au fil des ans et il est négligent pour quiconque produit des logiciels d'ignorer ce processus au nom d'une mise en œuvre plus rapide ou moins chère. Peut-être qu'un jour les ramifications juridiques de ce comportement nous permettront d'avoir plus de contrôles en place, comme les industries médicales ou de construction, où le non-respect de ces règles et des pratiques acceptées entraînera la perte de licence ou d'autres sanctions.

D'accord.google "exemples sql" et vous obtiendrez de nombreux exemples d'expressions SQL, dont aucun n'est sûr, car ce ne sont que des chaînes.Si c'est ainsi que vous apprenez à écrire du SQL, c'est ce que vous allez utiliser sur votre premier projet ...
@MarkLakata C'est aussi mon observation.Les nouvelles personnes comptent beaucoup sur Google.Google a tendance à tirer des exemples absolument horribles ... Requêtes dynamiques sélectionnant * pour une colonne parmi des tableaux très larges.C'est ahurissant de voir comment ces horribles exemples SQL continuent de flotter au sommet des recherches Google utilisées par les nouveaux développeurs.
Bob Ortiz
2016-06-27 14:15:16 UTC
view on stackexchange narkive permalink

Pourquoi les vulnérabilités d'injection SQL n'ont-elles pas encore disparu? Métaphoriquement parlant, pour la même raison que les accidents de voiture existent toujours depuis la toute première voiture en 1895 et même les voitures autonomes les plus innovantes et modernes d'aujourd'hui, Tesla modèle S (sur le pilote automatique) ou une voiture autonome Google s'écrase de temps à autre.

Les voitures sont créées (et contrôlées) par des humains, les humains font des erreurs.

Les sites Web et les applications (Web) sont construits par des programmeurs humains. Ils ont tendance à faire de mauvaises erreurs dans la conception de la sécurité ou à casser les choses avec des «correctifs rapides» lorsque quelque chose était sécurisé, mais en introduisant en fait une nouvelle vulnérabilité, par exemple parce que le temps / budget pour développer un correctif était limité, ou le développeur a eu une grande gueule de bois lorsqu'il a écrit le correctif .

Est-ce toujours causé par les développeurs? Essentiellement oui, mais pas toujours par le développeur de première ligne . Par exemple, un supermarché local a demandé à une société de développement Web de créer un site Web pour eux. Les développeurs louent un espace d'hébergement partagé à une société d'hébergement pour héberger le site et ils installent WordPress et quelques plugins utiles.

Désormais, les développeurs de la société de développement Web n'ont pas forcément à se tromper en introduisant une vulnérabilité d'injection SQL pour être vulnérables. Qu'est-ce qui pourrait mal tourner ici? Quelques exemples:

  1. L'hébergeur n'a pas mis à jour vers la dernière version PHP et les versions PHP utilisées se sont révélées vulnérables à SQLi en général.
  2. L'hébergement L'entreprise a configuré des logiciels supplémentaires publics tels que phpMyAdmin et ne l'a pas mis à jour.
  3. La version WordPress utilisée s'avère vulnérable à SQLi mais la mise à jour a été manquée ou il n'y a pas encore de correctif disponible.
  4. Un plugin WordPress utilisé est vulnérable à SQLi.

Maintenant la question qui est soulevée , qui est responsable? Le supermarché, la société de développement Web, la société d'hébergement, la communauté WordPress, les développeurs de plugins WordPress ou l'attaquant qui a abusé de la vulnérabilité, rhétoriquement parlant? - Ce n'est pas une déclaration, c'est exagéré et juste quelques questions qui sont susceptibles d'être posées en cas de problème.

Souvent, la discussion ci-dessus (questions sur la responsabilité, bien que légèrement exagérées) est également un facteur de risque car certains développeurs ont tendance à avoir un "ce n'est pas mon code "-attitude . Vous pouvez imaginer à quel point cela complique parfois la situation.

L'utilisation de Wordpress lui-même doit être considérée comme une vulnérabilité.
La voiture Tesla s'écrase parce que Tesla est une sorte de canon lâche.Pour voir un meilleur exemple, regardez les voitures autonomes de Google.(Tesla a littéralement intégré des capacités de conduite autonome sans le dire à personne, puis l'a tranquillement activé avec une ** mise à jour logicielle **.)
Je ne pense pas que les accidents de voiture soient une bonne comparaison.Depuis 1895, il n'y a aucun moyen de garantir que les accidents de voiture ne peuvent pas se produire, et des progrès ont été réalisés dans la réduction du nombre d'incidents (par exemple, des lignes blanches sur la route, des feux de croisement, une meilleure conception des jonctions et des feux de signalisation) et leur impact (airbags, ceintures de sécurité, zones de déformation).En revanche, l'injection SQL peut être complètement corrigée par un changement de conception, point final.Les voitures modernes ne s'écroulent pas parce que les entreprises sont mal motivées, désemparées, paresseuses ou incompétentes - mais c'est pourquoi SQLi existe.
@EvanderConsus La société de développement Web.Ils ont été engagés pour fournir un site Web à utiliser sur Internet, et ils en ont fourni un qui n'était pas adapté à l'objectif.Suggérer qu'ils pourraient ne pas être responsables parce que leurs outils étaient mauvais, après avoir choisi des outils gratuits, injustifiés et non pris en charge par des personnes inconnues aux compétences inconnues, avec de nombreuses vulnérabilités antérieures connues, est tout simplement stupide."* Nous vous avons engagé pour construire un nouveau bâtiment et il est tombé en panne *", "* ce n'est pas de notre faute, nous avons utilisé de l'acier gratuit de certains forgerons amateurs, comment pourrions-nous savoir qu'il ne serait pas assez solide?""Ah d'accord"
Je ne comprends pas vraiment ce que les accidents de voiture ont à voir avec l'injection SQL.
@TessellatingHeckler Je reconnais que la responsabilité incombe à la société de développement.Cependant, j'aimerais noter que les outils coûteux, garantis et pris en charge par le fournisseur sont également écrits par des personnes inconnues aux compétences inconnues.Les gens, même les gens très bien payés dans des entreprises bien rémunérées, font des erreurs, et je serais prudent de faire une déclaration générale (ce que vous semblez presque faire) que l'acier gratuit est toujours pire que [le truc cher] (https://www.cvedetails.com/vulnerability-list.php?vendor_id=93&product_id=467&version_id=&page=1&order=3).
@WanderNauta Evander a demandé: ** Maintenant la question qui est posée, qui est responsable? "* - Je ne dis pas que l'acier libre est toujours pire, en disant seulement que vous ne pouvez pas compenser votre responsabilité en invoquant" open source! ". Si vousramassez de l'acier gratuit sur le sol, ne le soumettez pas à des tests métallurgiques, et découvrez plus tard qu'il est faible, * vous * êtes responsable. Dans cette réponse, une faille dans un plugin Wordpress? L'auteur du plugin n'a jamais accepté de contrat quiil était adapté à n'importe quel but. Un outil de fournisseur ne serait peut-être pas meilleur, mais s'il le vendait comme étant adapté à son objectif, vous n'êtes pas responsable, ils le sont.
La question de la responsabilité est en effet rhétoriquement, je ne faisais aucune déclaration sur l'open source, ni sur les développeurs hautement rémunérés (c'est pourquoi je l'ajouterai dans ma réponse).@Ellesedil Les crashs de voitures n'ont en effet rien à voir avec les injections SQL, mais c'est métaphoriquement, une figure de style dans laquelle une phrase s'applique à quelque chose auquel elle n'est pas littéralement applicable afin de suggérer une ressemblance.
@TessellatingHeckler Je suis curieux de savoir quel "changement de conception" corrigerait l'injection SQL sans casser le côté droit de l'opérateur `IN`.
@DamianYerrick concevant votre application de telle manière que vous ne puissiez parler à la base de données qu'après avoir échappé aux données incontrôlées, en utilisant les outils d'échappement appropriés pour votre bibliothèque / DB pourrait en être un.Du côté de la base de données, [PostgreSQL] (https://dba.stackexchange.com/a/55018) et [H2database] (https://stackoverflow.com/a/3724272/478656) semblent avoir des moyens de transmettre des tableaux commeparamètres uniques pour éviter la construction de chaînes dans ce but spécifique.Et [variations] (https://stackoverflow.com/a/189399/478656) sur la construction de chaînes de la requête préparée - une conception d'application laborieuse, plus lente, mais toujours plus sûre.
Colin Cassidy
2016-06-27 17:05:17 UTC
view on stackexchange narkive permalink

Premièrement, personne n'écrit correctement les exigences de sécurité, ils disent quelque chose comme "Le produit doit être sécurisé", ce qui n'est en aucun cas testable

Deuxièmement, les développeurs de profession ne sont pas stupides, et le dire est plutôt malhonnête, ils sont tous susceptibles d'avoir des diplômes universitaires et ont résolu des problèmes que nous n'avons même pas commencé à rechercher ... Le problème est qu'ils n'ont jamais appris ce que signifie développer un logiciel en toute sécurité. Cela commence dans les écoles, puis à l'université, puis quel que soit le travail qu'ils occupent, où toute formation est «sur le tas» parce que les entreprises de logiciels ont trop peur de former des développeurs en cas de départ.

Les développeurs sont également sous la pression croissante de faire plus de travail en moins de temps, ils sont occupés à résoudre un problème et à passer au suivant, ils ont peu de temps pour réfléchir au prochain problème.

Les développeurs ne sont pas incités à tester au-delà de ce qu'ils sont en train de développer, s'ils trouvent un problème, ils seront probablement le développeur pour le résoudre. Le mantra du développeur ici est "Ne testez pas ce que vous n'êtes pas prêt à corriger"

Troisièmement, les testeurs sont également pas formé pour trouver des vulnérabilités de sécurité, pour la même raison que les développeurs de logiciels. En fait, de nombreux tests (à mon avis) consistent simplement à répéter les tests effectués par l'équipe de développement.

marché est un facteur énorme , si vous êtes sur le marché en premier, vous gagnez de l'argent, développer en toute sécurité est considéré comme ayant un grand impact sur la vitesse de développement - je veux dire vraiment, qui a le temps pour un modèle de menace! ;)

Enfin, il n'y a pas que des injections SQL, les débordements de tampon sont connus depuis les années 1960 et vous pouvez toujours les trébucher avec une régularité alarmante.

"Deuxièmement, les développeurs professionnels ne sont pas stupides ... ils sont tous susceptibles d'avoir des diplômes universitaires." Le développeur le plus intelligent que j'aie jamais engagé avait un diplôme de deux ans dans une école de technologie.Certains des pires avaient un doctorat.Un morceau de papier n'imprègne ni l'intelligence ni le bon sens, et j'ai constaté un manque omniprésent des deux.Malheureusement, les universités ont tendance à privilégier le papier à l'expérience, de sorte que les nouveaux développeurs apprennent les mauvaises choses parce que les personnes qui enseignent ne savent pas mieux elles-mêmes.
prouve encore qu'ils ne sont pas stupides.Cela montre l'énorme disparité entre les universités et l'industrie dans la manière dont les développeurs de logiciels sont enseignés.les étudiants apprennent la langue de-jour, qui est probablement javascript ... Et c'est totalement irréalisable face à des problèmes du monde réel ou à la fiabilité, à l'évolutivité des performances, aux données non nettoyées, etc., etc. toutes les choses que vous auriez à gérer dans les applications.
Les universités semblent simplement vous apprendre à avoir l'air intelligent sans rien savoir d'utilité pratique.
non.Dans le contexte de la question initiale, il y a juste très peu d'attention sur la sécurité des produits dans un programme universitaire
@colincassidy votre commentaire doit être lu, il n'y a pas de focus sur la sécurité des produits dans un programme universitaire.
Jedi
2016-06-29 21:58:06 UTC
view on stackexchange narkive permalink

Oui, anthropologiquement, les humains sont stupides.

Oui, politiquement, la structure d'incitation ne pénalise pas suffisamment les candidatures vulnérables

Oui, le processus est défectueux - code est écrit à la hâte; le mauvais / ancien code n'est pas toujours jeté.

Et, oui, techniquement, traiter et mélanger les données comme du code est plus difficile à faire par défaut.

Mais, il y a une vue plus positive (ignorons les 99% de vulnérabilités SQLi que les réponses ci-dessus expliquent). SQLi existe toujours sur des sites Web extrêmement bien conçus et soigneusement développés car nous sommes géniaux . Règle des pirates. Il suffit de regarder les centaines de vecteurs d'attaque et les milliers de charges utiles SQLi qui ont été développés au cours des dix-sept dernières années pour regagner une certaine confiance dans la race humaine. Chaque année apporte avec elle de nouvelles techniques présentées DEFCON / BlackHat / RSA / IEEESSP. Les programmes de primes de bogues pour Facebook, Google et autres ont tous dû débourser au moins une fois pour un SQLi critique.

C'est en partie à cause de la complexité et du nombre de couches de notre système, chacune faisant muter les données de manière plus récente et plus intéressante. Nous avons de plus en plus besoin de faire plus, plus vite, en utilisant moins de ressources. Et tant que nous ne pouvons pas tester de manière réalisable tous les chemins d'accès au système, personne ne certifiera une solution aux problèmes d'injection.

niilzon
2016-06-29 16:18:33 UTC
view on stackexchange narkive permalink

Parce que ces problèmes de sécurité ne sont pas couverts pendant la plupart des cycles de formation de 3 ans et des études équivalentes, et de nombreux développeurs ont suivi cette piste (y compris moi-même). Compte tenu de l'ampleur du champ, 3 ans ne suffisent même pas pour faire face au programme d'études proprement dit. Des choses comme la sécurité sont donc abandonnées.

C'est malheureux, mais puisque certains des nouveaux développeurs ont gagné ' N'essayez jamais d'apprendre de nouvelles choses par eux-mêmes, ces personnes écriront toujours du code sujette à SQLi jusqu'à ce qu'un collègue plus instruit signale le problème (ou jusqu'à ce qu'un SQLi réel se produise).

Au cours de mes études (il y a de nombreuses années), nos professeurs nous ont toujours dit d'utiliser PreparedStatements lors de la création de requêtes SQL manuelles, car c'est la "meilleure pratique", mais ils n'ont pas dit pourquoi. C'est mieux que rien, mais plutôt triste, je ne sais pas si ces professeurs se connaissaient eux-mêmes.

Nous avons appris comment afficher des éléments sur un jsp, mais pas ce qu'est le Cross-Site-Scripting.

J'ai la "chance" d'être un développeur passionné avec un peu de temps dans mon mains, j'ai donc appris toutes ces choses par moi-même il y a longtemps, mais je suis sûr que de nombreux développeurs ne font que 8 heures par jour (pour des raisons légitimes d'ailleurs), et tant que personne ne leur montre quoi est faux, cela ne changera pas.

Parfois, certains développeurs sous-estiment le risque de SQLi.
Les non-éduqués le font généralement.Cela me rappelle un article sur ce site même, où un étudiant avait des problèmes avec des requêtes.Je lui ai montré comment faire fonctionner le code, et j'ai souligné qu'il était sujette à SQLi, suggérant de refactoriser le code avec PreparedStatements. Sa réponse a été "mais c'est juste pour un exercice en classe, ce code ne sera pas réutilisé, je m'en fiche". C'est le genre d'attitude contre laquelle nous devons lutter.Coder aussi correctement que possible en toutes occasions est important, * surtout si vous ne maîtrisez pas très bien ce que vous faites *.
Neil Davis
2016-06-29 06:54:18 UTC
view on stackexchange narkive permalink

Si vous utilisez correctement les instructions préparées, l'injection SQL n'est pas possible.

"Si le modèle de déclaration d'origine n'est pas dérivé d'une entrée externe, l'injection SQL ne peut pas se produire."

https://en.m.wikipedia.org/wiki/ Prepared_statement

Malheureusement, les gens n'utilisent généralement pas correctement les instructions préparées, voire pas du tout.

L'injection SQL appartiendrait au passé s'ils le faisaient.

Et oui, php / MySQL a une implémentation de déclaration préparée depuis très longtemps, plus de 10 ans si ma mémoire est bonne ...

mystupidstory
2016-07-04 04:49:27 UTC
view on stackexchange narkive permalink

Les autres réponses ont indiqué presque toutes les raisons. Mais il y a autre chose, qui, à mon avis, est le problème de sécurité le plus dangereux de tous. Les développeurs tentent d'ajouter de plus en plus de fonctionnalités aux technologies et s'écartent parfois de l'objectif réel de la technologie. Un peu comme la façon dont un langage de script côté client a fini par être utilisé pour le codage côté serveur ou a été autorisé à accéder aux ressources distantes ainsi qu'au stockage local côté client.Au lieu de les superposer en tant que technologies distinctes, ils ont tous été placés dans un gros pot de miel. En examinant certaines des injections SQL avancées, nous pouvons voir comment elles ont joué un rôle dans l'accent constant des attaques SQLi.

Cependant, avec SQL, je suppose que la plus grande erreur était le couplage des commandes et des paramètres. C'est un peu comme appeler run (value, printf) au lieu de printf(value).

Oh et une dernière chose, alors que c'est assez facile à convertir entre différents types de bases de données, les changements requis dans le code côté serveur sont gigantesques.

Quelqu'un devrait faire des abstraits entre différents types de bases de données et faciliter le passage d'une base de données à l'autre. Dites un plugin php qui prend en entrée les commandes QL et le type de base de données, et peut être un filtre sur liste blanche pour nettoyer l'entrée.

Brad Thomas
2016-06-29 23:06:56 UTC
view on stackexchange narkive permalink

Personnellement, je pense que c'est un cas spécifique d'un problème plus général de programmation, que les IDE et les langages sont trop permissifs. Nous donnons à nos développeurs un pouvoir immense au nom de la flexibilité et de l'efficacité. Le résultat est "ce qui peut arriver arrivera", et les défaillances de sécurité sont inévitables.

pppp
2016-06-28 11:30:50 UTC
view on stackexchange narkive permalink

PDO (ou d'autres méthodes "sûres") n'est pas plus sécurisée que mysql_ (ou d'autres méthodes "non sûres"). Il est plus facile d'écrire du code sécurisé, mais il est encore plus simple de simplement concaténer les chaînes fournies par l'utilisateur non échappé dans la requête et de ne pas se soucier des paramètres.

Je ne suis pas sûr que cela réponde à la question.S'agissait-il d'un commentaire sur une autre réponse?
Je crois qu'il voulait dire que la raison pour laquelle l'injection SQL existe toujours est que les «méthodes sûres» ci-dessus ne protègent pas complètement contre les injections SQL, et que les gens doivent être conscients de leur protection totale et de s'assurer que vous utilisez une base de données quiest capable de gérer les situations nécessaires.
Rendre le code sécurisé plus difficile à écrire entraîne plus de bogues et donc moins de code sécurisé.


Ce Q&R a été automatiquement traduit de la langue anglaise.Le contenu original est disponible sur stackexchange, que nous remercions pour la licence cc by-sa 3.0 sous laquelle il est distribué.
Loading...