久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

怎么確定SQL注入死透了

132次閱讀
沒有評論

共計 1920 個字符,預計需要花費 5 分鐘才能閱讀完成。

自動寫代碼機器人,免費開通

丸趣 TV 小編給大家分享一下怎么確定 SQL 注入死透了,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

很長一段時間,我認為后端開發,在安全性方面最容易出問題的地方就在于 SQL 注入。通過 where 1= 1 這種魔幻的 SQL 寫法,就可以很容易的對一個存在問題的系統進行攻擊,以至于最終演進出 sqlmap 這樣的神器存在。

怎么確定 SQL 注入死透了

后來的 fastjson 刷新了我的認知,這個框架也算是對互聯網安全概念的一種推動。連不懂技術的老板,都知道 fastjson 快的要命,作為程序員安全理念就得到了一次提升。

為什么對 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 注入,是一個夢想。

因為它的對手,是人性的懶惰。誰也無法戰勝它。

以上是“怎么確定 SQL 注入死透了”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注丸趣 TV 行業資訊頻道!

向 AI 問一下細節

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-12-04發表,共計1920字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 云霄县| 藁城市| 泰州市| 静海县| 北票市| 丰宁| 综艺| 曲沃县| 图们市| 曲周县| 泽库县| 潮州市| 尼勒克县| 宜昌市| 上虞市| 海南省| 和平区| 商河县| 永平县| 绥棱县| 乐安县| 阿坝县| 中超| 宝山区| 阿巴嘎旗| 临沭县| 厦门市| 博爱县| 邹平县| 霍山县| 晋州市| 原平市| 西城区| 扶风县| 淳化县| 启东市| 大厂| 婺源县| 罗甸县| 邵阳县| 张北县|