专栏首页编程一生项目中必须对应的隐性需求-安全漏洞修复

项目中必须对应的隐性需求-安全漏洞修复

WHAT

项目中必须对应的隐性需求-安全漏洞修复

WHY

    小时候下围棋,总乐于持白子。因为我的打法是“从那里来我哪里堵”,在防守中寻找对方的漏洞。这种作战方法是有底层的思想根因的:就是懒惰。不愿意去主动思考布局。

    在这一思想的引导下,我目前正面临着过去十多年积累起来的困境。记得大学之前,面对一个认识的人,我心里是有预期的。我大体知道这个人在想什么。慢慢的,除了我周围的亲人,其他人站在我面前我大脑一片空白。曾经以为这是因为我面对的环境更加复杂了。后来细想这不是本因,本因是我正一点点的失去获得常识的能力。

    小时候很爱大自己十岁的亲哥哥,他不喜欢我,视我为资源掠夺者。我想当时是遇到过一些事情,但不至于是什么忍受不了的大事。我却选择了逃避,在上大学时消除了自己的部分记忆。怕压力,第一份工作在一个二线城市世外桃源一样的大园子里上班。后来想换地方,找了现在的老公先给我铺路。因为毕业比同龄人略早些,所以在没有结婚压力的时候就结婚了,没有生子压力的时候就生娃了。仗着运气好嫁对了人,万事不操心,过着白痴一样的生活。不知己之痛,更不知别人之痛。所以常识渐失。

    电视剧《黄真伊》里面一句话:艺术最重要的是痛苦。后来想痛苦大概是最重要一种能力。在设定项目计划的时候,最重要的要解决痛点。很多人的成功都来源于梦想和渴望。而梦想和渴望就是求而未得之痛。下棋时更愿意花心思去布局的人必然是对成功渴望更大的人。棋未下,我已经输了。

    安全问题或许是一多半产品人员在提需求的时候都不会特意强调的东西,却是对技术人员来说必须要考虑的常识。XXX被DDos攻击,系统瘫痪。XXX数据泄露导致股价大跌,公司被起诉。最近风口浪尖上的脸书照片事件就是血淋漓的例子。一旦遇上,卷铺盖走人算是轻的了。如果技术人员不慎重对待,结果必然会如现在的我一样,陷入作茧自缚的困境。

HOW

    今天将一些产品或者上上下下都会考虑的显性安全需求(如合规需求)排除在外,总结下开发人员必备的安全设计。在我看来,这个如限流、降级一样,属于系统的稳定性范畴,当然很多人将其独立出来作为安全性范畴也是非常合理的。

    这类设计总结来说是用来解决两类问题。一个是自己不作死,另一个是不被别人搞死。

一.不作死

1.1 准入校验

 1.1.1 文本准入

    1.1.2 操作合理性准入

1.2 数据处理

    1.2.1 输入转义

    1.2.2 输出转义

    1.2.3 敏感信息加密

1.3 权限控制

    1.3.1 杜绝批量操作

    1.3.2 限制暴露范围

二.不被搞死

2.1 应对代码注入

    2.1.1 XSS攻击

    2.1.2 CSRF攻击

    2.1.3 mysql注入攻击

2.2 漏洞补丁升级

    2.2.1 弱口令漏洞

    2.2.2 开源代码漏洞

    2.2.3 文件上传漏洞

2.3 基础安全设施

    2.3.1 WAF

    2.3.2 安全审计

    2.3.3 风控

    2.3.4 安全监控

上面的目录我先单独列一下,希望大家可以记住。都是平时开发中需要考虑的。下面稍详细的介绍一下。

 1.1.1 文本准入

做业务需求有个常识,对于用户输入的每个字段都需要和产品经理讨论一下:什么类型、长度多少、允许的字符集范围、格式是否合法。这么做一方面是设计问题,包括产品设计、数据库设计,还有一部分是安全问题:一个数值型的字段肯定比一个粗放的文本型字段被攻击的可能性小,起码不会传到后端之后被当成脚本被执行。

1.1.2 操作合理性准入

比如一个普通用户不能编辑另一个用户的个人信息。比如i申请公司服务器,一次申请1万台机器。比如流量准入,一台机器以超快的速度频繁访问一个网站的资讯信息,就可能不是真实用户操作而是爬虫。以上都会对系统安全性产生极大的影响。

