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

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

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 安全监控


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

 

总结


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


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

相关文章
|
6天前
|
监控 测试技术
软件项目开发中会遇到哪些风险,如何才能降低这些风险呢?
软件项目开发中会遇到哪些风险,如何才能降低这些风险呢?
84 0
|
6天前
|
存储 安全 网络安全
怎么处理网站的一些安全风险
为了防范这些安全隐患,网站维护人员应采取一系列安全措施,包括及时更新服务器系统安全漏洞补丁、加强服务器安全防护能力、制定有效的风险预警机制、加密数据、限制外来移动存储设备、管控上网行为等。此外,还应注意提高员工的安全意识和技能水平,增强法律保护意识。
|
监控 安全 数据安全/隐私保护
在开源代码的时候该如何避免安全风险的发生?
作为开发者来讲,不管是在实际开发中使用开源项目,还是直接投身于开源的贡献中,关于开源相关的内容想必都有自己独到的见解。开源与开发者息息相关,可能有的开发者会觉得不使用开源项目,自己就与开源无关了?这种想法是片面的,因为就算没有在实际开发中使用开源项目,但是在实际开发中肯定会用到一些第三方的插件,那么能保证这些插件没有用到开源的内容么?所以,开源与每一位开发者都有联系。
215 2
在开源代码的时候该如何避免安全风险的发生?
|
人工智能 大数据 云计算
测试-风险甄别
测试-风险甄别
|
敏捷开发 前端开发 测试技术
一个BUG导致3000万损失!涉及资金交易的功能该如何做好测试和项目管理
一个BUG导致3000万损失!涉及资金交易的功能该如何做好测试和项目管理
210 0
一个BUG导致3000万损失!涉及资金交易的功能该如何做好测试和项目管理
|
安全 程序员 数据库
可控参数带来的网站漏洞修复建议方案
网站中存在的越权漏洞,首先我们来讲一下什么是关键可控参数,也就是说像我们的一些关键参数,例如use ID order by ID就是一些关键的参数,必须是你的这么一个测试者,是能够去对其控制的。如果这个参数已经挟持了,或者说他有固定的这个值。那此时的话就不称为可控参数了。而关键就是你的改动必须能造成这个越权效果的一种称为关键参数。我们一定要快速定位到这种关键可控的这个参数之后,我们才能够更快速的去找到对应的这么一个越权漏洞。
150 0
可控参数带来的网站漏洞修复建议方案
软件项目常见风险及其预防措施
(1)合同风险 签订的合同不科学、不严谨,项目边界和各方面责任界定不清楚等是影响项目成败的重大因素之一。 预防这种风险的办法是项目建设之初项目经理就需要全面准确地了解合同各条款的内容、尽早和合同各方就模糊或不明确的条款签订补充协议。
6220 0
|
监控 安全 数据安全/隐私保护
网站漏洞整改修复公司如何部署安全方案
目前网站存在漏洞导致被网警下发整改通知以及限期处理并回执的问题越来越多,云计算等技术极大地促进了服务器资源的分配和系统的部署,但随之而来的是资产管理中的安全风险。有些人没有及时回收资源和更新资产,在网上形成了僵尸主机,很容易成为攻击者的肉机。为有效保障企业工作的发展,相关法律法规明确要求网络管理人员及时处理系统漏洞、病毒、攻击等安全风险。但实际上,部分人员缺乏安全意识,对安全漏洞重视不够,部分企业缺乏足够的技术能力进行修复,导致上述安全风险未及时修复。
199 0
网站漏洞整改修复公司如何部署安全方案
|
存储 监控 安全
渗透测试对客户网站的前提准备事项
对于客户的渗透测试来说,在进行前与用户沟通某些有关事项是非常必要的:首先是渗透测试的目的:用户这次的需求是什么?等待保险、日常安全检查或者其他目的,不同的目的决定了不同的漏洞评估等级,在测试过程中也感受到不同的方法。二是渗透测试总体目标:总体目标通常分为服务器和软件系统,这两个总体目标的渗透方式大致相同。做软件系统的渗透测试,还要辨别软件系统后端的服务器。往往在软件系统渗透失败的时候,我们可以从服务器层面突破,反之亦然。第三是总体目标环境:通常我们的渗透测试会在两个环境下进行,一个是生产环境,一个是测试环境。不同的环境对渗透测试有不同的要求。假如是生产环境,我们还要防止DoS拒绝服务、跨站脚本
194 0
渗透测试对客户网站的前提准备事项
|
安全 关系型数据库 测试技术