web安全之XSS攻击原理及防范(1)

比如:攻击者通过电子邮件等方式将包含注入脚本的恶意链接发送给受害者,当受害者点击该链接的时候,注入脚本被传输到目标服务器上,然后服务器将注入脚本 "反射"到受害者的浏览器上,从而浏览器就执行了该脚本。

因此反射型XSS的攻击步骤如下:

  1. 攻击者在url后面的参数中加入恶意攻击代码。

  2. 当用户打开带有恶意代码的URL的时候,网站服务端将恶意代码从URL中取出,拼接在html中并且返回给浏览器端。

  3. 用户浏览器接收到响应后执行解析,其中的恶意代码也会被执行到。

  4. 攻击者通过恶意代码来窃取到用户数据并发送到攻击者的网站。攻击者会获取到比如cookie等信息,然后使用该信息来冒充合法用户的行为,调用目标网站接口执行攻击等操作。

常见的反射性XSS有哪些?

常见的是:恶意链接。

比如我现在做一个demo。在本地启动一个简单的服务器,然后在页面上点击一个链接后,比如如下代码:html代码如下:

xxs 攻击

testcookie 攻击

然后node中app.js 代码如下:

router.get(‘/xss’, (ctx, next) => {

ctx.body = ‘’;

});

router.get(‘/testcookie’, (ctx, next) => {

console.log(ctx.cookies.get(‘connect.sid’));

ctx.body = ‘’;

next();

});

如上代码,当用户点击xxs 攻击恶意链接时候,页面会跳转到 http://localhost:3001/xss 攻击者预先准备的页面,然后会返回攻击者准备的js脚本,该js脚本就在浏览器中执行了,如下所示:

在这里插入图片描述

当用户点击 testcookie 攻击 这个链接的时候,首先要保证页面上有cookie,比如我请求如下的cookie:

在这里插入图片描述

然后我们点击 testcookie 该链接,也会调用node中的 router.get(’/testcookie’, (ctx, next) => {}) 这个请求获取到cookie,如下所示:

在这里插入图片描述

如上我们就可以很容易通过xss攻击拿到对方的cookie信息了。

三:存储型XSS

===========================================================================

存储型XSS的原理是:主要是将恶意代码上传或存储到服务器中,下次只要受害者浏览包含此恶意代码的页面就会执行恶意代码。

比如我现在做了一个博客网站,然后攻击者在上面发布了一篇文章,内容是如下: 如果我没有对该文章进行任何处理的话,直接存入到数据库中,那么下一次当其他用户访问该文章的时候,服务器会从数据库中读取后然后响应给客户端,那么浏览器就会执行这段脚本,然后攻击者就会获取到用户的cookie,然后会把cookie发送到攻击者的服务器上了。

因此存储型XSS的攻击步骤如下:

  1. 攻击者将恶意代码提交到目标网站数据库中。

  2. 用户打开目标网站时,网站服务器将恶意代码从数据库中取出,然后拼接到html中返回给浏览器中。

  3. 用户浏览器接收到响应后解析执行,那么其中的恶意代码也会被执行。

  4. 那么恶意代码执行后,就能获取到用户数据,比如上面的cookie等信息,那么把该cookie发送到攻击者网站中,那么攻击者拿到该cookie然后会冒充该用户的行为,调用目标网站接口等违法操作。

如何防范?

  1. 后端需要对提交的数据进行过滤。

  2. 前端也可以做一下处理方式,比如对script标签,将特殊字符替换成HTML编码这些等。

四:DOM-based型XSS

==================================================================================

我们客户端的js可以对页面dom节点进行动态的操作,比如插入、修改页面的内容。比如说客户端从URL中提取数据并且在本地执行、如果用户在客户端输入的数据包含了恶意的js脚本的话,但是这些脚本又没有做任何过滤处理的话,那么我们的应用程序就有可能受到DOM-based XSS的攻击。因此DOM型XSS的攻击步骤如下:

  1. 攻击者构造出特殊的URL、在其中可能包含恶意代码。

  2. 用户打开带有恶意代码的URL。

  3. 用户浏览器收到响应后解析执行。前端使用js取出url中的恶意代码并执行。

  4. 执行时,恶意代码窃取用户数据并发送到攻击者的网站中,那么攻击者网站拿到这些数据去冒充用户的行为操作。调用目标网站接口执行攻击者一些操作。

