安全世界观 | 常见 WEB 安全问题及防护策略汇总

这是我参与8月更文挑战的第7天,活动详情查看:8月更文挑战程序员

一、安全世界观

继以前聊到了 Web 安全以后,好多朋友也在关注这个话题,今天特地再写一篇。正则表达式

安全世界观一词是《白帽子讲 Web 安全》一书的开篇章节,多年后再读经典,仍然受益不浅!算法

正如开篇所说的:“互联网原本是安全的,自从有了研究安全的人,互联网就不安全了。” 世上没有攻不破的系统,只有还没攻破的系统,有多少条路能够通罗马,大概就有多少种攻克之道。数据库

1.1 Web 安全的兴起

“破坏每每比建设容易”,但凡事都不是绝对的。后端

跟机场安全检查进行类比。经过一个安全检查(过滤,净化)的过程,能够梳理未知的人或物,使其变得可信任。被划分出来的具备不一样信任级别的区域,咱们成为信任域,划分两个不一样信任域之间的边界,咱们称之为信任边界安全

数据从高等级的信任域流向低等级的信任域,是不须要通过安全检查的;数据从低等级的信任域流向高等级的信任域,是须要通过信任边界的安全检查。服务器

安全问题的本质是信任的问题。markdown

一切的安全方案设计的基础,都是创建在信任关系上的。咱们必须相信一些东西,必需要有一些最基本的假设,安全方案才能得以创建。cookie

1.2 安全的三要素

安全的三要素是安全的基本组成元素,分别为:网络

  • 机密性(Confidentiality)

机密性要求数据内容不能泄露,加密是实现机密性要求的常见手段。若是不将文件存在抽屉里,而是放在透明的盒子里,那么虽然没法获得这个文件,可是文件的内容将会被泄露。

  • 完整性(Integrity)

完整性则要求保护数据内容是完整,没有被篡改的。常见的保证一致性的技术手段是数字签名。

  • 可用性(Availability)

可用性要求保护资源是“随需而得”。

举例来讲,假若有 100 个车位,有一天一个坏人搬了 100 块大石头将车位全占了,那么停车场没法再提供正常服务。在安全领域中叫作拒绝服务攻击,简称 DoS(Denial of Service)。拒绝服务攻击破坏的是安全的可用性。

1.3 白帽子兵法

  • Secure By Default 原则

1)黑名单、白名单

实际上,Secure By Default 原则,也能够概括为白名单,黑名单的思想。若是更多地使用白名单,那么系统就会变得更安全。

2)最小权限原则

最小原则要求系统只授予主体必要的权限,而不要过分受权,这样能有效地减小系统,网络,应用,数据库出错的机会。

若是网站只提供 Web 服务,只容许开启 80,443 端口,屏蔽其它端口。

  • 纵深防护原则

纵深防护原则包含两层含义:

1)要在各个不一样层面,不一样方面实施安全方案,避免出现疏漏,不一样安全方案之间须要相互配合,构成一个总体;

2)要在正确的地方作正确的事情,即:在解决根本问题的地方实施针对性的安全方案。

  • 数据与代码分离原则

这一原则适用于各类因为“注入”而引起安全问题的场景。

实际上,缓冲区溢出,也能够认为是程序违背了这一原则的后果——程序在栈或者堆中,将用户数据当作代码执行,混淆了代码与数据的边界,从而致使安全问题的发生。

  • 不可预测性原则

微软使用的 ASLR 技术,在较新版本的 Linux 内核中也支持。在 ASLR 的控制下,一个程序每次启动时,其进程的栈基址都不相同,具备必定的随机性,对于攻击者来讲,这就是“不可预测性”。

不可预测性,能有效地对抗基于篡改,伪造的攻击。

不可预测性的实现每每须要用到加密算法,随机数算法,哈希算法,好好利用这条规则,在设计安全方案时每每会事半功倍。

二、常见 WEB 安全

2.1 XSS

XSS (Cross Site Script),跨站脚本攻击,由于缩写和 CSS (Cascading Style Sheets) 重叠,因此只能叫 XSS。

XSS 的原理是恶意攻击者往 Web 页面里插入恶意可执行网页脚本代码,当用户浏览该页之时,嵌入其中 Web 里面的脚本代码会被执行,从而能够达到攻击者盗取用户信息或其余侵犯用户安全隐私的目的。XSS 的攻击方式变幻无穷,但仍是能够大体细分为几种类型:

  • 非持久型 XSS

    也叫反射型 XSS 漏洞,通常是经过给别人发送带有恶意脚本代码参数的 URL,当 URL 地址被打开时,特有的恶意代码参数被 HTML 解析、执行。

  • 持久型 XSS

    持久型 XSS 攻击不须要诱骗点击,黑客只须要在提交表单的地方完成注入便可,可是这种 XSS 攻击的成本相对仍是很高。

  • 未经验证的跳转 XSS

    一些场景是后端须要对一个传进来的待跳转的 URL 参数进行一个 302 跳转,可能其中会带有一些用户的敏感(cookie)信息。

2.2 CSRF

CSRF(Cross-Site Request Forgery),名为:跨站请求伪造攻击。

那么 CSRF 到底可以干吗呢?

你能够这样简单的理解:攻击者能够盗用你的登录信息,以你的身份模拟发送各类请求。攻击者只要借助少量的社会工程学的诡计。

