架构师如何才能够设计一个安全的架构

架构师不可能做到全知全能,但是仍然担负着成功交付可用的解决方案的任务。满足安全需求常常是其中不可或缺的一环,而且这一点常常没有明确指出。下面我们从整体上讨论架构的安全性,比如如何撰写安全的代码、部署中的安全、架构层的物理隔离、加密、证书的使用等等方面。推荐学习相关系统架构教程

用户或者SQL的攻击注入时,怎么样做到安全?

很多英国的公司从安全的角度讲,做得很烂,因为团队不知道安全到底意味着什么。可能在网上随便问一些人到底该怎样做。

作为架构师要分析需求的话,并不是说做大型的前端设计,而是做一些简单的,获取、捕获使用者的要求,做高级的架构设计,比较要考虑到扩展性、安全,如果没有考虑到这些,在打造架构的时候,可能会丢失非常宝贵的元素。可以开一些研讨会、交换文件,这种工作坊和小型研讨会的形式非常好,知道使用系统的是这部分用户。

客户给的要求是系统非常安全,就要问他非常安全是有多安全,工作坊可以面对面的交流,谁在用我们系统,哪些方面的内容影响了他们对系统的使用,为什么会这样?这样会有非常具体的用户对系统的要求。除了捕获信息之外,还要置疑他们。我们团队必须要不断的置疑挑战我们一开始所制定出来的具体要求。到底我们开发的时候优先级别会怎样。觉得要求根本没必要,换一种方式行不行,我觉得就已经够了,要挑战不同的要求,不仅是功能性的,还有非功能性的,比如说安全,也要跟客户谈一谈。每次在系统里面引入安全的时候,要做一些权衡、妥协、让步。

一般来讲,典型的让步、取舍是可用性、易用性和复杂性。也就是说,安全的话更复杂了。比如说我去银行要做,ID非常长,记不下来,输入密码登陆,到了第二页,要输入安全代码,有一个小键盘,类似于口令牌,随即生成输入进去。等我通过这么多安全检查进这个网站的时候,对话已经超时了,我输入这么多的密码,已经查不到我账户信息了,这是非常长、非常复杂的过程,用电子安全指令等。确实很安全,但是影响了便捷程度。这时要做取舍,是易用还是复杂安全性。

安全问题怎么样能够在架构里面得到诠释

安全可以融入到所有领域的,现在看到的有三级显示,Web服务器、应用服务器、数据库。在Web服务器上避免攻击,应用服务器获得授权的人才能进入,数据库是确保数据安全保存在这里。中间部分是保障基础设施的安全,包括防火墙等。稍候会讲怎么有效获得授权。

这是一种非常常见也是非常传统打造安全的方式。可能在服务器上放很小的代码,数据库里面放很多数据,中间应用服务器获取这些相关信息。因为肯定关注安全,信息存储是否安全。

稍候看一看这些架构,看到Web服务器使用了相关安全服务,这是很常见的,但是这些所谓的Web服务非常不安全,比如输入ID开发工具,你的Web服务创建了一些本地的组建,你发现这里不需要授权,随便什么人都可以进来,因此在这个领域我觉得安全是可以发挥重要的作用的。

我们在做架构的时候,如果把服务器从物理上分得开,不一定真正安全了。物理分开的话,中间信息传输出现影响。每个层级有安全,不同的层级间的安全很重要的。如果从物理上分割开来,中间的联系也会成为攻击的对象。

千万不要把编码放的到处都是,放在核心中央层

这样的话攻击你就只可能攻击你表面,核心保护很好。这里有非常有意思的问题,为什么用物理上分开来的应用服务器,人们觉得集成实时的,总是搞架构把应用服务器分开来,但是我们也可以找一些其他的方法,现在有很多互联网的创业公司就是这么做的。我想希望大家好好想想你干吗这么做,做一件事情必须事出有因才行。这实际上就是我们讲得做出取舍。安全得到保障,复杂性获得一些影响。在我们的安全因素的话,讲到最小的特权原则。只有必须要发生的事情才能发生,不能把所有的东西全部部署到服务器上从来都不用。