DOM XSS 是基于文档对象模型的XSS。一般有如下DOM操作:

  1. 使用document.write直接输出数据。

  2. 使用innerHTML直接输出数据。

  3. 使用location、location.href、location.replace、iframe.src、document.referer、window.name等这些。

比如如下demo:

假如对于变量url的值是:javascript:alert(‘dom-xss’); 类似这样的,那么就会收到xss的攻击了。因此对于DOM XSS主要是由于本地客户端获取的DOM数据在本地执行导致的。因此我们需要对HTML进行编码,对JS进行编码来防止这些问题产生。具体如何编码可以请看我下面的 XSS 如何防范那个地方即可。

我们接下来看看demo代码吧:

  1. 使用document.write直接输出导致浏览器解析恶意代码

代码如下:

页面渲染完成后,点击弹窗如下所示:

在这里插入图片描述

2. 使用innerHTML直接输出导致浏览器解析恶意代码

代码如下:

点击一样也会弹窗窗口的。也会一样执行xss攻击的。

  1. 使用location/location.href/location.replace/iframe.src 造成的XSS

如下代码:

刷新下页面,也会弹出窗口执行 xss攻击了。

cookie安全策略

=============================================================================

在服务器端设置cookie的时候设置 http-only, 这样就可以防止用户通过JS获取cookie。对cookie的读写或发送一般有如下字段进行设置:

  • http-only: 只允许http或https请求读取cookie、JS代码是无法读取cookie的(document.cookie会显示http-only的cookie项被自动过滤掉)。发送请求时自动发送cookie.

  • secure-only: 只允许https请求读取,发送请求时自动发送cookie。

  • host-only: 只允许主机域名与domain设置完成一致的网站才能访问该cookie。

X-XSS-Protection设置

=====================================================================================

目前该属性被所有的主流浏览器默认开启XSS保护。该参数是设置在响应头中目的是用来防范XSS攻击的。它有如下几种配置:

值有如下几种:默认为1.

  • 0:禁用XSS保护。

  • 1:启用XSS保护。

1;mode=block; 启用xss保护,并且在检查到XSS攻击是,停止渲染页面。

XSS防御HTML编码

==============================================================================

我们为什么要防御HTML编码呢?比如如下html代码:<div>content</div>,在div标签中存在一个输出变量{content}. 那么浏览器在解析的过程中,首先是html解析,当解析到div标签时,再解析 content的内容,然后会将页面显示出来。那假如该{content} 的值是 <script>alert('XSS攻击')</script>这样的呢?因此该script脚本就会解析并且执行了,从而达到XSS的攻击目标。

因此我们需要将不可信数据放入到html标签内(比如div、span等)的时候需要进行html编码。

编码规则:将 & < > " ’ / 转义为实体字符。如下基本转义代码:

// 使用正则表达式实现html编码

