叁叁肆

这个世界会好吗

453篇博客

初创期应用架构实践 (9): Web 应用安全

叁叁肆2018-11-14 10:00

欢迎访问网易云社区,了解更多网易技术产品运营经验。


3.2.4 Web 应用安全


目前很多应用的业务,都提供一个 Web 服务,Web 服务很常见,因此各类针对 Web 的漏洞发掘和渗透攻击也越来越多。黑客利用网站操作系统、中间件、Web 代码的漏洞进 行攻击,从而获得 Web 服务器和数据库服务器的控制访问权限,进行页面篡改、挂马、暗 链、数据泄露、肉鸡等一系列非法操作。


在业务部署到云上面之后,Web 安全问题并未得到缓解。作为一个技术人员或者架构 人员,了解必要的 Web 安全技术掌握其原理和防护方法,显得尤为重要。接下来我们简单 介绍一些 Web 安全的各种问题和对策。


1. XSS 漏洞 

XSS是 Cross Site Scripting的简写,即跨站脚本攻击,为了避免和层叠样式表(Cascading Style Sheets,CSS)的缩写混淆,故缩写为 XSS。


恶意攻击者往 Web 页面里插入恶意 HTML 代码,当用户浏览该页时,嵌入 Web 里面 的 HTML 代码会被执行,从而达到恶意攻击用户的特殊目的。按照 XSS 的不同,可以分为如下几种类型。


反射型 XSS 

反射型 XSS 指的是把用户输入的数据“反射”给浏览器,也就是黑客通常需要诱使用 户“点击”一个恶意的链接。 

攻击者会通过社会工程学手段,发送一个URL链接给用户打开,或者在 IM、论坛、博客 上发放URL诱使用户点击,在用户打开页面的同时,浏览器会执行页面中嵌入的恶意脚本。


存储型 XSS 

存储型 XSS 会把用户输入的数据存储在服务器端。当其他用户访问到展示这个数据的 页面就会被攻击。 

攻击者利用 Web 应用程序提供的录入或修改数据功能,将数据存储到服务器或用户 Cookie 中,当其他用户浏览展示该数据的页面时,浏览器会执行页面中嵌入的恶意脚本。 所有浏览者都会受到攻击。 

DOM 型 XSS 

DOM 型 XSS 的分类并不是按照上面数据是否存储在服务端分类,而是比较特别的一 类 XSS,通过修改页面的 DOM 节点形成 XSS。和以上两个跨站攻击的差别是,DOM 跨站 是纯页面脚本的输出,只有规范使用 JavaScript,才可以防御。


XSS 漏洞危害 

XSS 漏洞可以偷取用户令牌 Cookie,伪造用户身份登录进行恶意操作,这是最常见的。 同时,还可以控制用户浏览器,获取用户键盘记录如用户输入的用户名密码,进行扫描内 网。比较高级的用法可以结合浏览器自身和浏览器插件的漏洞,下载病毒木马,深入攻击, 例如衍生 URL 跳转攻击、蠕虫攻击、DDoS 攻击、盲打后台等。


XSS 漏洞防护 

针对 XSS 漏洞的防护,其核心问题在于对用户的输入没有进行验证和过滤,对于可信 和不可信边界的划分也是所有安全问题的核心。要针对 XSS 进行防护,需要根据上面不同 的攻击类型进行处理。以“谁使用,谁负责”的原则,任何使用用户不可信数据方都需要对数据进行校验,不信任任何来自客户端的用户输入,对于 XSS 来说,根据不同的应用场 景进行过滤。如果是不需要显示富文本的地方,直接对所有的 HTML 转义处理,反射性和 存储型可以在后端进行转义后输出到前端;如果是 DOM 型的需要在前端使用 JavaScript 进行转义;如果需要显示富文本,就需要对用户输入进行严格的限制。开源项目 OWASP AntiSamy 是一个可确保用户输入的 HTML/CSS 符合应用规范的 API,更多通过这个开源项 目来对 XSS 漏洞进行防护的信息,具体可以参考其官方文档。


2. CSRF 漏洞


Cross-Site Request Forgery(CSRF),跨站请求伪造攻击,攻击流程如图 3-12 所示。利用 这个漏洞可以使受害者在不知情的情况下,向存在该漏洞的 Web 站点发送请求,最终以受害 者的身份完成特定操作。CSRF 漏洞的本质原因是重要操作的参数可以被攻击者猜测到。 

图 3-12 CSRF 攻击示意图


CSRF 漏洞危害 

修改用户信息,如用户的头像、发货地址等。更有甚者,可能执行恶意操作,比如修 改密码、添加/删除好友或者点赞/转发/评论/私信。


CSRF 漏洞防护 

针对 CSRF漏洞的防护,可以通过在用户提交的表单中加入随机验证值的方式进行防护, 还可以使用二次验证,例如使用短信验证码、密码确认等方式进行防护。当然,有些业务为了不影响用户的体验,可能会使用 refer 等字段作为验证,这种方法比较简单但也容易被绕过。

3. SQL 注入漏洞


SQL 注入(SQL Injection)是一种常见的 Web 安全漏洞,攻击者利用这个漏洞,可以 访问或修改数据,或者利用潜在的数据库漏洞进行攻击。


注入的漏洞本质是代码和数据未分离。通过在用户可控参数中注入 SQL 语法,破坏原 有 SQL 结构,达到编写程序时意料之外结果的攻击行为。以下示例存在 SQL 注入漏洞。



由于上面在拼接 SQL 语句的时候,并未对用户的参数进行检查,假如用户输入的参数 是精心构造的,像如下的值。

通过这种注入方式,用户可能就在未有合法password的情况下,通过对SQL语句注入,获 得不属于它的数据,绕过这里的password的验证。当然这里示例的只是一种很简单的注入方式。


