Êtes-vous sûr que l'injection SQL est morte ?
Pendant longtemps, j'ai pensé que le problème le plus probable dans le développement back-end en termes de sécurité était l'injection SQL. Grâce à la méthode d'écriture SQL magique de where 1=1
, vous pouvez facilement attaquer un système problématique et éventuellement évoluer vers l'existence d'artefacts comme sqlmap
.
Ce dernier fastjson
a rafraîchi ma compréhension. Ce cadre peut également être considéré comme une promotion du concept de sécurité Internet. Même les patrons qui ne comprennent pas la technologie connaissent fastjson快的要命
, et en tant que programmeur, leur concept de sécurité a été amélioré.
Recommandé (gratuit) : sql
Pourquoi avez-vous un faible pour l'injection SQL ? Parce qu'il y a trop d'endroits où les développeurs s'occupent de SQL. Certains étudiants spécialisés dans le développement de rapports écrivent même plus de lignes de SQL que de lignes de code !
Le problème est que. Il y a bien longtemps, il y a déjà 10 ans, certains criaient que l'injection SQL était morte, mais à ce jour, il existe encore un grand nombre de tutoriels d'injection SQL et de cas d'injection SQL.
L'injection SQL est la reine des vulnérabilités, ce n'est pas une vantardise.
Bien sûr, à cet égard, PHP a apporté la plus grande contribution, Java étant à la traîne.
La raison pour laquelle l'injection SQL est populaire est que les développeurs ont trop confiance en eux-mêmes ou que les outils qu'ils utilisent sont trop primitifs et n'ont pas été filtrés par la couche framework. Si vous utilisez MyBatis ou JPA dans le monde Java, la possibilité d'injection SQL devient très faible. Désormais, PHP dispose également d'un framework similaire à thinkphp
, ce qui signifie qu'il y a de moins en moins de vulnérabilités d'injection SQL.
Mais cela ne veut pas dire qu’il n’y en a pas, cela signifie simplement que le seuil a été relevé. Prenons MyBatis comme exemple pour voir si l'injection SQL peut toujours se produire.
L'injection SQL existe toujours dans MyBatis
Les étudiants qui utilisent Mybatis, le premier concept avec lequel ils entrent en contact est la différence entre #
et $
. Ces deux symboles sont très similaires aux symboles magiques de Shell, mais heureusement il n'y a que deux situations.
#
représente l'utilisation de la méthode de pré-compilation SQL, qui est sûre et fiable.$
représente la méthode d'épissage. , qui correspond aux risques de l'injection SQL
Par exemple, la configuration XML suivante est un moyen absolument sûr de l'écrire. Parce que l'intégralité du #{id}
sera remplacé par ?
.
<select id="queryAll" resultMap="resultMap"> SELECT * FROM order WHERE id = #{id} </select>
Mais malheureusement, dans certains scénarios, la précompilation ne peut pas être utilisée (ou vous ne le savez tout simplement pas ou êtes paresseux). Par exemple, dans certaines refactorisations de code, lorsque des champs tels que le nom de la table/le nom de la colonne/le tri sont transmis dynamiquement, l'épissage SQL est inévitablement requis et l'injection SQL se produit toujours.
Mais des phrases similaires telles que LIKE
et IN
sont plus susceptibles de causer des problèmes.
Voici comment écrire une requête floue Like en deux phrases. Lors des tests réels, il s'avérera que l'utilisation de #
n'est pas facile à utiliser et une erreur sera signalée. épissage $
. C'est là que le problème se pose.
SELECT * FROM order WHERE name like '%#{name}%' //会报语法错 SELECT * FROM order WHERE name like '%${name}%' //可以运行
La bonne façon de l'écrire est d'utiliser l'épissage de fonctions. Mais le délai de construction est écrasant, et sans même s’en rendre compte, la plupart des gens choisissent la manière simple d’écrire. Après tout, la fonction passe avant tout, et c’est aussi le moyen le plus important de refléter la charge de travail.
SELECT * FROM order WHERE name like concat(‘%’,#{name}, ‘%’) //正确的写法
Le même problème existe dans la déclaration IN
.
in (#{tag}) //报错 in (${tag}) //可以运行
Comme il peut être exécuté avec seulement quelques caractères, bien sûr, personne ne choisit la méthode d'écriture compliquée ci-dessous.
tag in <foreach collection="tag" item="item" open="("separatosr="," close=")"> #{tag} </foreach>
Commandez également, ne le prenez pas à la légère, sinon vous serez condamné.
SELECT * FROM order order by createDate #{sortType} //报错 SELECT * FROM order order by createDate ${sortType} //正常
Dans ce cas, vous devez ajouter sortType à la liste blanche. Il n'y a pas que ASC et DESC. Vous m'avez envoyé une longue chaîne, que se passe-t-il ?
Résumé
L'injection SQL existe toujours en 2021, mais le seuil a été relevé. . La diminution de l'injection SQL est désormais entièrement due au framework et n'a rien à voir avec le niveau des programmeurs. La situation de l’épissage SQL ne disparaîtra jamais car c’est le moyen le plus rapide et le plus simple et cela rendra les gens dépendants. Il existe d’innombrables projets d’externalisation, et de nombreux systèmes sont restés inactifs depuis plus de dix ans. Espérer que l’injection SQL sera éliminée au niveau du framework.
Parce que son adversaire est la paresse humaine. Personne ne peut le vaincre.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds





Nginx est un serveur Web rapide, performant et évolutif, et sa sécurité est un problème qui ne peut être ignoré dans le développement d'applications Web. Surtout les attaques par injection SQL, qui peuvent causer d’énormes dégâts aux applications Web. Dans cet article, nous verrons comment utiliser Nginx pour empêcher les attaques par injection SQL afin de protéger la sécurité des applications Web. Qu’est-ce qu’une attaque par injection SQL ? L'attaque par injection SQL est une méthode d'attaque qui exploite les vulnérabilités des applications Web. Les attaquants peuvent injecter du code malveillant dans les applications Web

0x01 Préface Présentation L'éditeur a découvert un autre double débordement de données dans MySQL. Lorsque nous obtenons les fonctions dans MySQL, l'éditeur s'intéresse davantage aux fonctions mathématiques. Elles doivent également contenir certains types de données pour enregistrer les valeurs. L'éditeur a donc exécuté un test pour voir quelles fonctions provoqueraient des erreurs de débordement. Puis l'éditeur a découvert que lorsqu'une valeur supérieure à 709 est passée, la fonction exp() provoquera une erreur de débordement. mysql>selectexp(709);+-----------------------+|exp(709)|+---------- - -----------+|8.218407461554972

Notes de développement de Laravel : méthodes et techniques pour empêcher l'injection SQL Avec le développement d'Internet et les progrès continus de la technologie informatique, le développement d'applications Web est devenu de plus en plus courant. Au cours du processus de développement, la sécurité a toujours été une question importante que les développeurs ne peuvent ignorer. Parmi eux, la prévention des attaques par injection SQL est l’un des problèmes de sécurité qui nécessite une attention particulière lors du processus de développement. Cet article présentera plusieurs méthodes et techniques couramment utilisées dans le développement de Laravel pour aider les développeurs à prévenir efficacement l'injection SQL. Utilisation de la liaison de paramètres La liaison de paramètres est Lar

Présentation de la détection et de la réparation des vulnérabilités d'injection SQL PHP : L'injection SQL fait référence à une méthode d'attaque dans laquelle les attaquants utilisent des applications Web pour injecter de manière malveillante du code SQL dans l'entrée. PHP, en tant que langage de script largement utilisé dans le développement Web, est largement utilisé pour développer des sites Web et des applications dynamiques. Cependant, en raison de la flexibilité et de la facilité d'utilisation de PHP, les développeurs ignorent souvent la sécurité, ce qui entraîne l'existence de vulnérabilités d'injection SQL. Cet article explique comment détecter et corriger les vulnérabilités d'injection SQL dans PHP et fournit des exemples de code pertinents. vérifier

Conseils de programmation PHP : Comment prévenir les attaques par injection SQL La sécurité est cruciale lors de l'exécution d'opérations de base de données. Les attaques par injection SQL sont une attaque réseau courante qui exploite la mauvaise gestion par une application des entrées utilisateur, entraînant l'insertion et l'exécution de code SQL malveillant. Pour protéger notre application contre les attaques par injection SQL, nous devons prendre quelques précautions. Utiliser des requêtes paramétrées Les requêtes paramétrées constituent le moyen le plus simple et le plus efficace de prévenir les attaques par injection SQL. Cela fonctionne en comparant les valeurs saisies par l'utilisateur avec une requête SQL

Dans le domaine de la sécurité des réseaux, les attaques par injection SQL sont une méthode d'attaque courante. Il exploite le code malveillant soumis par des utilisateurs malveillants pour modifier le comportement d'une application afin d'effectuer des opérations dangereuses. Les attaques par injection SQL courantes incluent les opérations de requête, les opérations d'insertion et les opérations de suppression. Parmi elles, les opérations de requête sont les plus fréquemment attaquées, et une méthode courante pour empêcher les attaques par injection SQL consiste à utiliser PHP. PHP est un langage de script côté serveur couramment utilisé dans les applications Web. PHP peut être lié à MySQL, etc.

Filtrage de formulaire PHP : prévention et filtrage des injections SQL Introduction : Avec le développement rapide d'Internet, le développement d'applications Web est devenu de plus en plus courant. Dans le développement Web, les formulaires sont l’un des moyens d’interaction les plus courants avec les utilisateurs. Cependant, il existe des risques de sécurité dans le traitement des données de soumission des formulaires. Parmi eux, l’un des risques les plus courants concerne les attaques par injection SQL. Une attaque par injection SQL est une méthode d'attaque qui utilise une application Web pour traiter de manière inappropriée les données saisies par l'utilisateur, permettant à l'attaquant d'effectuer des requêtes de base de données non autorisées. L'attaquant passe le

Améliorer la sécurité du système : les conseils MyBatis pour prévenir les attaques par injection SQL Avec le développement continu des technologies de l'information, les applications de bases de données sont devenues un élément indispensable des systèmes logiciels modernes. Cependant, ce qui suit concerne les problèmes de sécurité des bases de données, le plus courant et le plus grave étant probablement les attaques par injection SQL. Les attaques par injection SQL font référence à des attaquants qui insèrent du code SQL malveillant dans des champs de saisie pour obtenir illégalement des informations dans la base de données ou détruire l'intégrité de la base de données. Pour se protéger contre SQL
