安全


开场

魂淡别碰的孩子(接口),
作为后端程序猿自己写的接口就像自己的孩子一样,尽然制造出来了,那就要对他以后的人生负责到底;
随着业务的壮大,需要支撑业务接口也越来越多,使用的用户量变大,虎视眈眈的黑客们视机而动,总是在业务中寻找着可以窃取他人利益的入口,所以我们应该多考虑安全性问题,防范于未然。


场景

服务端程序猿根据需求开发出业务相关的接口,用来满足需求中用户和服务器交互的功能,提供给前端或者客户端(PC端软件,APP端应用)使用,
大部分程序猿在开发接口的时候就仅仅去考虑如何实现业务上的逻辑功能,而往往很少会去考虑接口的安全性问题,
一般服务端提供的接口都是http协议的,通过Fiddler,Wireshark,Charles等抓包工具,可以抓取到http请求,然后进行分析,模拟请求,进行并发请求,或者修改信息的攻击。


例子:

问题1. 接口暴露用户隐私信息就相当于在光天化日下裸奔,被看光了

描述:程序猿在做业务接口的时候往往没有保护用户隐私的意识,把用户的隐私信息暴露在外面,一旦被人利用起来会给用户带来麻烦,同时被发现会降低平台的信任度;

防:

  1. 用户隐私数据加密,加*号,如用户的相关数据的JSON中有用户手机号,用户邮箱,支付账号,邮寄地址等隐私数据;
  2. 用户请求接口时需要对其隐私参数加密:如用户登陆请求登陆接口,需要将用户密码进行可逆加密,以免接口被恶意代理捕捉请求后获取明文密码;
  3. 分享出去的地址中不要用明文的用户ID,或者用户登录的token

问题2. 接口暴露敏感信息,就像把钥匙插在钥匙口没拔掉一样,只要你会开门就能进去

用户参与活动的数据JSON集合中不要有活动相关业务逻辑的决定性的数据,如:竞拍出价活动,出价唯一最低者拿奖品,结果获取出价的接口暴露了所有出价的价格统计结果。

防:

  1. 数据中需要将敏感字段,或者对业务有着决定性作用的字段中的部分字符串加*;

问题3.数据被人顺手带走(主业务接口相关JSON数据 如:首页商品列表数据)

描述:接口中的JSON数据会被其他人拿去做自己的相关的功能;这样就造成了服务器的额外支出

防:

  1. IP请求量限制,时间范围内请求量限制,等各种限制IP请求的规则,
    如:统计记录(可以记录到mongdb中),定时监控记录发现请求量大于限制的数量就进行IP封杀;
  2. 请求头的校验,如:User-Agent 校验请求头是不是APP客服端发起,Referer 是不是有来源,来源域名是不是自己的域名地址等(这种方式只能是多一个门槛);

问题4.移花接木,恶意修改请求信息(修改参数,COOKIE,请求头信息)

描述:通过修改请求中的参数来发起的请求,如:登陆接口修改用户名和用户密码,进行密码库碰撞等。

温馨提示:
修改请求参数可能会导致很多安全性问题,如:SQL注入,XSS 跨站脚本攻击等,传送门我的【大话程序猿眼里的WEB安全】有相关的介绍和解决方案
以下方案都针对客户端,如PC软件和APP,WEB端JS去做加密的话不是很推荐,JS代码是暴露出来的,所以如果用JS做加密一定要混淆JS代码

防:

  1. 增加一个签名参数,将参数名进行逻辑的排序组合拼接+秘钥MD5,然后服务端接受到请求的时候也用同样的逻辑得到签名与签名参数进行对比是否相同,这样可以使参数无法被修改,修改了就提示非法请求。
    如:
    接口http://www.test.com/go/?actid=1&userid=123 我们可以加一个sign参数= MD5(actid=1&userid=123&【secret】)【secret】=秘钥,自己定义。
    服务端用一样的逻辑得到密文和sign签名进行对比是否一样,不一样就提示非法请求。

  2. 整个参数内容进行可逆的加密

  3. 限制参数范围,如:支持分页接口,很多人会为了方便使用,加了参数就是pagesize(一页的数据量),当没有去限制页码最大值得时候,如果表数据量很大,然后攻击者修改pagesize参数为N万,然后数据库就奔溃了,相关业务就挂了。


问题5.影分身术,模拟请求,发起并发请求

描述:通过抓包工具抓到请求后模拟请求,如:模拟每日签到请求,或者直接发起每日签到的并发请求。
温馨提示:当请求并发后如何保证数据的完整性,一致性问题,这也是平时开发很需要注意的问题,传送门我的【大话程序员眼里的高并发】有相关的介绍和解决方案。

防:

  1. 模拟并发请求,IP限制同上问题2的解决方案。
  2. 请求信息带上时间(可逆加密的时间),服务端获取时间,超过限定时间的返回请求超时(目的使抓取到的请求不是一直有效的)。
  3. 用户token,等标识用户重要的信息数据,保存COOKIE需要设置过期时间,或者加密的明文里要有创建的时间,服务端做对应的时间失效的限制,这样即使COOKIE被别人盗取,模拟请求也会随着时间而失效;

总结

我们需要提高自己的安全意识,防范于未然,要多站在攻击者的角度来看自己的接口;(让自己有一种被害妄想症的感觉,你就离精神病近了一步,<( ̄︶ ̄)↗ )
不要做开发需求的机器人,我们是有思想有创造力的开发者;


附加个人开发流程

