本文转载自微信公众号《架构改进之路》,作者的架构改进之路。转载本文请联系建筑改良之路公众号。1.安全世界观安全世界观二字是本书的开篇《白帽子讲Web安全》。多年后读经典,依然受益匪浅!正如开篇所言:“互联网本来就是安全的,既然有人研究安全,互联网就不安全。”世界上没有攻不破的系统,只有没攻破的系统,攻击的方式大概有多少条通往罗马的路。1.1Web安全的兴起“往往更容易被攻破”毁而不建”,但一切都不是绝对的。类比机场安检,通过安检(过滤、净化)过程,筛选出不知名的人或事物,使其成为可信的。划分不同信任等级的区域称为信任域,两个不同信任域之间的边界称为信任边界。信任域到高层信任域需要通过信任边界的安全检查,安全问题的本质是信任问题,所有安全方案设计的基础都是基于信任关系。我们必须相信一些东西,我们必须有一些基本假设,并且可以构建安全解决方案。1.2安全三要素安全三要素是安全的基本要素,分别是:机密性(Confidentiality)机密性要求数据内容不能泄露,而加密是实现机密性要求的常用手段。如果文件没有存放在抽屉里,而是放在一个透明的盒子里,虽然无法拿到文件,但文件内容也会泄露。完整性(Integrity)完整性要求被保护的数据内容完整且未被篡改。保证一致性的一种常用技术手段是数字签名。可用性(Availability)可用性要求保护资源“随需应变”。比如有100个车位,有一天坏人搬100块大石头把车位全部占满,那么停车场就不能正常提供服务了。在安全领域,称为拒绝服务攻击,简称DoS(DenialofService)。拒绝服务攻击破坏了安全性的可用性。1.3白帽SecureByDefault的原理1)黑名单和白名单其实SecureByDefault的原理也可以概括为白名单和黑名单的思想。如果多使用白名单,那么系统会变得更加安全。2)最小权限原则最小权限原则要求系统只授予主体必要的权限,不过度授权,可以有效降低系统、网络、应用、数据库出错的几率。如果网站只提供web服务,则只允许开放80和443端口,其他端口都被屏蔽。纵深防御原则纵深防御原则包含两层含义:1)安全方案分层次、分环节实施,避免遗漏,不同的安全方案需要相互配合,形成一个整体;2)在正确的地方做正确的事,即:在解决根本问题的地方实施有针对性的安全计划。数据和代码分离原则适用于因“注入”而导致安全问题的各种场景。事实上,缓冲区溢出也可以认为是程序违背了这个原则——程序将用户数据当成栈或堆中的代码来执行,混淆了代码和数据的边界,从而造成安全问题。不可预测性原则Microsoft使用的ASLR技术在较新版本的Linux内核中也得到支持。在ASLR的控制下,每次启动一个程序,其进程的栈基地址都是不同的,具有一定的随机性。对于攻击者来说,这是“不可预测性”。不可预测性,可有效抵御基于篡改和伪造的攻击。不可预测性的实现往往需要使用加密算法、随机数算法和哈希算法。如果利用好这条法则,在设计安全方案时往往会事半功倍。2、常见WEB安全2.1XSSXSS(CrossSiteScript),跨站脚本攻击,由于缩写与CSS(CascadingStyleSheets)重叠,所以只能称为XSS。XSS的原理是恶意攻击者在网页中插入恶意的可执行网页脚本代码。当用户浏览页面时,嵌入在网页中的脚本代码将被执行,从而使攻击者窃取用户信息或进行其他违规行为。用户安全和隐私的目的。XSS攻击方式千变万化,但大致可以细分为几种类型:非持久性XSS又称反射型XSS漏洞,一般通过向他人发送带有恶意脚本代码参数的URL,当该URL地址被打开时,独特的恶意代码参数由HTML解析和执行。持久型XSS持久型XSS攻击不需要欺骗点击,黑客只需要在提交表单的地方完成注入即可,但是这种XSS攻击的成本比较高。未经验证的跳转XSS在某些场景下,后端需要对传入的URL参数进行302重定向进行重定向,其中可能包含用户的一些敏感(cookie)信息。2.2CSRFCSRF(Cross-SiteRequestForgery),学名:跨站请求伪造攻击。那么CSRF到底能做什么呢?你可以这么简单的理解:攻击者可以窃取你的登录信息,模拟以你的身份发送各种请求。攻击者只需要诉诸一些社会工程学技巧。例如,通过QQ等聊天软件发送的链接(部分伪装成短域名,用户无法辨别),攻击者可以强制web应用的用户执行攻击者预设的操作。例如,当用户登录网上银行查看存款余额,在退出前点击QQ好友发送的链接,用户银行账户中的资金可能会被转移到攻击者指定的账户中。因此,当遇到CSRF攻击时,会对最终用户的数据和操作指令造成严重威胁。当受攻击的最终用户拥有管理员帐户时,CSRF攻击可能会危及整个Web应用程序。CSRF的原理下图大致描述了CSRF攻击的原理:CSRF攻击必须具备三个条件:1.用户已经登录站点A,并且在本地记录了cookie2。在有效的情况下),访问恶意攻击者提供的诱饵危险站点B(站点B需要访问站点A)。3.站点A没有做任何CSRF防御。CSRFCSRF防御可以从服务端和客户端启动。从服务器防御效果更好。现在一般的CSRF防御也是在服务端进行的。服务器端防止CSRF攻击的方法有很多种,但是思路都差不多,主要从以下两个方面:1、正确使用GET、POST请求和cookies2。在非GET请求中加入tokenCSRF防御可以根据不同的应用场景进行选择。CSRF防御工作确实会在正常业务逻辑的基础上带来很多额外的开发工作量,但这样的工作量是值得的,毕竟用户隐私和财产安全是产品最基本的基础。2.3SQL注入SQL注入漏洞(SQLInjection)是Web开发中最常见的安全漏洞。攻击者利用此漏洞访问或修改数据,或利用潜在的数据库漏洞进行攻击。SQL注入的原因是程序没有对用户的输入进行有效的转义和过滤,使攻击者成功向服务器提交恶意SQL查询代码,程序收到后错误地将攻击者的输入作为查询语句的一部分执行.,导致原有的查询逻辑被改变,攻击者精心构造的恶意代码被追加执行。如何预防和防止SQL注入主要是不让用户输入的内容影响到正常SQL语句的逻辑。当用户输入的置信度用于拼接SQL语句时,我们应该始终选择不相信,任何内容都必须进行转义和过滤。当然,这还不够。下面介绍一些防止SQL注入的注意事项:严格限制Web应用程序对数据库的操作权限,为用户提供只满足其工作的最小权限,尽量减少注入攻击对数据库的危害;后端代码检查输入数据是否符合预期,严格限制变量的类型,比如使用正则表达式进行一些匹配处理;特殊字符('、"、\、<、>、&、*、;等)进行转义或编码转换;所有查询语句建议使用数据库提供的参数化查询接口。参数化语句使用参数代替将用户输入变量嵌入到SQL语句中,即不直接拼接SQL语句。2.4DDoS攻击DDoS也称为DistributedDenialofService,全称DistributedDenialofService,其原理是利用大量的请求导致资源过载,导致服务不可用。这种攻击不应该被视为安全问题,应该被视为备选方案因为这种攻击基本上是耍流氓的存在,“伤敌一千”的行为,自伤八百”。DDoS攻击可以理解为:“你开了一家店,隔壁的店不喜欢,所以他们雇了很多小混混坐你店里,不要花费米oney,其他顾客进不来,导致你的生意。dismal”。也许你的站点遭受了DDoS攻击,具体原因和如何解读见仁见智。DDos攻击从级别上可以分为网络层攻击和应用层攻击,又可以分为快速攻击方式上流量攻击和慢速流量攻击,但原理是造成资源过载,导致服务不可用。主要分类网络层的DDoS攻击,本质上是毫无防备的。我们能做的就是不断优化部署的网络架构。应用层DDoS攻击不是发生在网络层,而是发生在TCP建立握手成功后,应用程序处理请求时,增加网络带宽,现在很多常见的DDoS攻击都是应用层攻击。应用层的防御有时比网络层更难,因为导致应用层受到DDoS攻击的因素有很多。有的时候往往是因为程序员的失误导致某个页面加载消耗了大量的资源,有的时候是因为中间件配置不当。etc.应用层DDoS防御的核心是区分人和机器(爬虫),因为大量的请求不可能是人为的,而必须由机器来构造。因此,如果能够有效区分人类和爬虫的行为,就可以很好地防御这种攻击。总结Web安全对于Web从业者来说是一个非常重要的课题。本文介绍了安全的世界观和与Web相关的三种常见安全防御知识。希望大家在以后的工作中不要误踩雷。希望对您有所帮助!安全是一门简单的知识,也是一门平衡的艺术,无论是传统安全还是互联网安全,其底层原理都是一样的。我们只需要抓住安全问题的本质,那么无论遇到什么安全问题,我们都将立于不败之地!
