产品安全设计十大原则

产品安全设计十大原则

原则1:最小化攻击面:

         系统每增加一个功能特性就有可能会引入新的风险,通过安全开发可以减少攻击面进而达到控制系统整体风险的目的。

         打个比方说,某在线web应用向用户提供了一个通过搜索来获取帮助的功能,如果后端代码没有正确实现该功能就有可能导致存在SQL注入漏洞,但是即便如此,我们还是有办法降低或消除风险的,比如:

u  该帮助功能只能被授权的用户使用。

u  后端代码对用户输入的数据进行了校验。

u  帮助功能不支持搜索,只支持查看。

可以看到,以上的第一、二点收缩了攻击面,即增加了攻击条件,减少了可以攻击的人数,而第三点则完全避免了风险,即攻击面完全消除了。其中第三点符合“简化系统设计”的原则,即不增加不必要的功能模块和特性。

原则2:Secure default:

         在软件领域的含义就是:让默认的配置和策略尽可能的安全。比如,在许多场合,安全和产品体验经常会发生冲突,这时候应当选择安全优先,在安全的前提下,可以允许通过手动关闭安全配置或策略来提升产品体验。

         比如,产品应该默认打开密码复杂度策略,即不允许用户使用不符合密码复杂度策略的密码,但产品可能可以允许用户关闭这个策略来提升体验。

注:只有充分了解业务安全需求的前提下,才能更好的使用该原则。

原则3:权限最小化:

         事物只拥有可以完成他们任务的最小权限,即不赋予不必要的权限。包括但不限于:用户权限和资源权限(比如可以使用的CPU、内存、网络流量和存储容量等等)。

         比如,某中间件服务器只需要访问网络、读取数据库和向日志服务器写日志的权限,那就完全没有必要赋予其更多其它的权限(特别是管理级别的特权)。

原则4:纵深防御:

         从不同的维度去实施安全保护措施来缓解被攻击的风险。实施纵深防御策略,可以让攻击变得更加难以实施,漏洞变得更加难以利用。

         比如,为了防止或减少SQL注入带来的危害,我们可以:

u  在应用外围部署WAF。

u  应用对输入数据进行有效性验证或进行参数化查询。

u  数据库连接账户隔离以及权限最小化。

u  敏感数据加密存储。

u  对数据库进行安全配置或关闭不必要的强大功能。

原则5:Fail securely:

         即业务系统能够正确安全地处理各种异常和错误。错误样例代码如下:

isAdmin = true;

try {

         codeWhichMayFail();

         isAdmin = isUserInRole( “Administrator” );

}

catch (Exception ex) {

         log.write(ex.toString());

}

当异常发生时,异常处理代码处理不当,可以导致普通用户直接提升为管理员用户。

原则6:不要信任第三方系统

         不少产品需要和第三方的业务系统对接,并使用其提供的数据,但是一般情况下,我们是无法掌控这些第三方系统的安全设计和开发过程的,所以它们也可能会存在安全漏洞,进而被人攻击,因此,我们必须充分考虑到当第三方系统被攻击时,如何保障自己的业务系统的安全性。

         比如:当我们向第三方系统查询数据时,必须对数据进行有效性验证后才可以使用(比如使用这些数据进行数据库查询或显示到用户浏览器上)。

原则7:业务隔离:

         基本思想是将业务系统尽分成尽可能多的独立单元,但某个单元出现安全缺陷时,可以将损害程度降到最低,通俗地说,就是不要把所有鸡蛋都放在一个篮子里。

         比如:将具有核心数据的业务和BBS部署在同一个服务器上,很多BBS站点都使用开源系统(比如 discuz)搭建,经常爆出各种漏洞,一旦BBS被攻陷,将会威胁到核心业务数据的安全性。

注:隔离可以是系统内部功能模块之间的(比如:web服务器和数据库服务器等),也可以业务部署层面之间的(比如:BBS和核心业务)。

原则8:公开设计:

         有些人认为,只要产品内部的实现细节不被外人知道,那么产品就是安全的,但其实这是一种保护效果比较差的方法。当然,并不是说这样做毫无意义,也的确增加了攻击的难度,但是不能对其形成过多依赖,甚至把它当成主要或唯一的安全防护手段。

         比如:不少公司都实现了自己的私有加密算法,他们认为只要算法不被泄露或公开,那么算法就是安全的,但实际面临以下问题:

u  攻击者可以通过抓包或逆向二进制来进行破解。

u  攻击者通过入侵服务器或给员工机器种植木马的方式来获取到源代码。

u  对公司不满的员工故意公开算法。

一旦以上任意条件满足时,则这种不公开设计方式的保护也就变得没有意义,因此,正确地做法应该是:假设算法被破解或完全公开,同样能保证系统的安全。典型的案例诸如业界广泛使用的对称加密算法(AES)和非对称加密算法(RSA),它们的设计实现都是公开的,但是仍然是安全的。

原则9:简化系统设计

         “最小化攻击面”和“简化系统设计”原则是相辅相成的,由于复杂的系统设计会导致攻击面变宽,所以如果存在多种系统设计方案,则应尽量选择最简单的那种方案。

原则10:正确地修复漏洞:

         一旦漏洞被发现和确认,首先要找到测试它的方法和弄清产生根因,对于产生漏洞的代码,需要确认该代码是否也在其它产品或版本上使用,即需要对漏洞进行完整地排查和修复。

时间: 2024-10-23 15:21:12

产品安全设计十大原则的相关文章

电商干货!1000万烧出来的高点击率钻展创意图十大原则(营销&人性)