许可一个进程操作的话,要确保进程必须要操作的,其他不需要操作不要放在这里。这点是所有软件架构师在系统里面必须要牢记的。

怎么通过不同的方式来把安全引入到系统里面

现在讲验证、授权、审核是三个比较常见的方法。首先,验证。我是用户,是谁呢?权力是什么?用什么东西?这很重要,可以帮助你了解到用户的需求以及不同类型的用户在系统里面扮演不同的角色该怎样具体做呢?有这样的系统怎样能够做好本地的验证和授权。其实很多方法都可以。

先来看看一个简单的两级的方式,Web服务器和数据库直接进行对换。讲到安全、认证、授权最简单的方法,系统认出你的用户,在系统里面有一个用户的名单,有他们使用的权力,通过映射的方式,客户来了映射能做什么,是不是最高效能,不一定。

早上说过我们有不同的选择,要解决这样的问题,选择很多的,还有另外一个方法,比如说设计自己的架构,不把你的数据放在数据库里,大的企业会有一种主动的目录和一些算法,是包含了用户和他的一些资格说明,这样的话就可以加以利用了。你不会把用户放在你的数据库里,可以把用户放在别的地方,这样的话管理的负担也小了。有新的用户在中间的注册器里面注册新用户就可以了。

但也许它的角色放在数据库,因为不同角色有不同的授权。所以用户和他的资历放在外面,但是角色放在数据库里,这也是很好分解的办法。或者甚至把授权也放在主动的目录当中,形成不同的群组,这是可以选择的方法。但是会不会比之前的方法更好呢?同样,这并不是我能回答的问题。有些企业、有些组织很愿意做这种,觉得这个够了,可以对于用户的目录专门存放用户的信息。但是其他的一些企业、一些组织并不喜欢把你自己的群组放在自己的服务器上。有些时候可以,有些时候不愿意使用。

还有其他的方法,可以用安全令牌的服务,有人做身份基金会的工作,实际上就是把安全进行集中化,不管是身份验证还是授权都能够集中起来,我两年前做的一个项目,有一个单独的令牌的系统,这里面给我们带来的复杂性是不可想象的,本来只有一个人做这个项目,压力非常大,非常复杂。这也是一种选择。对某一种企业来说,也许是最好的选择。

哪一个方案是最“好”的?其实没有所谓的最好的方案,永远只能对你来说最好,对这个环境来说最好,所以哪个是最好呢?还是回到今天早上讲过的,从高层的角度上了解我们的需求,了解我们环境的约束性、局限性。如果在大企业工作的话,可能会有一个主动的目录服务器了。可以去找这个有关的部门,可以找你服务器来做验证。可不可以把决策和授权放在目录当中,可以选择最好的解决方案。

有一个大的英国超市,用明文来记密码,密码以明文的形式寄到邮箱,回归到之前的架构,如果数据库是够安全的话,明文也没问题的。对于这篇文章之后,有一个很好的明文建议,如果用明文密码会加密,而且是散列的处理。我不是一个安全专家,但是我知道至少有不同的方法来把密码进行分类散列,比如说用一些随机的数字进行加密和散列,这都是很好的进行密码散列的方法。当然我们也选择一个最适合我们的方法。

审查、审计也是一方面,我们要有一个审计的线索。比如说我们在泽西岛是离岸的环境,做很多交易,必须知道哪些用户做了什么?为什么要这么做?因为有人对这个网站提出一些索赔,丢失了信息我们要追诉回去,看一下他的信息怎么丢的,有没有修改。

怎么能写出安全的代码?

网上有很多信息,主要有两个主流:第一,要避免数字被修改。第二,限制接入。

当然免疫性很好的,如果免疫的话就不能修改。这是一个很好的属性。如果这个数据有一定的对象,而这个对象数据是不能修改的,免疫了就不能修改了,所以从根本上来说是安全的。如果有功能性的语言,用这个数值改变,因为免疫不能改变了。你想象一下,有一定的人、把这个人加入到列表当中。怎么样让他把所有的人列出来呢?也许在下面给一条getPeople的指令。

给一些简单的建议,比如说用一些接入的修订词,特别是对外API的时候,要有各种的假定,比如说接入的修饰词和修饰条件。如果所有的东西都是对外公开,没有安全的问题才怪!