1.2.1 输入转义 & 1.2.2 输出转义

我在项目有个原则:尽量保存用户的原始信息。比如用户输入一个页面脚本编写方法的文章,在数据库中保存的时候,尽量只转义sql关键字(apache 里有现成的转义方法)而不转义html和js脚本。html和脚本在显示再做转义。

1.2.3 敏感信息加密

最基本的用户密码必须密文存储,并且不能明文出现在日志中。 其他信息如手机号、银行卡号等不能全文显示。一般的表示方法是XXX***XXXX。

1.3.1 杜绝批量操作

常规代码里的操作都必须是点对点的。批量操作,查询可以,只要能保证存储压力够。要是批量的执行XXX,应用场景有:比如临时的一次性操作。如果是常规操作,那就必须走审批,而且一次操作必须有个数限制,保证出了问题影响范围也可控。

1.3.2 限制暴露范围

开发一整套系统内部各个模块通常有内网域名、外网域名或者dubbo这种服务注册发现机制。这种区分出了传输效率、成本、资源等考虑之外,还有一个很重要的因素就是安全。一个外网服务肯定要比一个内网服务更可能遭到攻击。

2.1.1 XSS攻击

XSS(Cross Site Scripting)攻击全称跨站脚本攻击,是为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆。它是一种在web应用中的计算机安全漏洞,它允许恶意web用户将代码植入到提供给其他用户使用的页面中。

危害包括:

1>盗取各类用户账号,如机器登陆账号、用户网银账号、各类管理员账号

2>控制企业数据,包括读取、篡改、添加、删除企业敏感数据的能力。

3>盗窃企业重要的具有商业价值的资料

4>非法转账

5>强制发送电子邮件

6>网站挂么

7>控制受害者机器想其他网站发起攻击

2.1.2 CSRF攻击

CSRF(Cross-site request forgery),中文名称:跨站请求伪造。也被称为:one click attack/session riding。区别于XSS的利用站点内的信任用户,它通过伪装成受信任用户的请求来达到目的。

常见特性:

1>依靠用户标识危害网站

2>利用网站对用户标识的信任

3>欺骗用户的浏览器发送http请求给目标站点

2.1.3 mysql注入攻击

概念很好理解不多说。介绍一下种类:

1>GET注入:输入参数通过URL发送

2>POST注入:输出参数通过HTTP正文发送

3>COOKIE注入:输入参数通过HTTP COOKIE发送

3>HTTP Headers注入:通过HTTP提交应用程序使用的头发送

2.2.1 弱口令漏洞

弱口令(weak password)没有严格和准确的定义,通过人为容易被别人猜测到或被破解工具破解的口令。主要类别有:

1>空口令或系统缺省的口令

2>口令长度小于8个字符

3>口令为连续的某个字符或重复的某些字符

4>口令应该为以下四类字符的组合,大写字母、小写字母、数字和特殊字符。没类字符至少包含一个。如果某类字符只包含一个,那么该字符不应为首字符或尾字符。

5>口令不应汉堡本人、父母、子女和配偶的姓名和出生日期、纪念日期、登陆名、email等与本人有关的信息,以及字典中的单词。

6>口令不应该为用数据或符号代替某些字母的单词

7>至少90天内更换一次口令,防止未被发现的入侵者继续使用该口令。

    记得很久之前在日本出差的时候,当地人都下班了,我们需要登录系统查看东西。但是只有当地人有密码,还好有我。我在当时别人输出密码时记住了,省了大事儿。

2.2.2 开源代码漏洞

举几个例子:

1>Jackson反序列化远程代码执行漏洞

北京时间2017年4月15日,jackson框架被发现存在一个反序列化代码执行漏洞。该漏洞存在于Jackson框架下的enableDefaultTyping方法。攻击者可以远程在服务器主机上越权执行任意代码,从而取得该网站服务器的控制权。

2>Jboss远程代码执行漏洞

Java应用里都有特定的接口用于传递序列化对象数据,而在反序列化时没有限制实例化对象的类型,导致可以任意构造用用中已经包含的对象利用反序列化操作进行实例化。

