1. XSS攻击
概念
XSS 攻击指的是跨站脚本攻击,是一种代码注入攻击。攻击者通过在网站注入恶意脚本,使之在用户的浏览器上运行,从而盗取用户的信息如 cookie 等
XSS本质是因为网站没有对恶意代码进行过滤,与正常代码混合在一起了,浏览器没发区分那些脚步是否可信,从而导致恶意代码的执行。
攻击者可以通过这种攻击方式进行以下操作:
- 获取页面的数据,如DOM、cookie、localstorage;
- DOS攻击,发送合理请求,暂用服务器资源,从而使用户无法访问服务器;
- 破坏页面结构
- 流量劫持(将链接指向某个网站)
攻击类型
xss攻击可以分为存储型、反射型和DOM型
- 存储型指的是恶意脚本会存储在目标服务器上,当浏览器请求数据时,脚本从服务器传回并执行
- 反射型指的是攻击者诱导用户访问一个恶意代码URL后,服务器端接收数据处理,然后把恶意代码的数据发送到浏览器端,浏览器端解析这段带有XSS代码的数据后当脚本执行,最终完成xss攻击;
- DOM型指的通过修改页面的DOM节点行程xss;
存储型 XSS 的攻击步骤:
- 攻击者将恶意的代码提交到目标网站的数据中;
- 用户打开目标网站时,⽹站服务端将恶意代码从数据库取出,拼接在 HTML 中返回给浏览器
- ⽹站服务端将恶意代码从数据库取出,拼接在 HTML 中返回给浏览器
- 恶意代码窃取⽤户数据并发送到攻击者的⽹站,或者冒充⽤户的⾏为,调⽤⽬标⽹站接⼝执⾏攻击者指定的操作。
这种攻击常⻅于带有⽤户保存数据的⽹站功能,如论坛发帖、商品评论、⽤户私信等
反射型 XSS 的攻击步骤:
- 攻击者构造出特殊的 URL,其中包含恶意代码;
- ⽤户打开带有恶意代码的 URL 时,⽹站服务端将恶意代码从 URL 中取出,拼接在 HTML 中返回给浏览器;
- 用户浏览器接收到响应后解析执⾏,混在其中的恶意代码也被执⾏;
- 恶意代码窃取⽤户数据并发送到攻击者的⽹站,或者冒充⽤户的⾏为,调⽤⽬标⽹站接⼝执⾏攻击者指定的操作;
反射型 XSS 跟存储型 XSS 的区别是:存储型 XSS 的恶意代码存在数据库⾥,反射型 XSS 的恶意代码存在 URL ⾥。
反射型 XSS 漏洞常⻅于通过 URL 传递参数的功能,如⽹站搜索、跳转等。 由于需要⽤户主动打开恶意的 URL 才能⽣效,攻击者往往会结合多种⼿段诱导⽤户点击。
DOM 型 XSS 的攻击步骤:
- 攻击者构造出特殊的 URL,其中包含恶意代码;
- ⽤户打开带有恶意代码的 URL;
- ⽤户浏览器接收到响应后解析执⾏,前端 JavaScript 取出 URL 中的恶意代码并执⾏;
- 恶意代码窃取⽤户数据并发送到攻击者的⽹站,或者冒充⽤户的⾏为,调⽤⽬标⽹站接⼝执⾏攻击者指定的操作;
DOM 型 XSS 跟前两种 XSS 的区别:DOM 型 XSS 攻击中,取出和执⾏恶意代码由浏览器端完成,属于前端JavaScript ⾃身的安全漏洞,⽽其他两种 XSS 都属于服务端的安全漏洞。
如何防御XSS攻击
- 输入验证和清理:确保对用户输入的数据进行合法性验证和转义处理。
- 实施内容安全策略(CSP):限制加载的资源和脚本。
CSP概念
- CSP 指的是内容安全策略,它的本质是建立一个白名单,告诉浏览器哪些外部资源可以加载和执行。我们只需要配置规则,如何拦截由浏览器自己来实现。
- 通常有两种方式来开启 CSP,一种是设置 HTTP 首部中的 Content-Security-Policy,一种是设置 meta 标签的方式
对一些敏感信息进行保护,比如 cookie 使用 http-only,使得脚本无法获取。也可以使用验证码,避免脚本伪装成用户执行一些操作。
2. CSRF攻击
CSRF 攻击指的是跨站请求伪造攻击,攻击者诱导用户进入一个第三方网站,然后该网站向被攻击网站发送跨站请求。如果用户在被攻击网站中保存了登录状态,那么攻击者就可以利用这个登录状态,绕过后台的用户验证,冒充用户向服务器执行一些操作。
CSRF 攻击的本质是利用 cookie 会在同源请求中携带发送给服务器的特点,以此来实现用户的冒充。
攻击类型
- GET类型的CSRF攻击,比如在网站中一个img标签里构建一个请求,当用户打开这个网站的时候就会自动发起提交;
- POST类型的CSRF攻击,比如构建一个表单,然后隐藏它,当用户进入页面,自动提交这个表单;
- 链接类型的CSRF攻击,比如在a标签的href属性构造一个请求,然后诱导用户去点击
如何防御CSRF攻击
- 进行同源检测:服务器根据 http 请求头中 origin 或者 referer 信息来判断请求是否为允许访问的站点,从而对请求进行过滤。
- 使用CSRF令牌:在每个请求中包含一个唯一的令牌,服务器验证该令牌的有效性;
- 设置HTTP头部:如X-Frame-Options、X-Content-Type-Options等,增强浏览器的安全策略;
3. SQL注入
SQL注入是一种通过操纵数据库查询来获取未经授权的数据库访问的攻击方式。攻击者可以通过前端输入插入恶意代码,如果后端没有进行适当的验证和处理,可能会导致敏感数据被窃取或破坏
如何防御SQL注入
- 输入验证:确保前端输入字段经过正确验证和处理
- 后端验证:后端不要信任前端输入的数据,进行二次验证
- 使用安全检测工具;如Burp Scanener、sqlmap等工具来检测潜在的SQL注入漏洞
4.中间人攻击
中间人攻击是指攻击者与通讯的两端分别创建独立的联系,并交换其所收到的数据,使通讯的两端认为他们正在通过一个私密的连接与对方直接对话,但实际上整个会话都被攻击者完全控制,在中间人攻击中,攻击者可以拦截通讯双方的通话并插入新的内容
攻击过程
- 客户端发送请求到服务端,请求被中间人拦截;
- 服务端向客户端发送公钥;
- 中间人截获公钥,保留在自己手上,然后自己生成一个伪造的公钥,发送给客户端;
- 客户端接收到伪造的公钥后,生成加密hash值发给服务器;
- 中间人获得加密hash值,用自己的私钥解密获得真密钥,同时生成假的hash值,发送服务器;
- 服务器用私钥解密获得假密钥,然后加密数据传输给客户端;
如何防御中间人攻击
- 加密通信:使用加密技术可以有效地防止中间人攻击。在传输数据时使用加密算法,确保数据在传输过程中不被窃听或篡改;
- 身份验证:在进行任何通信之前,要求用户进行身份验证,列如使用电子邮件地址或密码进行验证。这可以增加攻击者的难度,因为攻击者需要设法绕过身份验证过程;
- 限制访问:限制对敏感数据的访问,可以防止未经授权人的访问数据。列如,在服务器上设置访问的控制列表,只允许授权用户可以访问敏感数据;
- 监控系统:安装监控系统并定期监视网络流量,可以发现中间人攻击并采取适当的措施。这可以帮助及时采取行动,防止攻击者篡改通信内容;
5. 网络劫持
网络劫持分为两种
DNS劫持
输入京东被强制跳转淘宝这属于dns劫持
- DNS强制解析:通过修改运营商的本地DNS记录,来引导用户流量缓存到服务器
- 302的跳转方式:通过监控网络出口的流量,分析判断那些内容是可以进行劫持的,在对劫持内容发起302跳转的回复,引导用户获取内容
HTTP劫持
访问谷歌但是一直有其它的游戏广告弹出,由于http明文传输,运营商会修改你的http响应内容(即加广告)
DNS劫持由于涉嫌违法,已经被监管起来,现在很少有DNS劫持,而http劫持依然非常盛行,最有效的办法就是全站HTTPS,将HTTP加密这使得运营商无法获取明文,就无法劫持你的响应内容;
6. 那些可能引起前端安全问题
- 跨站脚本攻击(xss):一种代码注入方式,为了与css区分所以被称作xss,早期常⻅于⽹络论坛, 起因是⽹站没有对⽤户的输⼊进⾏严格的限制, 使得攻击者可以将脚本上传到帖⼦让其他⼈浏览到有恶意脚本的⻚⾯, 其注⼊⽅式很简单包括但不限于JavaScript / CSS / Flash 等;
- iframe的滥用:iframe中的内容是由第三⽅来提供的,默认情况下他们不受控制,他们可以在iframe中运⾏JavaScirpt脚本、Flash插件、弹出对话框等等,这可能会破坏前端⽤户体验;
- 跨站点请求伪造(csrf):指攻击者通过设置好的陷阱,强制对已完成认证的⽤户进⾏⾮预期的个⼈信息或设定信息等某些状态更新,属于被动攻击;
- 恶意第三⽅库: ⽆论是后端服务器应⽤还是前端应⽤开发,绝⼤多数时候都是在借助开发框架和各种类库进⾏快速开发,⼀旦第三⽅库被植⼊恶意代码很容易引起安全问题;