scott/tiger,有人在笑,很多人拿到密码都没有改,用户和密码缺省或者原始的数据密码都不改,这必须要改,改成一个比较有利的密码。

讲到数据的时候,真的希望能够限制消费者对数据的接入,限制消费者对数据的使用,这可以帮我们收载他们的访问范围。不管我们的网站在什么地方,我们用SQL的数据库怎么做呢,我们用特别的一些代码通过SQL进行数据库的接入,有些时候不喜欢这种方法,觉得过程非常复杂。虽然复杂,但是有一个精简、简单、安全的API,很多人用SQL,就是为了安全性。

2000年的时候,我在一个小的电商公司做网站,他们首次在搞商务网站。他们有一个电商网站,而且是一个盒子,只需要拿一个光盘装到系统上就是一个电商网站了。想存储他们的信用卡号码。客户回到电商时,不需要把信用卡再输一遍,这是盒子提供的,总要有一个地方来放信用卡信息吧!他们看一看数据库里面有没有栏目没有用到,他们发现中间名没人用,就把中间名放信用卡了,只用输入(英文),没有经过加密,对信用卡进行外键的字符串。我们也知道对这样的外键的字符串可以破解的。这种安全只不过是把字符串进行排列,并没有进行任何的安全加密,只不过支付串操作两次就已经万无一失了。

我们讲过数据代码,也应该谈一下配置、部署,所以有数据库。网络服务器要跟数据库进行沟通的话,必须要用户名和密码。数据库的用户名和密码什么地方?往往是在网页服务上,往往都是明文。如果有人攻击网页服务器,必须提取文件系统,提取之后可以看到明文的文件,这个发生了很多。

安全非常重要,但是安全也非常复杂。作为一个软件的开发员、程序员,要做到敏捷、持续的交付、关注模式,非常流行的词汇。但是安全不是热门词汇,要注意安全的重要性。比如说做网银、网络界面不能忽视安全。想学习更多系统架构相关内容,请进入e良师益友网

时间: 2024-11-09 02:20:39

架构师如何才能够设计一个安全的架构的相关文章

如何在裸机下设计一个嵌入式系统架构?

如何在裸机下设计一个嵌入式系统架构? 如何不使用操作系统的情况下设计一个嵌入式系统的架构呢?比如串口数据如何接受,串口数据协议在什么地方解析,SPI总线的数据如何有效的接收?等等问题.如何设计,才能尽量保证各个模块的效率呢?自己有一些设计,想一起讨论下.比如串口的数据先在中断程序中放入一个大数组中,然后在主程序中解析接收到的数据,等等--还有哪些技巧呢? 关注者 157 被浏览 7,457 关注问题写回答 ?添加评论 ?分享 ?邀请回答?举报 ? 收起 8 个回答 默认排序? Tony Ho 嵌

一名工作8年的Java架构师分享经验之如何成为一名架构师

很多工作一定年限的程序员感觉自己到了瓶颈不知道怎么去突破,其实这个时候就要冲破传说中的架构师. 架构师是个很神秘人物,那么架构师的技术一般在什么程度呢?怎样才能被称为架构师? 技术深度 有没有看过JDK源码,看过的类实现原理是什么. HTTP协议 TCP协议 一致性Hash算法 JVM如何加载字节码文件 类加载器如何卸载字节码 IO和NIO的区别,NIO优点 Java线程池的实现原理,keepAliveTime等参数的作用. HTTP连接池实现原理 数据库连接池实现原理 数据库的实现原理 技术框

架构师是做什么的?如何成为专职架构师

架构师按照专注领域不同,可分为企业架构师.基础结构架构师.特定技术架构和解决方案架构师等,专职架构师往往偏向基础结构架构师和特定技术架构师,专职架构师不负责具体的业务系统,而又对所有的系统负责,很少直接负责项目,但对项目要有提前把控,面对的是更大的团队和更大的问题域. 想要成为专职架构师,就要明确专职架构师的职责,以下是专职架构师常见职责: 职责一:全局的技术规划 全局技术规划是专职架构师必须要做的工作,全局技术规划要能非常明确的指引整个团队在同一时间向同一个方向前进,这对架构师的心力和体力都是

