SQL Injection 攻擊與防禦

更新於 發佈於 閱讀時間約 4 分鐘

假如你開發了一個網站,有user登入的功能,駭客故意輸入SQL語法來破壞原本的SQL結構,這就是SQL注入攻擊。

以下直接用程式碼來了解:

raw-image

想像L28, 29是user輸入的帳號密碼,在正常情況下可以成功查出這個user。

raw-image

正常情況下SQL長這樣:
SELECT * FROM user where account = 'abc' and password = '123'

現在我把程式碼L29改成這樣:

結果還是一樣成功找出這個user了!

raw-image

因為現在SQL變成這樣了:
SELECT * FROM user where account = 'abc' and password = 'xxx' or '1'='1'

雖然沒有密碼是xxx的,但是'1'='1'是成立的,因此這個table資料就被撈出來了!
一般登入驗證成功後,可能不會把帳密撈出來,但是駭客透過這種方式還是可以登入成功,雖然不知道你的密碼。

這個攻擊的示範還只是把資料抓出來而已,那如果是下delete呢?


防禦SQL Injection:

1. 將user輸入的SQL關鍵字select or ' " 等等字元過濾。

2. 資料庫中儲存加密後的密碼,後端接收到user輸入的密碼後,先進行密碼加密,再組select SQL來驗證是否資料比對成功。

3. 將資料庫不必要的權限拔除,例如把drop table權限拿掉、不需要delete的table就不要grant權限給該db user。

4. 程式使用Prepared statement bind params的方式來下SQL:

將程式碼改成這樣:

raw-image


可以發現雖然L29被sql injection,但是卻沒撈出結果。
利用L38把最後執行的SQL print出來可以發現,最終執行的SQL是這樣:
SELECT * FROM user where account = 'abc' and password = 'xxx\' or \'1\'=\'1'

因為bindParam幫我們把單引號跳脫掉了,因此避開了SQL Injection攻擊。


5. 使用ORM


本筆記參考:
1. https://www.itread01.com/content/1549607942.html
2. https://medium.com/%E7%A8%8B%E5%BC%8F%E7%8C%BF%E5%90%83%E9%A6%99%E8%95%89/%E6%B7%BA%E8%AB%87%E9%A7%AD%E5%AE%A2%E6%94%BB%E6%93%8A-%E7%B6%B2%E7%AB%99%E5%AE%89%E5%85%A8-%E4%B8%80%E6%AC%A1%E7%9C%8B%E6%87%82-sql-injection-%E7%9A%84%E6%94%BB%E6%93%8A%E5%8E%9F%E7%90%86-b1994fd2392a