2.2.3 文件上传漏洞

这个获得服务器权限的直接性就不多说了。说说工作中一般的预防措施吧。

1>客户端校验:规定上传文件的后缀

2>服务端校验:主要是文件头校验,如content-type等

2.3.1 WAF

Web应用防护系统(Web Applicatio Firewall)是通过执行一系列针对http/https的安全策略来专门为web应用提供保护的一款产品。主要特点是:

1>异常检测协议

    对http的请求进行异常检测,拒绝不合符http标准的请求。也可以只允许http协议的部分选项通过,从而减少攻击的影响范围。

2>增强的输入验证

3>及时补丁

4>基于规则的保护和基于异常的保护

5>状态管理

2.3.2 安全审计

是由专业审计人员根据有关的法律法规、财产所有者的委托和管理当局的授权,对计算机网络环境下的有关活动或行为进行系统的、独立的检查验证,并做出相应评价。

    静儿接触多的是金融方面的,太多合规操作:包括服务器独立部署、牌照、一清二清,做金融业务开发对比如8583报文、银行发布的各类文件都要仔细研读。

2.3.3 风控

风险控制的四种基本方法:风险回避、损失控制、风险转移和风险保留。金融的核心就是风控。

2.3.4 安全监控

    安全监控通过实时监控网络或主机活动、监视分析用户和系统的行为,审计系统配置和漏洞,评估敏感系统和数据的完整性,识别攻击行为,对异常行为进行统计和跟踪,识别违反安全法规的行为,使用诱骗服务器记录黑客行为等功能,使管理员有效的监视、控制和评估网络或主机系统。

总结

    安全无小事,保持敬畏之心。

    互联网这个行业其实不怎么缺学东西快的,缺有想法的。但是很多有想法的人需要经历多次失败才会成功。这些失败就是碰上了安全等需要但是没有考虑的钉子才成为成功之母的。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 《跃迁-成为高手的技术》之联机学习

    今早我8点多到公司赶在别人上班之前把《跃迁》看到了185页。看了两节。一节是「联机学习者:成为知识的路由器」、另一节是《终身提问者:问题比答案更有效》。前一节提...

    静儿
  • 美团点评智能支付核心交易系统的可用性实践

    每个系统都有它最核心的指标。比如在收单领域:进件系统第一重要的是保证入件准确,第二重要的是保证上单效率。清结算系统第一重要的是保证准确打款,第二重要的是保证及时...

    静儿
  • 美团点评智能支付核心交易系统的可用性实践

    静儿
  • 教学直播系统的近未来走势如何

    根据艾瑞咨询发布的《中国在线教育市场数据发布报告》显示,教育行业未来整体分层将逐渐走向在线化,而类似于教学直播系统的线上教学产品也在逐一走向在线化。具体表现在以...

    万岳教育系统
  • [视频]又是德国人,开发出首尾相连的汽车,一窥未来交通

    大数据文摘
  • 职业履历(CV)

    个人信息应该包括姓名、住址、电话和电子邮件。我建议您把这些信息放到 CV 的顶部,让它看上去像信笺的抬头。

    耕耘实录
  • ADO大总结

    内容比较乱,作为草稿,对现有的ado数据库操作函数方法进行汇总。 小函数 m_pRecordset->RecordCount//取得记录数量 全局变量 #i...

    _gongluck
  • Python开发以太坊的类库Web3.

    Web3.py第4版的第一个测试版于2017年11月中旬发布,此后又发布了5个版本,目前已经稳定发布到4.6。主要版本变化意味着一些向后兼容的更改,以及这些更改...

    py3study
  • 防御Source Engine Query泛洪攻击(二)

    上一篇文章《防御Source Engine Query泛洪攻击(一)》提到使用限速模块对单IP进行请求限速,但若攻击者使用伪造的IP发送数据包,那么限速模块就不...

    TLingC
  • 【PPT】马斯克39页火星计划,硅谷钢铁侠的火星梦

    “硅谷钢铁侠”马斯克一直梦想着火星移民。作为现在SpaceX公司首席运营官,他提出了核心答案,在火星上建造一座完整的城市。

    钱塘数据

扫码关注云+社区

领取腾讯云代金券