前端安全 — XSS攻击

Web前端安全问题:XSS攻击、CSRF攻击、点击劫持 文章目录前端有哪些攻击方式?1. XSS攻击XSS 本质原理XSS分类防御 XSS 攻击如何去检测XSS攻击,怎么知道自己的页面是否存在XSS漏洞?2. CSRF典型的CSRF攻击流程:CSRF的特点如何防范CSRF攻击?3. 点击劫持典型点击劫持攻击流程 【面试篇】寒冬求职之你必须要懂的Web安全 前端有哪些攻击方式? XSS攻击、CSRF攻击、点击劫持 1. XSS攻击 XSS(Cross... 阅读详情

目录

XSS攻击的介绍

XSS漏洞的发生和修复

一个案例

注意特殊的HTML属性、JavaScript API

根据上下文采用不同的转义规则

随着互联网的高速发展,信息安全问题已经成为企业最为关注的焦点之一,而前端又是引发企业安全问题的高危据点。在移动互联网时代,前端人员除了传统的XSS、CSRF等安全问题之外,又时常遭遇网络劫持、非法调用Hybrid API等新型安全问题。当然,浏览器自身也在不断在进化和发展,不断引入CSP、Same- Site Cookies等新技术来增强安全性,但是仍存在很多潜在的威胁,这需要前端技术人员不断进行“查漏补缺”。
XSS,主要包括:
1. XSS攻击的介绍
2. XSS攻击的分类
3. XSS 攻击的预防和检测
4. XSS攻击的总结
5. XSS攻击案例


XSS攻击的介绍

在开始本文之前,我们先提出一个问题,请判断以下两个说法是否正确: 
1. XSS防范是后端RD (研发人员)的责任,后端RD应该在所有用户提交数据的接口,对敏感字符进行转义,才能进行下一步操作。
2.所有要插入到页面上的数据,都要通过一个敏感字符过滤函数的转义,过滤掉通用的敏感字符后,就可以插入到页面中。
如果你还不能确定答案,那么可以带着这些问题向下看,我们将逐步拆解问题。

XSS漏洞的发生和修复

XSS攻击是页面被注入了恶意的代码,为了更形象的介绍,我们用发生在小明同学身边的事例来进行说明

一个案例

某天,某公司需要一个搜索页面,根据URL参数决定关键词的内容。小明很快把页面写好并上线。代码如下:

<input type="text" value="< %=getParameter("keyword") %>"/>
	<button>搜索</button>
	<div>
		您搜索的关键词是:<%= getParameter("keyword") %>
	</div>

然而,在上线不久,小明就收到了安全组发来的神秘链接:

http://xxx/search?keyword="><script>alert('XSS');</script>

小明带着一种不祥的预感 点开了这个链接[请勿模仿,确认安全的链接才能点开]。果然,页面中弹出了写着"XSS"的对话框。
可恶,中招了!小明眉头一皱,发现了其中的奥秘:
当浏览器请求http://xxx/ search?keyword="><script>alert( 'XSS' );</script>时,服务端会解析出请求参数keyword,得到"><script>alert( ' xss');</script>,拼接到HTML中返回给浏览器。形成了如下的HTML:

<input type="text" value=""><script>alert('XSS');</script>">
<button>搜索</ button>
<div>
您搜索的关键词是: "><script>alert('XSS');</script>
</div>

浏览器无法分辨出<script>alert( 'XSS' );</script>是 恶意代码,因而将其执行。
这里不仅仅 div 的内容被注入了,而且 input 的 value 属性也被注入,alert 会弹出两次。
面对这种情况,我们应该如何进行防范呢?

其实,这只是浏览器将用户的输入当成了脚本进行了执行。那么只要告诉浏览器这段内容是文本就可以了。

聪明的小明很快找到了解决办法,将这个漏洞修复

<input type="text" value="< %= escapeHTML(getParameter("keyword"))%>"/>
	<button>搜索</button>
	<div>
		您搜索的关键词是:<%= escapeHTML(getParameter("keyword")) %>
	</div>

escapeHTML()按照如下规则进行转义:

 经过了转义函数的处理后,最终浏览器接收到的响应为:

<input type="text"
value=" &quot;&gt;&lt ;script&gt;alert(&#x27;XSS&#x27;);&lt; &#x2F;script&gt;">
<button>搜索</button>
<div>
您搜索的关键词是: &quot ; &gt ; &lt ;scr ipt&gt ;alert(&#x27 ;XSS&#x27; );&lt; &#x2F;script&gt;
</div>

恶意代码都被转义,不再被浏览器执行,而且搜索词能够完美的在页面显示出来。
通过这个事件,小明学习到了如下知识: 

  • 通常页面中包含的用户输入内容都在固定的容器或者属性内,以文本的形式展示。
  • 攻击者利用这些页面的用户输入片段,拼接特殊格式的字符串,突破原有位置的限制,形成了代码片段。
  • 攻击者通过在目标网站上注入脚本,使之在用户的浏览器上运行,从而引发潜在风险。
  • 通过HTML转义,可以防止XSS攻击。[事情当然没有这么简单啦!请继续往下看]。

注意特殊的HTML属性、JavaScript API

自从上次事件之后,小明会小心的把插入到页面中的数据进行转义。而且他还发现了大部分模板都带有的转义配置,让所有插入到页面中的数据都默认进行转义。这样就不怕不小心漏掉未转义的变量啦,于是小明的工作又渐渐变得轻松起来。
但是,作为导演的我,不可能让小明这么简单、开心地改Bug。
不久,小明又收到安全组的神秘链接: http://xxx/?redirect_ to=javascript:alert( 'XSS')。小明不敢大意,赶忙点开页面。然而,页面并没有自动弹出万恶的"XSS”。
小明打开对应页面的源码,发现有以下内容

<a href="<%= escapeHTML(getParameter("redirect_ to")) %>">跳转...</a>

这段代码,当攻击URL为http://xxx/?redirect_ to=javascript:alert( 'XSS'),服务端响应就成了:

<a href=" javascript:alert(&#x27;XSS&#x27;)">跳转...</a>

虽然代码不会立即执行,但一旦用户点击a标签时,浏览器会就会弹出"XSS"。
可恶,又失策了... .
在这里,用户的数据并没有在位置上突破我们的限制,仍然是正确的href属性。但其内容并不是我们所预期的类型。
原来不仅仅是特殊字符,连javascript:这样的字符串如果出现在特定的位置也会引发XSS攻击。

//禁止URL以"javascript:"开头
xss = getParameter("redirect_to").startsWith('javascript:');
if (!xss){
<a href="<8= escapeHTML ( getParameter (" redirect_ _to"))8>">
跳转...
</a>
}else{
<a href=" /404">
跳转...
</a> 
}

只要URL的开头不是javascript:,就安全了吧?
安全组随手又扔了一个连接: http://xxx/?redirect_ to= jAvascRipt:alert( 'XSS')
这也能执行,好吧,浏览器就是这么强大。
小明欲哭无泪,在判断URL开头是否为javascript: 时,先把用户输入转成了小写,然后再进行比对。
不过,所谓"道高一尺,魔高一丈”。面对小明的防护策略,安全组就构造了这样一个连接:

http://xxx/?redirect_to=%20javascript:alert('XSS')

%20javascript:alert( 'XSS') 经过 URL 解析后变成javascript:alert( 'XSS'),这个字符串以空格开头。这样攻击者可以绕过后端的关键词规则,又成功的完成了注入。
最终,小明选择了白名单的方法,彻底解决了这个漏洞:

//根据项目情况进行过滤,禁止掉" javascript:"链接、非法scheme 等
allowSchemes = ["http", "https"];
valid = isValid( getParameter( " redirect_ to"), allowSchemes) ;
if (valid) {
<a href="<&= escapeHTML(getParameter("redirect to"))8>">
跳转...
</a>
else
<a href=" /404">
跳转...
</a>
}

通过这个事件,小明学习到了如下知识:

  • 做了HTML转义,并不等于高枕无忧。
  • 对于链接跳转,如<a href= "xxx.” 或location. href= "xxx", 要检验其内容,禁止以javascript: 开头的链接,和其他非法的scheme。

根据上下文采用不同的转义规则

某天,小明为了加快网页的加载速度,把一个数据通过JSON的方式内联到HTML中:

<script>
var initData = <% = data.toJSON() %>
</script>

插入JSON的地方不能使用 escapeHTML(),因为转义”后,JSON格式会被破坏

前端安全之XSS XSS, 即为(Cross Site Scripting), 中文名为跨站脚本, 是发生在目标用户的浏览器层面上的,当渲染DOM树的过程成发生了不在预期内执行的JS代码时,就发生了XSS攻击。跨站脚本的重点不在‘跨站’上,而在于‘脚本’上。大多数XSS攻击的主要方式是嵌入一段远程或者第三方域上的JS代码。实际上是在目标网站的作用域下执行了这段js代码。 阅读详情

相关推荐

Web前端安全系列之:XSS攻防及Vue防御(万字长文)

Web 攻击技术的发展也可以分为几个阶段。在Web 1.0时代,人们更多的是关注服务器端动态脚本的安全问题,比如将一个可执行脚本(俗称webshell)上传到服务器上,从而获得权限。后续有出现了SQL注入,SQL注入的出现是Web安全史上的一个里程碑,SQL注入漏洞至今仍然是Web安全领域中的一个重要组成部分。再后续另一个里程碑的安全问题问世–XSS(跨站脚本攻击)。伴随着Web 2.0的兴起,XSS、CSRF等攻击已经变得更为强大。Web攻击的思路也从服务器端转向了客户端,转向了浏览器和用户。

绝对零度的博客 1万+

如何避免XSS攻击

前言 XSS 攻击:即跨站脚本攻击,它是 Web 程序中常见的漏洞。原理是攻击者往 Web 页面里插入恶意的脚本代码(css 代码、Javascript 代码等),当用户浏览该页面时,嵌入其中的脚本代码会被执行,从而达到恶意攻击用户的目的,如盗取用户 cookie、破坏页面结构、重定向到其他网站等。 预防: 1、获取用户的输入,不用innerHtml,用innerText. 2、预防 XSS 的核...

狂欢的博客 1094

前端安全系列(一):如何防止XSS攻击?

在开始本文之前,我们先提出一个问题,请判断以下两个说法是否正确:1.XSS 防范是后端 RD(研发人员)的责任,后端 RD 应该在所有用户提交数据的接口,对敏感字符进行转义,才能进行下一步操作。2.所有要插入到页面上的数据,都要通过一个敏感字符过滤函数的转义,过滤掉通用的敏感字符后,就可以插入到页面中。如果你还不能确定答案,那么可以带着这些问题向下看,我们将逐步拆解问题。

WLsweety的博客 2941

彻底理解前端安全面试题(1)—— XSS 攻击,3种XSS攻击详解,建议收藏(含源码)

xss 攻击的三种类型都用代码模拟了,我的仓库地址如下,欢迎查看内容较多,难免疏漏,如有问题,欢迎指正。这是一系列的文章,关于网络安全的内容还有 CSRF、CORS 和中间人攻击的内容没有总结,持续更新中,欢迎关注。

有一棵树的博客 2924

PX4自定义uORB消息与MAVLink消息映射实战:从飞控到QGC地面站完整流程解析

本文详细解析PX4飞控中自定义uORB消息与MAVLink消息映射的完整流程,涵盖从飞控内部消息定义、MAVLink消息创建到QGC地面站接收显示的全链路实践。重点介绍如何使用mavlink inspector工具进行调试,解决版本兼容性和多实例消息处理等常见问题,为无人机开发者提供可靠的实时数据监控方案。

ll5678的博客 1067

《LabVIEW ZYNQ实战指南》第6章>>案例解析:基于USB WiFi模块的ZYNQ无线通信部署与Linux RT开发

本文详细解析了如何为ZYNQ开发板部署USB WiFi模块,实现无线通信。通过LabVIEW Linux RT环境,利用封装好的驱动VI,开发者可轻松配置ZYNQ连接无线网络,摆脱网线束缚,实现程序无线部署与远程调试,为工业物联网应用奠定基础。

app77的博客 755

前端安全系列:如何防止XSS攻击?

前端安全  随着互联网的高速发展,信息安全问题已经成为企业最为关注的焦点之一,而前端又是引发企业安全问题的高危据点。在移动互联网时代,前端人员除了传统的 XSS、CSRF 等安全问题之外,又时常遭遇网络劫持、非法调用 Hybrid API 等新型安全问题。当然,浏览器自身也在不断在进化和发展,不断引入 CSP、Same-Site Cookies 等新技术来增强安全性,但是仍存在很多潜在的威胁,这...

琦彦 6150

从光耦隔离到稳定驱动:信捷伺服与STM32的硬件设计陷阱与救赎

本文深入探讨了信捷伺服驱动器与STM32微控制器配合时的硬件设计关键问题,包括光耦隔离电路选型、电源电压选择、拨码开关设置等核心环节。针对伺服驱动器的稳定驱动需求,提供了从电路设计到抗干扰策略的完整解决方案,帮助工程师规避常见陷阱,提升工业控制系统的可靠性。

gold8的专栏 312

前端安全: 如何防止 XSS 攻击?

前端安全: 如何防止 XSS 攻击? 分享简介 今天想分享给大家的是 如何防止 XSS 攻击. 为什么想分享的原因是: 感觉大家对前端安全了解不够, 重视不够. 内容是: 什么是 xss, 常见 xss 的类型. 并且通过小游戏来实践. 如何去防止 xss 攻击 如何利用 XSS 进行攻击 什么是 XSS 攻击 Cross-Site Scripting(跨站脚本攻击)简称 XSS,是一种代码注入攻击。攻击者通过在目标网站上注入恶意脚本,使之在用户的浏览器上运行。利用这些恶意脚本,攻击者可获取用户的敏感信

学习真香 4473

Vensim系统动力学建模实战:从理论到仿真优化【案例详解】

本文详细介绍了Vensim在系统动力学建模中的实战应用,从基础理论到仿真优化全面解析。通过人口增长、供应链库存优化等典型案例,展示如何利用Vensim构建动态模型并进行参数优化,帮助读者掌握系统动力学建模的核心技术与实践技巧。

weixin_29231725的博客 476

SAP FAGLFLEXT 是 SAP 新总账的核心余额表,存储多维度的汇总余额数据。核心结论:该表按 “科目 + 会计年度 + 期间 + 维度” 存储累计余额,字段可分为基础标识

FAGLFLEXT是SAP新总账的核心余额表,采用"科目+年度+期间+维度"结构存储多维汇总数据。其字段分为基础标识(科目、年度等)、维度细分(公司代码、利润中心等15个维度)、金额数值(本外币余额)、辅助控制(状态标识)四大类,支持新总账的灵活核算。该表通过凭证自动更新,与旧总账GLT0相比显著扩展了维度核算能力,各维度需在科目主数据或Ledger配置中启用才能使用。

金牌架构师 454

前端安全:如何防止XSS攻击?

XSS攻击是一种常见但危险的漏洞,通过输入验证、输出编码、HTTP头部策略、内容安全策略以及现代框架的使用,可以有效降低XSS攻击的风险。同时,持续的安全检测和团队的安全意识提升也是保障前端安全的重要环节。

破损的天堂鸟博客 4927

由于找不到mfc110u.dll,无法继续执行代码,重新安装程序可能会解决此问题的 解决方案

本文主要介绍了由于找不到mfc110.dll,无法继续执行代码的解决方案,希望能对使用Windows的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 5万+

Web前端安全策略之XSS的攻击与防御

随着技术的发展,前端早已不是只做页面的展示了, 同时还需要做安全方面的处理,毕竟网站上很多数据会涉及到用户的隐私。 若是没有些安全策略, 很容易被别人通过某些操作,获取到一些用户隐私信息,那么用户数据隐私就无法得到保障。 对于前端方面的安全策略你又知道多少呢?接下来我们来介绍一下~

零一的博客 5121

华为OD机试真题 新系统 9月16号 【统计特殊数字】

华为OD新系统机试真题【统计特殊数字】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题【统计特殊数字】。

qq_45776114的博客 766

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

如何防止XSS攻击,保证前端的安全性?

如何防止XSS攻击,保证前端的安全性?

商务合作欢迎私信我 1万+

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

前端安全之-XSS(跨站脚本攻击)详解

xss跨站脚本攻击一.XSS的基本概念二、XSS攻击的主要途径三、XSS的分类反射型XSS存储型XSSDOM XSS防范措施利用 CSP利用 HttpOnly 一.XSS的基本概念 XSS又叫CSS (Cross Site Script) ,为了和css(层叠样式表)区分,我们通常称它为(xss)跨站脚本攻击。它指的是恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而达到恶意的特殊目的。 xss是一种发生在web前端的漏洞,所以其危害的对象也主要

wb199811的博客 8320

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

前端安全指南:防御XSS与CSRF攻击

随着互联网的快速发展,Web应用安全问题日益突出。作为前端开发者,了解常见的安全威胁及其防御措施至关重要。本文将重点介绍两种最常见的前端安全威胁:跨站脚本攻击(XSS)和跨站请求伪造(CSRF),并提供实用的防御策略。

exlink2012的专栏 1404

前端安全:XSS攻击与防御策略

XSS(Cross-Site Scripting)攻击是前端安全中的一个重要问题,它发生在攻击者能够注入恶意脚本到网页中,这些脚本在用户浏览器中执行时可以获取用户的敏感信息,例如会话令牌、个人信息等。

天涯学馆 2427

转:前端安全之XSS攻击

前端安全 原文链接:https://www.freebuf.com/articles/web/185654.html 随着互联网的高速发展,信息安全问题已经成为企业最为关注的焦点之一,而前端又是引发企业安全问题的高危据点。在移动互联网时代,前端人员除了传统的 XSS、CSRF 等安全问题之外,又时常遭遇网络劫持、非法调用 Hybrid API 等新型安全问题。当然,浏览器自身也在不断在进化和...

weixin_30586257的博客 349

前端安全(一)XSS攻击原理及防范

前端是直面用户的窗口,其安全性却是最容易被忽略的一环。本文将介绍: 一、什么是XSS攻击 1.1 定义 1.2 XSS攻击的危害 二、 XSS攻击类型 2.1 反射型攻击 2.2 存储型攻击 2.3 DOM型攻击 2.4 三种攻击类型的区别 三、 如何防范XSS攻击 3.1 设置Cookie HttpOnly 为 true 3.2 纯前端渲染 3.3 使用合适的转义库...

qq_34416331的博客 3120
上一篇: ES6新增 Symbol
下一篇: 前端安全 — XSS攻击的分类、XSS攻击的预防
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值