确定SQL注入死透了么?
很长一段时间,我认为后端开发,在安全性方面最容易出问题的地方就在于SQL注入。通过 where 1=1
这种魔幻的SQL写法,就可以很容易的对一个存在问题的系统进行攻击,以至于最终演进出sqlmap
这样的神器存在。
后来的fastjson
刷新了我的认知,这个框架也算是对互联网安全概念的一种推动。连不懂技术的老板,都知道fastjson快的要命
,作为程序员安全理念就得到了一次提升。
推荐(免费):sql
为什么对sql注入情有独钟?因为开发人员和SQL打交道的地方太多了。甚至有的专门开发报表的同学,写的SQL行数,比写的代码行数还多!
问题是。很久很久之前,早在10年前,就有人在喊SQL注入已经死掉了,但时至今日,依然有一大批的SQL注入教程和SQL注入的案例。
SQL注入是漏洞之王,这可不是吹的。
当然在这方面,PHP的贡献最大,Java甘拜下风。
SQL注入流行的原因,就是开发人员对自己太自信了,或者使用的工具太原始了,没有经过框架层进行一次过滤。如果你用了Java界的MyBatis或者JPA,发生SQL注入的可能性就变的非常的低。现在PHP也有了类似于thinkphp
一样的框架,代表着能搞的SQL注入漏洞已经越来越少了。
但不代表着没有,只是门槛提高了。我们以MyBatis为例,看一下到底还能不能发生SQL注入。
MyBatis依然存在SQL注入
使用Mybatis的同学,第一个接触的概念,就是#
和$
的区别。这两个符号非常的像Shell中的魔幻符号,但好在只有两种情况。
#
代表的是使用sql预编译方式,安全可靠$
代表着使用的是拼接方式,有SQL注入的风险
比如下面这个xml配置,就是一个绝对安全的写法。因为整个#{id}
会被替换成?
。
<select id="queryAll" resultMap="resultMap"> SELECT * FROM order WHERE id = #{id} </select>
但可惜的是,有些场景,并不能使用预编译方式(或者你仅仅是不知道或者懒)。像一些代码重构,把表名/列名/排序等字段,动态传入的时候,不可避免的就需要SQL拼接的方式,SQL注入依然有搞头。
但更容易发生问题的,还是LIKE
和IN
等类似的语句。
下面是两句Like模糊查询的写法,实际测试会发现,使用#
竟然不好使了,会报错,需要使用sql拼接的$
。问题由此发生。
SELECT * FROM order WHERE name like '%#{name}%' //会报语法错 SELECT * FROM order WHERE name like '%${name}%' //可以运行
而正确的写法,应该使用函数拼接。但是工期压死人,在不知不觉间,大多数人就选择了简单的写法。毕竟功能第一嘛,也是体现工作量的最主要方式。
SELECT * FROM order WHERE name like concat(‘%’,#{name}, ‘%’) //正确的写法
同样的问题,存在于IN
语句。
in (#{tag}) //报错 in (${tag}) //可以运行
既然几个字符就可以运行,当然没人选择下面复杂的写法。
tag in <foreach collection="tag" item="item" open="("separatosr="," close=")"> #{tag} </foreach>
还有order by,也千万不要掉以轻心,一不小心就会万劫不复。
SELECT * FROM order order by createDate #{sortType} //报错 SELECT * FROM order order by createDate ${sortType} //正常
这种情况下,就需要把sortType搞成白名单了。不就一个ASC和DESC了,你给我传一个长长的串,是怎么回事?
总结
SQL注入在2021年,依然存在,只不过门槛提高了。现在SQL注入减少,都是框架的功劳,和程序员的水平没半毛关系。sql拼接的情况永远不会消失,因为这是最快捷简单的方式,会让人欲罢不能。无数的外包项目,十几年躺尸不动的系统比比皆是,寄希望于在框架层全部消灭SQL注入,是一个梦想。
因为它的对手,是人性的懒惰。谁也无法战胜它。
Atas ialah kandungan terperinci 确定SQL注入死透了么?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas





Nginx ialah pelayan web yang pantas, berprestasi tinggi, berskala, dan keselamatannya merupakan isu yang tidak boleh diabaikan dalam pembangunan aplikasi web. Terutamanya serangan suntikan SQL, yang boleh menyebabkan kerosakan besar pada aplikasi web. Dalam artikel ini, kami akan membincangkan cara menggunakan Nginx untuk menghalang serangan suntikan SQL untuk melindungi keselamatan aplikasi web. Apakah serangan suntikan SQL? Serangan suntikan SQL ialah kaedah serangan yang mengeksploitasi kelemahan dalam aplikasi web. Penyerang boleh menyuntik kod hasad ke dalam aplikasi web

Gambaran Keseluruhan Prakata 0x01 Editor menemui satu lagi limpahan data Berganda dalam MySQL. Apabila kita mendapat fungsi dalam MySQL, editor lebih berminat dengan fungsi matematik Ia juga harus mengandungi beberapa jenis data untuk menyimpan nilai. Jadi editor berlari untuk menguji untuk melihat fungsi mana yang akan menyebabkan ralat limpahan. Kemudian editor mendapati bahawa apabila nilai yang lebih besar daripada 709 diluluskan, fungsi exp() akan menyebabkan ralat limpahan. mysql>selectexp(709);+----------------------+|exp(709)|+---------- - -----------+|8.218407461554972

Nota Pembangunan Laravel: Kaedah dan Teknik untuk Mencegah SQL Injection Dengan perkembangan Internet dan kemajuan teknologi komputer yang berterusan, pembangunan aplikasi web telah menjadi semakin biasa. Semasa proses pembangunan, keselamatan sentiasa menjadi isu penting yang tidak boleh diabaikan oleh pembangun. Antaranya, mencegah serangan suntikan SQL adalah salah satu isu keselamatan yang memerlukan perhatian khusus semasa proses pembangunan. Artikel ini akan memperkenalkan beberapa kaedah dan teknik yang biasa digunakan dalam pembangunan Laravel untuk membantu pembangun mencegah suntikan SQL dengan berkesan. Menggunakan pengikatan parameter Pengikatan parameter ialah Lar

Gambaran keseluruhan pengesanan dan pembaikan kelemahan suntikan SQL PHP: Suntikan SQL merujuk kepada kaedah serangan di mana penyerang menggunakan aplikasi web untuk menyuntik kod SQL secara berniat jahat ke dalam input. PHP, sebagai bahasa skrip yang digunakan secara meluas dalam pembangunan web, digunakan secara meluas untuk membangunkan laman web dan aplikasi dinamik. Walau bagaimanapun, disebabkan fleksibiliti dan kemudahan penggunaan PHP, pembangun sering mengabaikan keselamatan, mengakibatkan kewujudan kelemahan suntikan SQL. Artikel ini akan memperkenalkan cara untuk mengesan dan membetulkan kelemahan suntikan SQL dalam PHP dan memberikan contoh kod yang berkaitan. semak

Petua Pengaturcaraan PHP: Cara Mencegah Serangan Suntikan SQL Keselamatan adalah penting apabila melakukan operasi pangkalan data. Serangan suntikan SQL ialah serangan rangkaian biasa yang mengeksploitasi pengendalian input pengguna yang tidak betul oleh aplikasi, mengakibatkan kod SQL berniat jahat dimasukkan dan dilaksanakan. Untuk melindungi aplikasi kami daripada serangan suntikan SQL, kami perlu mengambil beberapa langkah berjaga-jaga. Gunakan pertanyaan berparameter Pertanyaan berparameter ialah cara paling asas dan paling berkesan untuk menghalang serangan suntikan SQL. Ia berfungsi dengan membandingkan nilai yang dimasukkan pengguna dengan pertanyaan SQL

Dalam bidang keselamatan rangkaian, serangan suntikan SQL adalah kaedah serangan biasa. Ia mengeksploitasi kod berniat jahat yang diserahkan oleh pengguna berniat jahat untuk mengubah tingkah laku aplikasi untuk melaksanakan operasi yang tidak selamat. Serangan suntikan SQL biasa termasuk operasi pertanyaan, operasi sisipan dan operasi padam. Antaranya, operasi pertanyaan adalah yang paling kerap diserang, dan kaedah biasa untuk menghalang serangan suntikan SQL ialah menggunakan PHP. PHP ialah bahasa skrip sebelah pelayan yang biasa digunakan yang digunakan secara meluas dalam aplikasi web. PHP boleh dikaitkan dengan MySQL dll.

Penapisan bentuk PHP: Pencegahan dan penapisan suntikan SQL Pengenalan: Dengan perkembangan pesat Internet, pembangunan aplikasi Web telah menjadi semakin biasa. Dalam pembangunan web, borang adalah salah satu cara interaksi pengguna yang paling biasa. Walau bagaimanapun, terdapat risiko keselamatan dalam pemprosesan data penyerahan borang. Antaranya, salah satu risiko yang paling biasa ialah serangan suntikan SQL. Serangan suntikan SQL ialah kaedah serangan yang menggunakan aplikasi web untuk mengendalikan data input pengguna secara tidak betul, membolehkan penyerang melakukan pertanyaan pangkalan data yang tidak dibenarkan. Penyerang melepasi

Tingkatkan keselamatan sistem: Petua MyBatis untuk mencegah serangan suntikan SQL Dengan perkembangan teknologi maklumat yang berterusan, aplikasi pangkalan data telah menjadi bahagian yang amat diperlukan dalam sistem perisian moden. Walau bagaimanapun, yang berikut ialah isu keselamatan pangkalan data, yang paling biasa dan serius mungkin adalah serangan suntikan SQL. Serangan suntikan SQL merujuk kepada penyerang memasukkan kod SQL berniat jahat ke dalam medan input untuk mendapatkan maklumat secara haram dalam pangkalan data atau memusnahkan integriti pangkalan data. Untuk melindungi daripada SQL
