近几年,Web 漏洞发掘和渗透攻击也越来越多。黑客利用网站操作系统、中间件、Web 代码的漏洞进行攻击,从而获得 Web 服务器和数据库服务器的控制访问权限,进行页面篡改、挂马、暗链、数据泄露、肉鸡等一系列非法操作。本文主要介绍了Web应用常见的漏洞和防护对策。
一、XSS漏洞原理和防护
1.XSS漏洞简介
XSS是 Cross Site Scripting的简写,即跨站脚本攻击,为了避免和层叠样式表(Cascading Style Sheets,CSS)的缩写混淆,故缩写为 XSS。
恶意攻击者往 Web 页面里插入恶意 HTML 代码,当用户浏览该页时,嵌入 Web 里面 的 HTML 代码会被执行,从而达到恶意攻击用户的特殊目的。
2.XSS漏洞分类
按照 XSS 的不同,可以分为如下几种类型:
反射型 XSS
反射型 XSS 指的是把用户输入的数据“反射”给浏览器,也就是黑客通常需要诱使用 户“点击”一个恶意的链接。
攻击者会通过社会工程学手段,发送一个URL链接给用户打开,或者在 IM、论坛、博客 上发放URL诱使用户点击,在用户打开页面的同时,浏览器会执行页面中嵌入的恶意脚本。
存储型 XSS
存储型 XSS 会把用户输入的数据存储在服务器端。当其他用户访问到展示这个数据的 页面就会被攻击。
攻击者利用 Web 应用程序提供的录入或修改数据功能,将数据存储到服务器或用户 Cookie 中,当其他用户浏览展示该数据的页面时,浏览器会执行页面中嵌入的恶意脚本。 所有浏览者都会受到攻击。
DOM 型 XSS
DOM 型 XSS 的分类并不是按照上面数据是否存储在服务端分类,而是比较特别的一 类 XSS,通过修改页面的 DOM 节点形成 XSS。和以上两个跨站攻击的差别是,DOM 跨站 是纯页面脚本的输出,只有规范使用 JavaScript,才可以防御。
3.XSS漏洞危害
XSS 漏洞可以偷取用户令牌 Cookie,伪造用户身份登录进行恶意操作,这是最常见的。 同时,还可以控制用户浏览器,获取用户键盘记录如用户输入的用户名密码,进行扫描内 网。比较高级的用法可以结合浏览器自身和浏览器插件的漏洞,下载病毒木马,深入攻击, 例如衍生 URL 跳转攻击、蠕虫攻击、DDoS 攻击、盲打后台等。
4.XSS 漏洞防护
针对 XSS 漏洞的防护,其核心问题在于对用户的输入没有进行验证和过滤,对于可信 和不可信边界的划分也是所有安全问题的核心。要针对 XSS 进行防护,需要根据上面不同 的攻击类型进行处理。以“谁使用,谁负责”的原则,任何使用用户不可信数据方都需要对数据进行校验,不信任任何来自客户端的用户输入,对于 XSS 来说,根据不同的应用场 景进行过滤。如果是不需要显示富文本的地方,直接对所有的 HTML 转义处理,反射性和 存储型可以在后端进行转义后输出到前端;如果是 DOM 型的需要在前端使用 JavaScript 进行转义;如果需要显示富文本,就需要对用户输入进行严格的限制。开源项目 OWASP AntiSamy 是一个可确保用户输入的 HTML/CSS 符合应用规范的 API,更多通过这个开源项目来对 XSS 漏洞进行防护的信息,具体可以参考其官方文档。
二、SQL注入攻击原理和防护
1.SQL注入攻击原理
SQL注入是发生于应用程序与数据库层的安全漏洞。注入的漏洞本质是代码和数据未分离,通过在用户可控参数中注入SQL语法,程序未对输入的指令进行合法性判断,注入进去的恶意指令就会被数据库服务器误认为是正常的SQL指令而运行,破坏原有 SQL 结构,达到编写程序时意料之外结果的攻击行为。
以下示例存在 SQL 注入漏洞:
由于上面在拼接 SQL 语句的时候,并未对用户的参数进行检查,假如用户输入的参数 是精心构造的,像如下的值。
由于上面在拼接 SQL 语句的时候,并未对用户的参数进行检查,假如用户输入的参数 是精心构造的,像如下的值。
2.SQL 注入漏洞分类
按照数据库返回的结果可以分为回显注入和盲注:
回显注入:攻击者可以直接在当前界面内容中获取想要的内容或者通过报错信息 获取想要的内容。
盲注:数据库查询结果无法从直观页面中获取,攻击者通过使用数据库逻辑或使 数据库执行延时等方法获取想要的内容。
另外,按照SQL注入按照参数类型可分为两种:数字型和字符型。字符型SQL注入需要单引号来闭合。
3.SQL 注入漏洞危害
(1)泄露数据库中敏感数据给未授权用户,SQL 注入漏洞可以绕过一些认证,可能导致用户名、账号、密码、手机号码、身份证号码等用户信息的泄露;
(2)通过一些精心构造的注入手法,可能会获取到管理员的后台密码,甚至获得非法提权和用户系统的权限;
(3)据结构被黑客探知,得以做进一步攻击;
(4)黑客可能会在系统中添加恶意链接、恶意代码等,进行恶意篡改。
4.SQL 注入漏洞防护
针对 SQL 注入漏洞的防护,主要是要意识到这种漏洞的存在,不信任任何来自客户端 的数据。可以通过过滤一些 SQL 关键字的方式进行防护,比如“select”、“insert”这一类 关键字,“`” (反引号) 、“ ””(双引号)、“--”( SQL 注释开头)这一类保留字符等。当然因为各种编码和绕过技术,手工进行过滤是不够的,容易遗漏,比较安全的方式是采用语言 预置的功能,例如,用 Java 的 PreparedStatment 进行 SQL 操作。
当然,现在还有很多框架类的数据操作工具可以给我们帮助,常见的数据库持久化框架,都会自动完成对相关数据的过滤和校验。最后,千万不要使用字符串拼接的方式进行 SQL 语句的组装和操作。
三、CSRF漏洞及防护
Cross-Site Request Forgery(CSRF),跨站请求伪造攻击,攻击流程如下图。利用这个漏洞可以使受害者在不知情的情况下,向存在该漏洞的 Web 站点发送请求,最终以受害 者的身份完成特定操作。CSRF 漏洞的本质原因是重要操作的参数可以被攻击者猜测到。
1.CSRF 漏洞危害
修改用户信息,如用户的头像、发货地址等。更有甚者,可能执行恶意操作,比如修 改密码、添加/删除好友或者点赞/转发/评论/私信。
2.CSRF 漏洞防护
针对 CSRF漏洞的防护,可以通过在用户提交的表单中加入随机验证值的方式进行防护, 还可以使用二次验证,例如使用短信验证码、密码确认等方式进行防护。当然,有些业务为了不影响用户的体验,可能会使用 refer 等字段作为验证,这种方法比较简单但也容易被绕过。
四、其他漏洞
我们要从一开始就树立安全意识,知道应用的不安全性,并时刻记在心里。一旦发生 信息泄露等问题,会导致公关危机,严重伤害我们的产品。除了上面提到 XSS、CSRF、SQL 注入等漏洞外,还有其他常见的点击劫持、URL 跳转、命令注入、文件操作漏洞、XML 注入、XXE 漏洞、SSRF 漏洞、文件解析漏洞、逻辑漏洞等 Web 安全问题。
五、Web 安全解决方案
1.Web 漏洞扫描
Web 漏洞扫描可以作为检测 Web 漏洞的辅助工具之一,帮我们发现 Web 漏洞。扫描 器是通过网络 Fuzzing 功能来探测目标主机和目标服务是否存在漏洞的产品。Web 漏洞扫 描可以对 Web 服务器的多种项目进行全面的安全检测,检测 SQL 注入、XSS、CSRF 等漏 洞并提供解决方案。
2.Web 应用防火墙
Web 应用防火墙是通过执行一系列针对 HTTP/HTTPS 的安全策略来专门为 Web 应用 提供保护的产品,可以帮助用户加固他们的 Web 应用程序,以抵御 SQL 注入、XSS、CSRF、 XXE、文件包含漏洞等漏洞。
现在市面上有大量的云Web应用防火墙(也叫云WAF,我们在本书中统一称为云WAF) 可用,而每个云计算平台基本都自带了云 WAF 功能。
点击了解网易易盾Web应用防火墙,专注Web安全防护,只需三个步骤,五分钟即可完成快速接入WAF平台,网站安全防护专家团7x24小时在线,确保应急响应。
参考文献:《云原生应用架构实践》 网易云基础服务架构团队 著
https://sq.163yun.com/blog/article/220978758884847616