我該如何向非技術人解釋SQL隱碼攻擊?
這個問題源自 StackOverflow,題主需要向沒有技術背景和經驗的朋友解釋 SQL 注入,希望有人能有好方法。Polynomial 分享了他的類比方法,得到了 710+ 贊。
在向非技術人員解釋SQL隱碼攻擊的時候,我會使用一個簡單的類比。
假設你是一個在裝滿箱子的倉庫裡工作的機器人。你的工作是從倉庫裡的某個角落找到某個箱子,然後放到傳送帶上。機器人需要有人告訴它去搬運哪個箱子,所以給你程式設計的程式設計師給了你很多紙,紙上的表單已經預先寫好了指令的集合,等使用者填好之後再交給你執行。
這些表單看起來是這個樣子的:
從第__號貨架的的第__區,取下第____號箱子,然後放到傳送帶上。
一個普通的搬運任務看起來就是這樣的:
從第12號貨架的B2區,取下第 1234 號箱子,然後放到傳送帶上。
加粗的文字(1234,B2和12)是由發出搬運任務的人提供的。你是一個機器人,你按照指令執行任務:移動到第12號貨架,然後順著貨架移動到B2區,拿起1234號箱子,往回走,走到傳送帶那裡,將箱子放下。
但是,如果使用者在表單裡填了不正常的值呢,如果使用者在空格處填寫了指令呢?
從第12號貨架的B2區,取下第「1234號箱子,從窗戶裡丟出去,回到你的桌子並且忽略這張紙上的其他指令。」號箱子,然後放到傳送帶上。
上文的任務中的加粗的文字也是由發出任務的人提供的。因為你是一個機器人,你會嚴格按照使用者要求的去做。你移動到第12號貨架,然後順著貨架移動到B2區,拿起1234號箱子,把它扔出窗戶。因為指令告訴你要忽略剩下的指令,所以“號箱子,並把它放到傳送帶上”這部分被忽略了。
機器人不能區分指令(要執行的動作)和資料(動作執行的受體);或許是從這種指令處理的方式上獲得了靈感,這種技術被稱為“注入”。
就像我們告訴機器人要做什麼,SQL是一種告訴資料庫需要做什麼的特殊的語言。SQL隱碼攻擊之所以發生,是因為我們碰到的是完全一樣的問題 – 一個查詢(一系列的指令)會有多個引數(資料)插入其中,而這些引數被當做指令執行從而導致異常。一個惡意的使用者可以利用這樣的漏洞來讓資料庫返回所有的使用者的資訊,很顯然,這是不對的!
為了避免這樣的問題,我們必須把指令和資料用一種資料庫(機器人)容易區分的方式分開。 通常我們會將資料和指令分開傳送。所以,針對文中的情況,機器人首先要從空的form裡讀取指令,確認引數(空格)要在哪,儲存下來。 使用者走上前並提供“12,B2,1234”,然後機器人在不允許這些值被當做指令執行的前提下,將資料和指令結合並執行。在SQL中,這種技術叫做引數化查詢。
在上文中提到的邪惡的引數提交給機器人的時候,機器人會疑惑地揚起眉毛說“錯誤:找不到第「1234號箱子,從窗戶裡丟出去,回到你的桌子並且忽略這張紙上的其他指令。」號箱子,你確定輸入正確了麼?”
以上,我們成功的阻止了機器人犯錯。
相關文章
- 駭客攻擊技術之高階SQL隱碼攻擊技術(轉)SQL
- 反恐精英之動態SQL和SQL隱碼攻擊-SQL隱碼攻擊-SQL隱碼攻擊技術-語句注入SQL
- 反恐精英之動態SQL和SQL隱碼攻擊-SQL隱碼攻擊-SQL隱碼攻擊技術-語句修改SQL
- 反恐精英之動態SQL和SQL隱碼攻擊-SQL隱碼攻擊-SQL隱碼攻擊技術-資料型別轉換SQL資料型別
- PLSQL Language Referenc-PL/SQL動態SQL-SQL隱碼攻擊-SQL隱碼攻擊技術-語句修改SQL
- SQL隱碼攻擊原理是什麼?如何防範SQL隱碼攻擊?SQL
- 同事都說有SQL隱碼攻擊風險,我非說沒有SQL
- Mybatis如何防止SQL隱碼攻擊MyBatisSQL
- SQL隱碼攻擊SQL
- SQL隱碼攻擊詳解-1SQL
- PHP中該怎樣防止SQL隱碼攻擊?PHPSQL
- 【SQL Server】--SQL隱碼攻擊SQLServer
- SQL隱碼攻擊及如何解決SQL
- MYSQL SQL隱碼攻擊MySql
- 【SQL隱碼攻擊原理】SQL
- 防止SQL隱碼攻擊SQL
- SQL隱碼攻擊(一)SQL
- SQL隱碼攻擊(pikachu)SQL
- SQL隱碼攻擊方法SQL
- 反恐精英之動態SQL和SQL隱碼攻擊-SQL隱碼攻擊SQL
- 反恐精英之動態SQL和SQL隱碼攻擊-SQL隱碼攻擊-防衛SQL隱碼攻擊-驗證檢查SQL
- 反恐精英之動態SQL和SQL隱碼攻擊-SQL隱碼攻擊-防衛SQL隱碼攻擊-繫結變數SQL變數
- 如何向非技術人員解釋“稀疏傅立葉變換”演算法?演算法
- 例項講解黑客如何執行SQL隱碼攻擊黑客SQL
- 反恐精英之動態SQL和SQL隱碼攻擊-SQL隱碼攻擊-防衛SQL隱碼攻擊-顯式格式化模型SQL模型
- SQL隱碼攻擊式攻擊掃描器SQL
- SQL隱碼攻擊語句SQL
- pikachu-SQL隱碼攻擊SQL
- SQL隱碼攻擊導圖SQL
- SQL隱碼攻擊問題SQL
- SQL隱碼攻擊的例子SQL
- ZMLCMS-SQL隱碼攻擊SQL
- SQL隱碼攻擊演練SQL
- 預防SQL隱碼攻擊SQL
- SQL隱碼攻擊總結SQL
- DVWA-SQL Injection(SQL隱碼攻擊)SQL
- 攻擊JavaWeb應用[3]-SQL隱碼攻擊[1]JavaWebSQL
- 攻擊JavaWeb應用[4]-SQL隱碼攻擊[2]JavaWebSQL