例如经过 QQ 等聊天软件发送的连接(有些还假装成短域名,用户没法分辨),攻击者就能迫使 Web 应用的用户去执行攻击者预设的操做。例如,当用户登陆网络银行去查看其存款余额,在他没有退出时,就点击了一个 QQ 好友发来的连接,那么该用户银行账户中的资金就有可能被转移到攻击者指定的账户中。

因此遇到 CSRF 攻击时,将对终端用户的数据和操做指令构成严重的威胁。当受攻击的终端用户具备管理员账户的时候,CSRF 攻击将危及整个 Web 应用程序。

CSRF 原理

下图大概描述了 CSRF 攻击的原理:

CSRF 攻击必需要有三个条件 :

1. 用户已经登陆了站点 A,并在本地记录了 cookie

2 . 在用户没有登出站点 A 的状况下(也就是 cookie 生效的状况下),访问了恶意攻击者提供的引诱危险站点 B (B 站点要求访问站点 A)。

3 . 站点 A 没有作任何 CSRF 防护

预防 CSRF

CSRF 的防护能够从服务端和客户端两方面着手,防护效果是从服务端着手效果比较好,如今通常的 CSRF 防护也都在服务端进行。服务端的预防 CSRF 攻击的方式方法有多种,但思路上都是差很少的,主要从如下两个方面入手 :

1 . 正确使用 GET,POST 请求和 cookie

2 . 在非 GET 请求中增长 token

CSRF 的防护能够根据应用场景的不一样自行选择。CSRF 的防护工做确实会在正常业务逻辑的基础上带来不少额外的开发量,可是这种工做量是值得的,毕竟用户隐私以及财产安全是产品最基础的根本。

2.3 SQL 注入

SQL 注入漏洞(SQL Injection)是 Web 开发中最多见的一种安全漏洞。攻击者利用这个漏洞,能够访问或修改数据,或者利用潜在的数据库漏洞进行攻击。

而形成 SQL 注入的缘由是由于程序没有有效的转义过滤用户的输入,使攻击者成功的向服务器提交恶意的 SQL 查询代码,程序在接收后错误的将攻击者的输入做为查询语句的一部分执行,致使原始的查询逻辑被改变,额外的执行了攻击者精心构造的恶意代码。

如何预防

防止 SQL 注入主要是不能容许用户输入的内容影响正常的 SQL 语句的逻辑,当用户的输入信心将要用来拼接 SQL 语句的话,咱们应该永远选择不相信,任何内容都必须进行转义过滤,固然作到这个仍是不够的,下面列出防护 SQL 注入的几点注意事项:

  • 严格限制 Web 应用的数据库的操做权限,给此用户提供仅仅可以知足其工做的最低权限,从而最大限度的减小注入攻击对数据库的危害;

  • 后端代码检查输入的数据是否符合预期,严格限制变量的类型,例如使用正则表达式进行一些匹配处理;

  • 对进入数据库的特殊字符(',",\,<,>,&,*,; 等)进行转义处理,或编码转换;

  • 全部的查询语句建议使用数据库提供的参数化查询接口,参数化的语句使用参数而不是将用户输入变量嵌入到 SQL 语句中,即不要直接拼接 SQL 语句。

2.4 DDoS 攻击

DDoS 又叫分布式拒绝服务,全称 Distributed Denial of Service。

其原理就是利用大量的请求形成资源过载,致使服务不可用,这个攻击应该不能算是安全问题,这应该算是一个另类的存在,由于这种攻击根本就是耍流氓的存在,「伤敌一千,自损八百」的行为。

DDoS 攻击能够理解为:「你开了一家店,隔壁家店看不惯,就雇了一大堆黑社会人员进你店里干坐着,也不消费,其余客人也进不来,致使你营业惨淡」。

也许你的站点遭受过 DDoS 攻击,具体什么缘由怎么解读见仁见智。DDos 攻击从层次上可分为网络层攻击与应用层攻击,从攻击手法上可分为快型流量攻击与慢型流量攻击,但其原理都是形成资源过载,致使服务不可用。

主要分类

  • 网络层的 DDoS 攻击究其本质实际上是没法防护的,咱们能作得就是不断优化服务自己部署的网络架构,以及提高网络带宽。

  • 应用层 DDoS 攻击不是发生在网络层,是发生在 TCP 创建握手成功以后,应用程序处理请求的时候,如今不少常见的 DDoS 攻击都是应用层攻击。

应用层的防护有时比网络层的更难,由于致使应用层被 DDoS 攻击的因素很是多,有时每每是由于程序员的失误,致使某个页面加载须要消耗大量资源,有时是由于中间件配置不当等等。

而应用层 DDoS 防护的核心就是区分人与机器(爬虫),由于大量的请求不多是人为的,确定是机器构造的。所以若是能有效的区分人与爬虫行为,则能够很好地防护此攻击。

总结

Web 安全的对于 Web 从业人员来讲是一个很是重要的课题。本文介绍了安全世界观,以及常见 Web 相关的三种安全防护知识,但愿你们之后的工做中不要误入踩雷,但愿对你们有所帮助!

安全是一门朴素的学问,也是一种平衡的艺术,不管是传统安全,仍是互联网安全,其内在原理都是同样的。咱们只需抓住安全问题的本质,以后不管遇到任何安全问题,都会无往而不利!

做者:架构精进之路,十年研发风雨路,大厂架构师,CSDN 博客专家,专一架构技术沉淀学习及分享,职业与认知升级,坚持分享接地气儿的干货文章,期待与你一块儿成长。

关注并私信我回复“01”,送你一份程序员成长进阶大礼包,欢迎勾搭。

Thanks for reading!

相关文章
相关标签/搜索