XSS && CORS

2023-2-18 15:03| 发布者: 挖安琥| 查看: 65| 评论: 0

摘要: 一、XSS攻击(Cross-site scripting,其实又叫CSS)1.是什么xss攻击指的是用户利用输入框,插入一段不属于你HTML/JS代码,如图1-1,1-2。你只需要知道图1-2中输入框中敲进去的文字都会被编辑成innerHTML这么个意思就行 ...

一、XSS攻击(Cross-site scripting,其实又叫CSS)

1.是什么

xss攻击指的是用户利用输入框,插入一段不属于你HTML/JS代码,如图1-1,1-2。

你只需要知道图1-2中输入框中敲进去的文字都会被编辑成innerHTML这么个意思就行了。




图1-1



图1-2

图1-2中你输入框里输入的内容都会被编辑成HTML放在你的代码中,如果用户只是输入一些字符串倒没什么问题,但如果如图1-2所示输入框里写一段脚本,那么这段本不属于你代码的脚本就会被注入你的代码中。但这段代码没用,因为图1-2插入的是脚本,当以这种方式将脚本标签注入到页面中时,脚本标签不会运行。

如果想插入能运行的标签,,我们用img标签,当img标签的src没有地址时,它会抛出一个错误,如图1-3所示。




图1-3

证明你确实是注入成功了。但这往往不是黑客要做的事,比如说,他会盗取你网站的cookie。

2.xss盗取cookie

如果用户想盗取你网站的cookie,他会输入图1-4所示在输入框里




图1-4

如果你点击Search按钮,那么会提示如图1-5所示的信息。




图1-5

如上图所示,你存储在cookie中的用户名,密码都被显示了出来。

坏处:黑客可以利用这一点来登录某个网站(比如说微博)用你的账号密码。我记得2011年左右好像微博发生了大量的XSS注入事件。

3.解决办法

代码中不要使用inner HTML,用innerText/textContent,使用户的输入变成字符串,而不是动态的HTML插入本地代码。比如说我把图1-1的代码改下(仅仅是把innerHTML ----> innerText),如图1-6所示。




图1-6

那么,你就可以防范xss攻击,如图1-7所示(你可以和图1-4做个对比)




1-7

这时你就不会被盗取cookie,因为你输入框里输入的所有内容都会被编辑成String(字符串),而不是动态的HTML,自然也就没有黑客可乘之机了。

二、CORS(Cross-Origin Resource Sharing跨域资源共享)

1.是什么

从命名中就可以看得出,CORS是一种策略,一种跨origin共享资源的策略。




图2-1

如上图所示,意思是”从origin为http://127.0.0.1:5500获取http://localhost:3000/data被CORS政策阻止了,在请求资源里没有Access-Control-Allow-Origin头“。为什么会被阻止呢?

Access-Control-Allow-Origin:意思是服务器告诉浏览器,嘿,你允许请求(req)来自哪个url,并且可以访问我们。

2.为什么会有CORS ( 什么时候出现CORS警告 )?

默认情况下,使用 CORS 会阻止两个不同来源之间的所有请求。这是为了防止人们访问他们无法控制的服务器上的数据/API。这很有用,因为你不希望随机网站能够使用存储在浏览器中的 cookie 向您的社交媒体或银行发出请求,因为这些 cookie 可能包含您的银行或社交媒体凭据,这意味着该网站可以根据代表您的社交媒体或银行。这其实是一种保护机制

3.什么是同源,不同源?

网站的origin只是 方案(http或https)、主机名(域名如localhost)和端口(3000、80等)。

如图2-1所示,"http://127.0.0.1:5500"和"http://localhost:3000/data"就是不同源,因为它俩主机名不一样。

但如果是"http://localhost:3000"和"http://localhost:3000/data"。它俩方案,主机名,端口都相同,所以是同源,自然是它俩之间的通信就不存在跨域了,自然也不会有CORS。

4. 解决办法:(适用于get/post请求)

a. 允许单个域名

如上图所示,代表我们没有指定http://127.0.0.1:5500这个源可以允许访问,解决办法就是在express框架中引入cors库(如果你用的是Python/Go,那么会有对应的跨域处理库),并在cors中设置允许访问的origin,如下图所示。




2-2

这样就告诉浏览器来自本地5500的源,允许它向服务器发起请求。我们打开浏览器开发者工具(F12-NetWork)中,可以查看请求头,如下图所示。




2-3

b. 允许任何域名

如果我们像允许任何域名向服务器请求数据,也非常简单,把origin设置成*就好了,如下图所示。




2-4

代表任何域名都可以向服务器发起请求。

5.发送cookie

CORS 最后要处理的难点是 cookie。默认情况下,除非你明确告知,否则 CORS 不会将您的 cookie 与请求一起发送。

在前端只用在请求中写”包括凭据“, 如图2-5所示。




2-5

在后端中告诉服务区打开"接收凭据"功能。如图2-6所示。




2-6

三、总结

防范XSS攻击的最好方式就是写innerText,因为用户输入的所有内容都会被编辑成字符串,而不是动态的HTML。

CORS(跨域资源共享),当你跨域时,它会默认阻止跨域的url向服务器发起请求。但更多的是我们利用CORS来实现即使跨域了也能共享资源的功能。


路过

雷人

握手

鲜花

鸡蛋
版权声明:免责声明:文章信息来源于网络以及网友投稿,本网站只负责对文章进行整理、排版、编辑,是出于传递 更多信息之目的, 并不意味着赞同其观点或证实其内容的真实性,如本站文章和转稿涉及版权等问题,请作者在及时联系本站,我们会尽快处理。
已有 0 人参与

会员评论

相关分类

 万奢网手机版

官网微博:万奢网服务平台

今日头条二维码 1 微信公众号二维码 1 抖音小程序二维码 1
上海万湖珠宝贸易有限公司 地址:上海市宝山区共和新路4727号新陆国际大厦1003-1007室 网站经营许可证 备案号:沪ICP备11005343号-12012-2019
万奢网主要专注于手表回收,二手名表回收/销售业务,可免费鉴定(手表真假),评估手表回收价格,正规手表回收公司,宝山实体店,支持全国范围上门回收手表
返回顶部