留言
avatar-img
留言分享你的想法!
avatar-img
Vic Lin的沙龍
20會員
161內容數
Vic Lin的沙龍的其他內容
2023/08/13
父元件 傳遞方法使用@ <template>    ...    <Login @modalClose="modalClose"/> ... </template> <script setup>     const _modal = ref();     function m
2023/08/13
父元件 傳遞方法使用@ <template>    ...    <Login @modalClose="modalClose"/> ... </template> <script setup>     const _modal = ref();     function m
2023/03/25
前情提要 由於我的筆電已經用了10年,無法再戰下去了,且有預算考量,加上使用電腦幾乎都是定點,只有偶爾回家的時候會需要攜帶,因此最終選擇了迷你電腦,體積小不占空間,又方便攜帶,剛好符合我的需求。 菜單 由於這台無法裝獨顯,所以CPU的部分選擇 AMD R5 3400G(含Vega 11內
Thumbnail
2023/03/25
前情提要 由於我的筆電已經用了10年,無法再戰下去了,且有預算考量,加上使用電腦幾乎都是定點,只有偶爾回家的時候會需要攜帶,因此最終選擇了迷你電腦,體積小不占空間,又方便攜帶,剛好符合我的需求。 菜單 由於這台無法裝獨顯,所以CPU的部分選擇 AMD R5 3400G(含Vega 11內
Thumbnail
2023/03/10
Nuxt3中可使用useFetch來獲取數據,不須再引用axios,相當方便: 本筆記參考: https://juejin.cn/post/7104071421160063012 https://juejin.cn/post/7086472647575339045
2023/03/10
Nuxt3中可使用useFetch來獲取數據,不須再引用axios,相當方便: 本筆記參考: https://juejin.cn/post/7104071421160063012 https://juejin.cn/post/7086472647575339045
看更多
你可能也想看
Thumbnail
每年4月、5月都是最多稅要繳的月份,當然大部份的人都是有機會繳到「綜合所得稅」,只是相當相當多人還不知道,原來繳給政府的稅!可以透過一些有活動的銀行信用卡或電子支付來繳,從繳費中賺一點點小確幸!就是賺個1%~2%大家也是很開心的,因為你們把沒回饋變成有回饋,就是用卡的最高境界 所得稅線上申報
Thumbnail
每年4月、5月都是最多稅要繳的月份,當然大部份的人都是有機會繳到「綜合所得稅」,只是相當相當多人還不知道,原來繳給政府的稅!可以透過一些有活動的銀行信用卡或電子支付來繳,從繳費中賺一點點小確幸!就是賺個1%~2%大家也是很開心的,因為你們把沒回饋變成有回饋,就是用卡的最高境界 所得稅線上申報
Thumbnail
全球科技產業的焦點,AKA 全村的希望 NVIDIA,於五月底正式發布了他們在今年 2025 第一季的財報 (輝達內部財務年度為 2026 Q1,實際日曆期間為今年二到四月),交出了打敗了市場預期的成績單。然而,在銷售持續高速成長的同時,川普政府加大對於中國的晶片管制......
Thumbnail
全球科技產業的焦點,AKA 全村的希望 NVIDIA,於五月底正式發布了他們在今年 2025 第一季的財報 (輝達內部財務年度為 2026 Q1,實際日曆期間為今年二到四月),交出了打敗了市場預期的成績單。然而,在銷售持續高速成長的同時,川普政府加大對於中國的晶片管制......
Thumbnail
參數化查詢是一種將參數值傳遞給SQL語句的技術,這些參數值不會被直接解釋為SQL語法。這樣可以防止惡意用戶通過在輸入中插入惡意的SQL語法來攻擊資料庫。參數化查詢的一個主要優點是它能夠提高安全性,同時也能夠幫助資料庫優化查詢。
Thumbnail
參數化查詢是一種將參數值傳遞給SQL語句的技術,這些參數值不會被直接解釋為SQL語法。這樣可以防止惡意用戶通過在輸入中插入惡意的SQL語法來攻擊資料庫。參數化查詢的一個主要優點是它能夠提高安全性,同時也能夠幫助資料庫優化查詢。
Thumbnail
我自己是使用微軟的SQLIT軟體 這個軟體的操作上 沒有辦法直接用滑鼠點選或是拖拉的方式來看到你想看到的表格 都是要下指令的像是要看data.sqlite中的user這個table我就必須下 才能把table調閱出來看 那做為一個python三年工作經驗的工程師通常我不會直接在SQLIT軟體 裡面下
Thumbnail
我自己是使用微軟的SQLIT軟體 這個軟體的操作上 沒有辦法直接用滑鼠點選或是拖拉的方式來看到你想看到的表格 都是要下指令的像是要看data.sqlite中的user這個table我就必須下 才能把table調閱出來看 那做為一個python三年工作經驗的工程師通常我不會直接在SQLIT軟體 裡面下
Thumbnail
sqlmap是一個python的滲透測試工具 SQL 注入 **SQL 注入(SQL injection)**利用了網路程式(Web apps)的錯誤輸入。駭客可以透過執行後端資料庫的網路程式,惡意繞過 SQL 指令。 SQL 注入能在未授權的情況下,直接從資料庫訪問資料庫與檢索信息。許多數據洩露肇
Thumbnail
sqlmap是一個python的滲透測試工具 SQL 注入 **SQL 注入(SQL injection)**利用了網路程式(Web apps)的錯誤輸入。駭客可以透過執行後端資料庫的網路程式,惡意繞過 SQL 指令。 SQL 注入能在未授權的情況下,直接從資料庫訪問資料庫與檢索信息。許多數據洩露肇
Thumbnail
在資訊性的時代,幾乎每個企業都有自己的網站,提供最大價值及免費的資訊吸引受眾及潛在客戶,從而提高曝光率及點擊率,有助將其轉換成銷量。若資訊安全的預防措施不足,容易受到網絡攻擊及內部安全問題。在這情況下更顯得網站漏洞掃描對企業的重要性,下文會為大家一一講解網站漏洞掃描。 為什麼企業需要網站漏洞掃描?
Thumbnail
在資訊性的時代,幾乎每個企業都有自己的網站,提供最大價值及免費的資訊吸引受眾及潛在客戶,從而提高曝光率及點擊率,有助將其轉換成銷量。若資訊安全的預防措施不足,容易受到網絡攻擊及內部安全問題。在這情況下更顯得網站漏洞掃描對企業的重要性,下文會為大家一一講解網站漏洞掃描。 為什麼企業需要網站漏洞掃描?
Thumbnail
有了MySQL後,當然就要下指令來玩玩 能玩爆代表你有天賦,每一次爆炸你又能修復就是成長大躍進的時刻 但是看看你的資料庫空空如也,只有系統DB怎麼辦咧 還好網路上有很多善心人士願意分享範例資料庫供人使用 話不多說就來試試看吧  1. 先找到你要的範例資料庫 範例資料庫下載
Thumbnail
有了MySQL後,當然就要下指令來玩玩 能玩爆代表你有天賦,每一次爆炸你又能修復就是成長大躍進的時刻 但是看看你的資料庫空空如也,只有系統DB怎麼辦咧 還好網路上有很多善心人士願意分享範例資料庫供人使用 話不多說就來試試看吧  1. 先找到你要的範例資料庫 範例資料庫下載
Thumbnail
假如你開發了一個網站,有user登入的功能,駭客故意輸入SQL語法來破壞原本的SQL結構,這就是SQL注入攻擊。
Thumbnail
假如你開發了一個網站,有user登入的功能,駭客故意輸入SQL語法來破壞原本的SQL結構,這就是SQL注入攻擊。
Thumbnail
CSRF全名為 Cross Site Request Forgery( 跨站請求偽造)。
Thumbnail
CSRF全名為 Cross Site Request Forgery( 跨站請求偽造)。
Thumbnail
1. 設定cookie為HttpOnly 在一般的情況下,cookie是可以透過javascript來存取的(document.cookie),如同上一篇所說的,有可能會有XSS攻擊的風險。 將cookie設定為HttpOnly,表示這個cookie無法透過js存取。
Thumbnail
1. 設定cookie為HttpOnly 在一般的情況下,cookie是可以透過javascript來存取的(document.cookie),如同上一篇所說的,有可能會有XSS攻擊的風險。 將cookie設定為HttpOnly,表示這個cookie無法透過js存取。
Thumbnail
Cross-Site Scripting簡稱XSS,它指的是駭客在網頁裡插入惡意程式碼,當其他user瀏覽該網頁時,惡意網頁程式碼就會被執行。
Thumbnail
Cross-Site Scripting簡稱XSS,它指的是駭客在網頁裡插入惡意程式碼,當其他user瀏覽該網頁時,惡意網頁程式碼就會被執行。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News