在评审需求的时候要把业务逻辑问题提出来,并给予解决方案的选择;
确定需求后将整个业务逻辑的梳理清楚,复杂的可以画出流程图;
根据需求设计实现方案,需要考虑性能问题[数据库压力,服务器压力],安全问题,用文档的形式记录下自己的设计方案。(可以深入到代码层面如何去实现);
列出需求中功能点,评估出自己的时间,得到总工时;
开始开发,开干;


哈哈

转载请申明原地址,谢谢合作 ,【原文地址】
如有任何想说的请留言哦,我会根据大家的建议修改有疑义的内容和新增总结
欢迎大家关注我的Github

魂淡别碰的孩子(接口)相关推荐

  1. vb吐槽班02 不要以为学生信息管理系统很难啊魂淡!

        诶,好的好的,今天依旧是我给大家带来大型情感类电脑连续节目vb吐槽班,我们依旧是吐的飞起,感觉好恶心...     自从上次在csdn发过博客之后,一直生活在水深火热的预习专业课的生活中,毕竟 ...

  2. .....不敢私藏,魂淡啊...游戏程序员们懂的

    http://home.verycd.com/vc_my_iframe.php?uid=5376637&myiframe=my_post_folder 转载于:https://www.cnbl ...

  3. 【家长需知】心田花开:孩子注意力不集中训练方法有哪些?

    相信许多妈妈都为自家孩子的学习发愁过,在仔细观察孩子的学习状态之后,发现孩子在写作业和学习的时候,思想老跑神,注意力很不集中.可是作为家长,应该怎么办呢?有没有什么方法能够帮助孩子提升自己的注意力呢? ...

  4. 富养还是穷养,决定孩子的一生

    是什么决定孩子未来物质能否丰盛?为什么说寒门很难出贵子,三代才能出贵族?真的是父母必须有钱,才能大概率保证孩子未来富有吗?-----作者:@李雪爱与自由事实并非由物质决定,而是由心灵决定.一朋友富有而 ...

  5. 抽象与接口的区别(个人理解)

    前面说一说定义,后面用自己的个人的通俗理解解释一下两者. 如果你已经明白了定义,可以直接到最后参考一下我的个人理解. 什么是抽象 抽象是从众多的事物中抽取出共同的.本质性的特征,而舍弃其非本质的特征的 ...

  6. 重点 (七) : 开发技巧/方法

    介绍 http://www.cocoachina.com/ios/20150717/12626.html 这篇文章主要是介绍一下我在iOS开发中使用到的一些可以提升开发效率的方法和工具. IDE 首先 ...

  7. java jni 参数_Java 与 JNI 互传数据的那些事

    常规类型的传递 这部分算是 JNI 的基本内容, 理所当然的有一大坨接口来干这些事情, 比如 NewString, GetStringChars, GetArrayLength, NewByteArr ...

  8. 亿级流量 | 蚂蚁金服分布式事务实践解析

    <SOFA:Channel/>,有趣实用的分布式架构频道. 本文根据 SOFAChannel#12 直播分享整理,主题:蚂蚁金服分布式事务实践解析.回顾视频以及 PPT 查看地址见文末. ...

  9. FinTech:一个单体系统足以撑起银行持续交付全球大项目

    刘华 Kenneth DBAplus社群(dbaplus) 读完需要 10 分钟 速读仅需 4 分钟 作者介绍 刘华(Kenneth),就职于世界500强银行,负责基金服务业务软件开发与交付,DevO ...

最新文章

  1. 工作日志-W1444
  2. OpenJudge/Poj 2027 No Brainer
  3. Nginx面试!mysql时间类型以及获取当前时间,干货满满
  4. 北海市卫生学校计算机教室,北海卫校2021年招生简章_北海市卫生学校
  5. codeforces 665B Shopping
  6. echars vue 添加数据没更新_Vue遍历数据,并添加到右侧数组
  7. 为什么你应该尝试全栈
  8. java mvc 批量插入_请教mysql spring mvc +mybatis中批量插入的问题?
  9. HDU多校2 - 6774 String Distance(序列自动机优化lcs)
  10. XML解析——Jsoup解析器
  11. Vue在渲染函数createELement和JSX中使用插槽slot
  12. C语言课后习题(42)
  13. java底部菜单_安卓开发笔记——TabHost组件(一)(实现底部菜单导航)
  14. 关于计算机的幻想作文600字,科学幻想作文600字
  15. 【git】从零开始在git上部署自己的免费生日祝福网页
  16. android倒计时服务,Android倒计时器——CountDownTimer
  17. C++ 万年历、生肖判断、计算第几天
  18. Difference-Guided Representation LearningNetwork for Multivariate Time-SeriesClassification(TCYB)
  19. 字体侵权太严重,我准备了700款可商用字体
  20. SAP中货物移动库位权限管理测试

热门文章

  1. python图片分类管理系统_图片分类工具MyQcloudImage免费版下载(图片管理系统) V1.0 绿色版_数码资源网...
  2. 算法设计与分析-《分治法》
  3. 分布式技术与实战第五课 分布式-消息中间件选型
  4. 迪杰斯特拉,弗洛伊德,bellman-ford和SPFA的学习笔记
  5. 普通代理IP如何避免被X-Forward-For发现?
  6. 高通开发系列 - msm-4.9中USB Bring Up
  7. java 设置dns_通过代码直接设置Java的DNS - Java Dns Cache Manipulator
  8. 李强的感恩演讲《同心无敌》中的一段
  9. 陌陌开始移动直播,它和那些竞品们有何不同?
  10. JSP表单中的隐藏域