梦想凯歌:创意图的钻展的灵魂,没有创意图你什么都不是.无论是日常推广还是做大促活动,创意图是测试的重中之重,一定要提前测试好每一个资源位的创意图.今天这篇好文是一个资深电商设计师在操作钻展烧了1000多万后总结的经验,不少技巧可以用在Banner设计上. 创意图是你获取流量的入口,由创意图延升到落地页,进而是整一个活动项目. 所以,这节课很关键,也是我这系列课程的重点.到目前操作钻展也至少烧了1000多万了. 很多朋友常常发图片给梦想凯歌,问如何优化?这十大原则是我梦想凯歌做创意图的总结! 虽然

优秀API设计的十大原则

优秀API设计的十大原则 2015-09-23    分类:编程开发.设计模式.首页精华暂无人评论 分享到:更多4 二十万年薪PHP工程师培养计划 成为被疯抢的Android牛人 风中叶讲Java重难点 Linux运维基础课程 本文由码农网 – 小峰原创翻译,转载请看清文末的转载要求,欢迎加入技术翻译小组! 每个软件开发人员都使用API.“优秀”的API设计就像魔法.不过,我不知道有多少人可以解释为什么有的API很复杂.很难学,而有的则干净.简单.使用起来堪称是一种快乐.关于这个问题,我将在文中

面向对象的十大原则

面向对象设计原则是OOPS(Object-Oriented Programming System,面向对象的程序设计系统)编程的核心,但大多数Java程序员追逐像Singleton.Decorator.Observer这样的设计模式,而不重视面向对象的分析和设计.甚至还有经验丰富的Java程序员没有听说过OOPS和SOLID设计原则,他们根本不知道设计原则的好处,也不知道如何依照这些原则来进行编程. 众所周知,Java编程最基本的原则就是要追求高内聚和低耦合的解决方案和代码模块设计.查看Apac

APP设计师必知:用户体验十大原则!

如 果想从众多的产品中脱颖而出,获得成功的话,其实最重要的突破点就是要抓住用户的体验,或者是抓住了用户的某一种心里,或者是在界面布局上大胆突破,或者 是做了很少有人关注到的细分领域,或者是让人产生了真实生活中的亲切感等等,但这一切都源来于生活中的设计的灵感和技巧. 1.流程图是一切工作的基础 如 果跳过流程图直接进入开发会让开发变得复杂.不可控,很容易让用户迷茫,所以最后用户必将选择关掉或者卸载你的App.所以,即便是一个简单的app也要 有一个思虑周全的流程图,以确保它有合乎逻辑的.合理的导航

远离故障的十大原则

发布时间:2013 年 2 月 18 日 发布者: OurMySQL 来源:hate mysql because you love her deeply 故障是运维人员永远的痛.相信每一个运维人员的KPI中都有一项:可用性.可用性高就是不出故障,各个公司对可用性和故障评级的标准都不相同,但是避免故障的方法却是殊途同归.我们怎么避免故障,沃趣科技简单列举了以下几条,与大家共勉!1.变更要有回滚,在同样的环境测试过2.对破坏性的操作谨慎小心3.设置好命令提示 4.备份并验证备份有效性5.对生产环境存

IIS使用十大原则,(IIS过期时间,IIS缓存设置) 【转载】

1. 自定义错误页虽然自定义错误页很简单,但只有少数管理员有效地利用了它.管理员可以在MMC中将HTTP错误信息映像到服务器上的绝对URL或是某个文件,更为详细的信息可以在这里找到.如果你嫌这太麻烦,想要更简单的方法,或者你希望开发者自己定义错误页,同时又不想让他们具有使用MMC的权限,你可以使用类似 Customer Error 这样的工具. 2. MetaBase研究如果你认为Apache功能强大是因为它有一个配置文件,那么你应该看一看IIS的MetaBase有多棒.使用MetaBase,管

选IDC服务器的十大原则

1.尽量直接找机房或者一级代理,而且更重要的是服务跟不跟的上,处理问题及不及时. 2.测试的机器应与打算购买的机器一致 ,有的IDC奸商,将测试的机器是至强机器,带宽放在100M的线上,用户测试时感觉的确快,但一转手到用户时,可能是普通的机器+普通的带宽,速度明显跟不上.要想体验真实的测试速度,必须确认测试的机器与打算购买的机器一致,也就是说,如果测试可以了,那就直接要这一台机,不用换线,不用换机器,不用下架. 3.签定托管/租用合同 很多人对于合同之事,不太重视,但一般机房或者一级代理,都提供

测试十大原则

一.测试是一个持续过程,而不是一个阶段. 二.测试必须被计划.被控制,而且被提供时间和资源. 三.测试应当有重点. 四.测试只能证明软件存在错误而不能证明软件没有错误. 五.测试是不可能穷尽的,当测试出口条件满足时就可以停止测试. 六.应当尽早地进行软件测试. 七.测试人员应当站在公正的立场上进行测试,如实的记录和报告缺陷. 八.所有的测试都应追溯到用户需求. 九.80%的软件缺陷常常存在软件20%的空间里面. 十.并非所有的软件缺陷都要修复. 原文地址:https://www.cnblogs.

PHP彩票源码论坛 API设计的十大原则

1.只做你今天需要的这是最顶级的规则,只解决今天必须解决的问题,PHP彩票源码论坛bbs.yasewl.com最小化需要完成的答案.解决明天的问题的诱惑力是巨大的,但是一定要顶住诱惑!不要提前发布代码,重点是注重缩小发布周期.如果需要花几个小时的时间来回答新问题,那么就不用再猜测明天会出现什么问题了. 2.API模块化将大型问题转化为规模较小的.可单独解决的问题.模块化API更容易学习,并且可以随时间而改变.你可以用新模块替代旧模块,可以一个一个地教导模块,也可以将API的实验部分从稳定或传统的