function htmlEncodeByRegExp(str) {

var s = ‘’;

if (str.length === 0) {

return s;

}

return (s + str)

.replace(/&/g, “&”)

.replace(/</g, “<”)

.replace(/>/g, “>”)

.replace(/ /g, " ")

.replace(/'/g, “&#39”)

.replace(/“/g, “””)

.replace(///g, ‘/’);

}

// 使用正则表达式实现html解码

function htmlDecodeByRegExp(str) {

var s = ‘’;

if (str.length === 0) {

return s;

}

return (s + str)

.replace(/&/g, “&”)

.replace(/</g, “<”)

.replace(/>/g, “>”)

.replace(/ /g, " ")

.replace(/&#39/g, “'”)

.replace(/“/g, “””)

.replace(///g, “/”);

}

XSS 防御HTML Attribute编码

=========================================================================================

和HTML编码一样,html中的属性也要进行编码,比如 这样的,name是input的属性,因此在html解析时,会对name属性进行编码,因为假如{name} 的值为:" " οnclick=“alert(‘属性XSS’)” " " 这样的,也就是说input变成这样的了,<input name=" " οnclick=“alert(‘属性XSS’)” " ">,input属性name被插入onclick事件了,因此也需要针对这种常规的html属性,都需要对其进行HTML属性编码。

因此我们需要将不可信数据放入html属性时(不含src、href、style 和 事件处理函数(onclick, onmouseover等))。需要进行HTML Attribute 编码。

编码规则:除了字母、数字、字符以外,使用 &#x;16进制格式来转义ASCII值小于256所有的字符。

因此编码代码如下:

function encodeForHTMLAttibute(str) {

let encoded = ‘’;

for(let i = 0; i < str.length; i++) {

let ch = hex = str[i];

if (!/[A-Za-z0-9]/.test(str[i]) && str.charCodeAt(i) < 256) {

hex = ‘&#x’ + ch.charCodeAt(0).toString(16) + ‘;’;

}

encoded += hex;

}

return encoded;

};

XSS防御之javascript编码

=====================================================================================

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数网络安全工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年网络安全全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上网络安全知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加VX:vip204888 (备注网络安全获取)
img

如何自学黑客&网络安全

黑客零基础入门学习路线&规划

初级黑客
1、网络安全理论知识(2天)
①了解行业相关背景,前景,确定发展方向。
②学习网络安全相关法律法规。
③网络安全运营的概念。
④等保简介、等保规定、流程和规范。(非常重要)

2、渗透测试基础(一周)
①渗透测试的流程、分类、标准
②信息收集技术:主动/被动信息搜集、Nmap工具、Google Hacking
③漏洞扫描、漏洞利用、原理,利用方法、工具(MSF)、绕过IDS和反病毒侦察
④主机攻防演练:MS17-010、MS08-067、MS10-046、MS12-20等

3、操作系统基础(一周)
①Windows系统常见功能和命令
②Kali Linux系统常见功能和命令
③操作系统安全(系统入侵排查/系统加固基础)

4、计算机网络基础(一周)
①计算机网络基础、协议和架构
②网络通信原理、OSI模型、数据转发流程
③常见协议解析(HTTP、TCP/IP、ARP等)
④网络攻击技术与网络安全防御技术
⑤Web漏洞原理与防御:主动/被动攻击、DDOS攻击、CVE漏洞复现

5、数据库基础操作(2天)
①数据库基础
②SQL语言基础
③数据库安全加固

6、Web渗透(1周)
①HTML、CSS和JavaScript简介
②OWASP Top10
③Web漏洞扫描工具
④Web渗透工具:Nmap、BurpSuite、SQLMap、其他(菜刀、漏扫等)
恭喜你,如果学到这里,你基本可以从事一份网络安全相关的工作,比如渗透测试、Web 渗透、安全服务、安全分析等岗位;如果等保模块学的好,还可以从事等保工程师。薪资区间6k-15k

到此为止,大概1个月的时间。你已经成为了一名“脚本小子”。那么你还想往下探索吗?

如果你想要入坑黑客&网络安全,笔者给大家准备了一份:282G全网最全的网络安全资料包评论区留言即可领取!

7、脚本编程(初级/中级/高级)
在网络安全领域。是否具备编程能力是“脚本小子”和真正黑客的本质区别。在实际的渗透测试过程中,面对复杂多变的网络环境,当常用工具不能满足实际需求的时候,往往需要对现有工具进行扩展,或者编写符合我们要求的工具、自动化脚本,这个时候就需要具备一定的编程能力。在分秒必争的CTF竞赛中,想要高效地使用自制的脚本工具来实现各种目的,更是需要拥有编程能力.

如果你零基础入门,笔者建议选择脚本语言Python/PHP/Go/Java中的一种,对常用库进行编程学习;搭建开发环境和选择IDE,PHP环境推荐Wamp和XAMPP, IDE强烈推荐Sublime;·Python编程学习,学习内容包含:语法、正则、文件、 网络、多线程等常用库,推荐《Python核心编程》,不要看完;·用Python编写漏洞的exp,然后写一个简单的网络爬虫;·PHP基本语法学习并书写一个简单的博客系统;熟悉MVC架构,并试着学习一个PHP框架或者Python框架 (可选);·了解Bootstrap的布局或者CSS。

8、超级黑客
这部分内容对零基础的同学来说还比较遥远,就不展开细说了,附上学习路线。
img

网络安全工程师企业级学习路线

img
如图片过大被平台压缩导致看不清的话,评论区点赞和评论区留言获取吧。我都会回复的

视频配套资料&国内外网安书籍、文档&工具

当然除了有配套的视频,同时也为大家整理了各种文档和书籍资料&工具,并且已经帮大家分好类了。

img
一些笔者自己买的、其他平台白嫖不到的视频教程。
img

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
img

img
如图片过大被平台压缩导致看不清的话,评论区点赞和评论区留言获取吧。我都会回复的

视频配套资料&国内外网安书籍、文档&工具

当然除了有配套的视频,同时也为大家整理了各种文档和书籍资料&工具,并且已经帮大家分好类了。

img
一些笔者自己买的、其他平台白嫖不到的视频教程。
img

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
[外链图片转存中…(img-D4meo48B-1712867303439)]

  • 17
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值