系统架构师的职责和作用(转)

系统架构师的职责和作用(转) [职业名称] 系统架构师(System Architecture) [职业定位] 系统构架,是对已确定的需求的技术实现构架.作好规划,运用成套.完整的工具,在规划的步骤下去完成任务. 系统架构师(又称企业架构师或者系统设计师)是一个最终确认和评估系统需求,给出开发规范,搭 建系统实现的核心构架,并澄清技术细节.扫清主要难点的技术人员.他/她主要着眼于系统的“技术实现”.因此他/她应该是特定的开发平台.语言.工具的大 师,对常见应用场景能马上给出最恰当的解决方案,同时

(原创)谈谈架构师的职责(一)

很早就想写一篇文章来谈谈架构师的职责了,因为自己做架构设计也有几年了,有得有失,想以此文来谈谈自己对架构师职责的认识.架构师这个话题很大,在这里不打算深入详谈,只是简要的谈谈,想到哪里说到哪里.在谈架构师之前我想谈谈什么是架构,关于架构有很多种专业的定义,我这里就用最好理解的一种定义来介绍架构是什么,架构就是决策.从技术选型,到架构选型,从业务建模到系统建模,无一不是在做着决策. 要成为一个好的架构师,首先要掌握一些基本理论和技能: 面向对象设计的理论.如果连面向对象的基本理论都不知道就开始做设

全栈软件工程师和系统架构师的异同

看完后.发现.不用怕....因为程序员不会看完.只有"架构师"才有耐心看这么长的. 一 每个好架构师都是一位出色的程序员(卓越的程序员) 架构师,听起来是如此神秘的一个称号.尤其是在开发领域刚入门不久的菜鸟级程序员眼中,架构师都是高手,都是牛人,都是如此高高在上的存在. 不过,在搞了四.五年编程之后,程序员们往往早已失去了当年对这些"高级"职位的神秘感,甚至会对自己所在项目的架构师抱怨不已,背后里称他们是一群水王.所以有江南白衣曾撰文述说:"国内的架构师到

重读《从菜鸟到测试架构师》-- 职业生涯的考虑

都说万事开头难,小艾作为菜鸟测试工程师加入到测试项目团队,努力学习着关于测试入门的知识.有了基本的知识及对测试的领域有了一定的认识之后,小艾开始思考自己的职业生涯应该有什么样的前景?测试工程师是一个专注程度很高的技术背景职位,但小艾并不清楚自己未来无论是在技术还是管理上有哪些可以选择的发展方向,更别说如何选择方向了. 于是,热心的导师再次登场,为小艾深入剖析技术与管理道路的发展路线. 测试工程师的技术发展路线 在职业发展起步期,测试工程师可以先把自己定位为某种专门测试的专家,如功能测试专家.系统

优秀架构师是怎么炼成的?

转:https://www.cnblogs.com/ljysy/p/11025583.html 我们来讲一个故事,一位旅行者路过一个烈日下的工地,所有人都在那儿汗流浃背地搬砖. 旅行者问第一个人在干什么,那人头也没抬地回答:“我在搬砖.” 旅行者问第二个人在干什么,这个匆匆抬起头认真地说:“我在砌墙.” 旅行者问第三个人在干什么的时候,那个人脸上充满了光彩,很自信地说:“我在盖圣玛利亚大教堂.”这个故事是不是像极了我们从事软件开发工作的不同阶段的不同状态.每当听到从程序员到架构师的书或者文章时,

从研发人的角度评判怎样设计一个好的DCS系统

相信从事自动化或控制系统的同仁,应该了解Distributed Control System(简称DCS)的基本功能及其在工控行业的作用.从工程应用的角度,一个完整的DCS系统主要包括三个部分:HMI人机交互层.控制站层.仪表与执行机构层. HMI主要包括工程师站.监控站.历史站等,主要在具有较高稳定的PC上安装相应的软件构成.控制站层,主要实现相应的控制算法与逻辑,并通过相应的IO卡件采集数据和发送指令.仪表与执行机构,主要由各个厂家的智能变送器.电动机等组成. 由于仪表与执行机构,厂家众多,