[閒聊] 2017.W22 - SQL Injection

看板NetSecurity (資安 資訊安全)作者 (請多指教!!)時間7年前 (2017/05/30 21:41), 編輯推噓5(506)
留言11則, 10人參與, 最新討論串1/1
2017.W22 - SQL Injection > 都 2017 年了 SQL Injection 還沒絕種 ## 前言 ## 前幾天突然發現有不少登入次數 <20 的帳號在看這個版的文章 來源 IP 都很固定 突然想到... 如果在文章內容中塞入 SQL 語法 那些爬蟲會不會就中標了... ## 內容 ## SQL Injection[0] 是一種發生在資料庫層的安全漏洞 主要是在執行 SQL 語法時夾帶了意料之外的參數 導致執行了預期以外的結果 一個有年代可以被 SQL Injection 語法可以是 SELECT count(*) from account WHERE user = '$USER' and password = '$PASSWORD'; 預期透過使用者填入的 USER 與 PASSWORD 參數來判斷使用者輸入的內容是否正確 (藉由回傳非 0 值) 顯而易見的 在 2017 年的現在這種寫法應該是已經不存在了 原因在於透過沒有被過濾的輸入值 (像是 PASSWORD 輸入成 1' OR '1' = '1) 就可以無視密碼是否正確而成功登入... 同樣的 假設網路爬蟲為了搜尋本網頁的內容 並找出所有的超連結[1] 可能的做法會是先用正規表示法找到所有 http:// 或 https:// 開頭的內容 並且塞入到 DB 當中 這樣可能的寫法會是... 1. 先用 http[s]?://\S+ 來找到所有的超連結 2. 透過 INSERT INTO ptt.hyperlink (board, link) VALUES ('NewSecurity', '$LINK') 透過沒有過濾的 LINK 參數 就可以被一個惡意的超連結導致 Table 被刪除 (當然前提是爬蟲會處理將 %20 轉回成空白) 不過在重新提醒: SQL Injection 會發生的主要原因 在於信任 User 輸入的內容而直接帶入到 SQL 語法中 透過正確的過濾 與正確使用第三方套件 可以避免 SQL Injection 發生在 2017 的現在 [0]: https://zh.wikipedia.org/wiki/SQL%E8%B3%87%E6%96%99%E9%9A%B1%E7%A2%BC%E6%94%BB%E6%93%8A [1]: https://zh.wikipedia.org/zh-tw/%E8%B6%85%E9%80%A3%E7%B5%90 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 123.193.122.171 ※ 文章網址: https://www.ptt.cc/bbs/NetSecurity/M.1496151667.A.759.html

05/31 07:40, , 1F
看完這篇 mo就異常終止 呃。。。。。
05/31 07:40, 1F

05/31 08:27, , 2F
樓上是認真的嗎.... 那一定要研究 mo 了 XD
05/31 08:27, 2F

05/31 11:38, , 3F
QQ 我在 iPhone 上試過 moptt / guest 沒事情
05/31 11:38, 3F

05/31 11:59, , 4F
好猛喔
05/31 11:59, 4F

05/31 22:32, , 5F
想推這個... https://xkcd.com/327/
05/31 22:32, 5F

06/01 10:48, , 6F
推薦文章。
06/01 10:48, 6F

06/08 10:51, , 7F
push
06/08 10:51, 7F

06/12 08:33, , 8F
06/12 08:33, 8F

06/15 12:53, , 9F
參數化查詢就避掉的低階技術,怎反應最熱烈,唉..
06/15 12:53, 9F

06/21 17:52, , 10F
因為門檻最低呀,可以自己試而且立竿見影
06/21 17:52, 10F

08/12 10:10, , 11F
我用Mo Ptt沒事R
08/12 10:10, 11F
文章代碼(AID): #1PBNPpTP (NetSecurity)
文章代碼(AID): #1PBNPpTP (NetSecurity)