前端安全问题一直是老生常谈,但是重视的没多少人,不是所有 Web 开发者都有安全的概念,甚至可能某些安全漏洞从来都没听说过。在此整理一篇前端安全问题的文档,供前端小伙伴了解,希望 Web 开发者在开发时能依此逐条检查代码中的安全问题。
1. DoS攻击
介绍
DoS(Denial of Service),拒绝服务,简单点说就是为了让服务器无法提供正常服务,最常见的DoS攻击是网络带宽攻击和连通性攻击。
- 带宽攻击:以极大的通信量冲击网络,使得所有可用网络资源都被消耗殆尽,最后导致合法的用户请求无法通过。
- 连通性攻击:用大量的连接请求冲击计算机,使得所有可用的操作系统资源都被消耗殆尽,最终计算机无法再处理合法用户的请求。
针对DoS攻击的防御
- 缩短请求服务器的超时间
- 限制同时发起的请求个数
- 设置请求Cookie
2. XSS攻击
介绍
XSS(Cross Site Scripting),跨站脚本攻击。恶意攻击者在web页面中会插入一些恶意的script代码。当目标网站、目标用户浏览器渲染HTML文档的过程中,出现了不被预期的脚本指令并执行时,XSS就发生了,因此达到恶意攻击用户的目的。
推荐一篇美团技术团队的文章 前端安全系列(一):如何防止XSS攻击?
3.CSRF攻击
介绍
CSRF(Cross Site Request Forgery)攻击。即跨站请求伪造。通俗点说就是攻击者盗用了你的身份,以你的名义发送恶意请求,对服务器来说这个请求是完全合法的,但是却完成了攻击者所期望的一个操作。
推荐一篇美团技术团队的文章 前端安全系列之二:如何防止CSRF攻击?
4. SQL注入攻击
介绍
SQL 注入(SQLi)是一种注入攻击。常见于 表单提交的时候,提交项的值会影响SQL语句的执行。使攻击者能够完全控制 Web 应用程序后面的数据库服务器。
SQL 注入攻击的类型
- 带内注入: 攻击者可以通过相同的通信通道发起攻击并获得结果
- 盲注入: 盲注入攻击不会直接从目标数据库中显示数据;相反,攻击者会仔细检查行为中的间接线索
- 带外注入: 攻击者会制作 SQL 语句,这些语句在呈现给数据库时会触发数据库系统创建与攻击者控制的外部服务器的连接。以这种方式,攻击者可以收集数据或可能控制数据库的行为
防止 SQL 注入攻击
- 不要使用动态 SQL
- 不要将敏感数据保留在纯文本中
- 限制数据库权限和特权
- 避免直接向用户显示数据库错误
- 对访问数据库的 Web 应用程序使用 Web 应用程序防火墙(WAF)
- 定期测试与数据库交互的 Web 应用程序
- 将数据库更新为最新的可用修补程序
5. iframe 带来的风险
介绍
有些时候我们的前端页面需要用到第三方提供的页面组件,通常会以iframe的方式引入。iframe本身不受我们控制,那么如果iframe中的域名因为过期而被恶意攻击者抢注,或者第三方被黑客攻破,iframe中的内容被替换掉了,从而利用用户浏览器中的安全漏洞下载安装木马、恶意勒索软件等等。
iframe防御
iframe有了一个叫做sandbox的安全属性,通过它可以对iframe的行为进行各种限制,在 iframe 元素中添加上这个关键词就行,另外,sandbox也提供了丰富的配置参数,我们可以进行较为细粒度的控制。一些典型的参数如下:
- allow-forms:允许iframe中提交form表单
- allow-popups:允许iframe中弹出新的窗口或者标签页(例如,window.open(),showModalDialog(),target=”_blank”等等)
- allow-scripts:允许iframe中执行JavaScript
- allow-same-origin:允许iframe中的网页开启同源策略
6. CDN劫持
介绍
cdn可以用来加速资源请求,cdn原理是分配就近的资源,对于已经加载过的资源直接从就近节点读取,进而加快网络请求速度。
应对策略
- 遇到DNS劫持我们需要手动修改DNS、修改路由器密码。
- 遇到CDN劫持换个第三方不带加速的 DNS,或许就不会解析到 CDN 服务器上了。
- 遇到网关劫持机器固定的网络尽量绑定MAC和接口吧。貌似大多数网吧都绑定了MAC和接口,极大增强了链路层的安全性。同时,独立的子网段尽可能划分VLAN,避免过大的广播环境。