漏洞分类 

漏洞分类分为以下两种。

回显注入:攻击者可以直接在当前界面内容中获取想要的内容或者通过报错信息 获取想要的内容。

盲注:数据库查询结果无法从直观页面中获取,攻击者通过使用数据库逻辑或使 数据库执行延时等方法获取想要的内容。


SQL 注入漏洞危害 

对于 SQL 注入漏洞,最常见的危害就是泄露了数据库中敏感数据给未授权用户,因为SQL 注入漏洞可以绕过一些认证,可能导致用户名、密码、手机号码、身份证号码等用户 信息的泄露。通过一些精心构造的注入手法,可能会获取到管理员的后台密码,甚至获得 非法提权和用户系统的权限。


SQL 注入漏洞防护 

针对 SQL 注入漏洞的防护,主要是要意识到这种漏洞的存在,不信任任何来自客户端 的数据。可以通过过滤一些 SQL 关键字的方式进行防护,比如“select”、“insert”这一类 关键字,“`” (反引号) 、“ ””(双引号)、“--”( SQL 注释开头)这一类保留字符等。当然因 为各种编码和绕过技术,手工进行过滤是不够的,容易遗漏,比较安全的方式是采用语言 预置的功能,例如,用 Java 的 PreparedStatment 进行 SQL 操作。当然,现在还有很多框架 类的数据操作工具可以给我们帮助,常见的数据库持久化框架,都会自动完成对相关数据 的过滤和校验。最后,千万不要使用字符串拼接的方式进行 SQL 语句的组装和操作。


4. 其他漏洞


我们要从一开始就树立安全意识,知道应用的不安全性,并时刻记在心里。一旦发生 信息泄露等问题,会导致公关危机,严重伤害我们的产品。除了上面提到 XSS、CSRF、SQL 注入等漏洞外,还有其他常见的点击劫持、URL 跳转、命令注入、文件操作漏洞、XML 注入、XXE 漏洞、SSRF 漏洞、文件解析漏洞、逻辑漏洞等 Web 安全问题。更多的 Web 安 全漏洞问题,大家可以查阅相关的资料。


5. 云环境下的 Web 安全解决方案


Web 漏洞扫描 

Web 漏洞扫描可以作为检测 Web 漏洞的辅助工具之一,帮我们发现 Web 漏洞。扫描 器是通过网络 Fuzzing 功能来探测目标主机和目标服务是否存在漏洞的产品。Web 漏洞扫 描可以对 Web 服务器的多种项目进行全面的安全检测,检测 SQL 注入、XSS、CSRF 等漏 洞并提供解决方案。


以云扫描器为例,我们使用 Web 漏洞扫描器来对自己的业务进行扫描。一般有以下步骤。
在扫描器界面添加需要扫描的域名,例如 www.demo.com 作为扫描的入口,如 图 3-13 所示。


图 3-13 添加扫描入口


有一些云平台的扫描器为了防止扫描器被滥用,需要验证任务添加者是否为这个 域名的拥有者。验证的方式主要分为以下两种。
1. 文件验证授权,在站根目录下创建文件如“signature.txt”,文件内容为空。
2. 首页验证授权,在网站首页中嵌入隐藏元素,并带有特定的验证字符串。


扫描器以爬虫技术为基础,如果需要深入页面爬取,就需要添加登录信息(一般 是有效的 Cookie)和登出页面,如图 3-14 所示。 

图 3-14 添加登录信息


为了尽量减少扫描器对 Web 应用的影响,还需要设置扫描的发包速率,防止扫描 器对应用产生压力。


最后,等待扫描完成,根据扫描结果对响应漏洞进行修复,具体的漏洞原理和修 复方式在上面已经进行了叙述,更多内容可以参考 OWASP Top 10 项目,https:// www.owasp.org/index.php/Category:OWASP_Top_Ten_2017_Project。


Web 应用防火墙 

Web 应用防火墙是通过执行一系列针对 HTTP/HTTPS 的安全策略来专门为 Web 应用 提供保护的产品,可以帮助用户加固他们的 Web 应用程序,以抵御 SQL 注入、XSS、CSRF、 XXE、文件包含漏洞等漏洞。


现在市面上有大量的云Web应用防火墙(也叫云WAF,我们在本书中统一称为云WAF) 可用,而每个云计算平台基本都自带了云 WAF 功能。

接入云 WAF 的方式很简单,主要分成两种方式。

1. 修改 NS 记录的方式,将需要保护的 Web 站点的域名解析 NS 记录改到云 WAF 提供商的高防 DNS 服务,如图 3-15 所示。 


图 3-15 NS 方式接入云 WAF


2. 使用 CNAME 别名的方式,设置将需要保护的 Web 站点的域名删除 A 记录,增 加 CNMAE 解析记录到云 WAF 提供的别名服务商,如图 3-16 所示。 

图 3-16 CNAME 方式接入云 WAF


如果站点是HTTPS 的,那么需要上传对应的证书到云 WAF平台上,如图3-17 所示。


图 3-17 上传证书

配置云 WAF,一般云 WAF 使用默认策略即可。如果有特殊的需求,可以根据对 应的产品手册进行自定义策略修改。
配置完成,查看相关的防护结果和报表,如图 3-18 和 3-19 所示。

图 3-18 查看 WAF 结果 

图 3-19 查看 WAF 报表


文章节选自《云原生应用架构实践》 网易云基础服务架构团队 著


网易云计算基础服务深度整合了 IaaSPaaS 及容器技术,提供弹性计算、DevOps 工具链及微服务基础设施等服务,帮助企业解决 IT、架构及运维等问题,使企业更聚焦于业务,是新一代的云计算平台。点击可免费试用