如何防止XSS攻击

介绍

这期内容当中小编将会给大家带来有关如何防止XSS攻击,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

前端安全,,

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

近几年,美团业务高速发展,前端随之面临很多安全挑战,因此积累了大量的实践经验。我们梳理了常见的前端安全问题以及对应的解决方案,将会做成一个系列,希望可以帮助前端人员在日常开发中不断预防和修复安全漏洞。

我们会讲解XSS,主要包括:

1。XSS攻击的介绍

2。XSS攻击的分类

3。XSS攻击的预防和检测

4。XSS攻击的总结

5。XSS攻击案例

XSS攻击的介绍

在开始本文之前,我们先提出一个问题,请判断以下两个说法是否正确:

1。XSS防范是后端RD(研发人员)的责任,后端RD应该在所有用户提交数据的接口,对敏感字符进行转义,才能进行下一步操作。

2。所有要插入到页面上的数据,都要通过一个敏感字符过滤函数的转义,过滤掉通用的敏感字符后,就可以插入到页面中。

如果你还不能确定答案,那么可以带着这些问题向下看,我们将逐步拆解问题。

XSS漏洞的发生和修复

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

一个案例

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

 <代码> & lt;输入,类型=皌ext",https://www.yisu.com/zixun/value=" "> 
& lt;按钮比;搜索& lt;/按钮比;
& lt;div祝辞
,,您搜索的关键词是:& lt;%=,getParameter (“关键字“),%比;
& lt;/div比;

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

<代码> http://xxx/search?keyword="祝辞& lt; script>警报(& # 39;xss # 39;); & lt;/script>

小明带着一种不祥的预感点开了这个链接(请勿模仿,确认安全的链接才能点开]。果然,页面中弹出了写着“XSS"的对话框。

可恶,中招了!小明眉头一皱,发现了其中的奥秘:

当浏览器请求<代码> http://xxx/search?keyword="祝辞& lt; script>警报(& # 39;xss # 39;); & lt;/script> 关键字> “祝辞& lt; script>警报(& # 39;xss # 39;); & lt;/script> <> <代码> & lt;输入,类型=皌ext",脚本https://www.yisu.com/zixun/value=" "> <>警报(XSS); ">
& lt;按钮比;搜索& lt;/按钮比;
& lt;div祝辞
,,您搜索的关键词是:“在& lt;脚本在,警报(& # 39;xss # 39;);,& lt;/脚本比;
& lt;/div比;

浏览器无法分辨出<代码> & lt; script>警报(& # 39;xss # 39;); & lt;/script> 是恶意代码,因而将其执行。

这里不仅仅div的内容被注入了,而且输入的值属性也被注入,警报会弹出两次。

面对这种情况,我们应该如何进行防范呢?

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

聪明的小明很快找到解决方法,把这个漏洞修复:

 <代码> & lt;输入,类型=皌ext",https://www.yisu.com/zixun/value=" "> 
& lt;按钮比;搜索& lt;/按钮比;
& lt;div祝辞
,,您搜索的关键词是:& lt;%=,escapeHTML (getParameter (“关键字“),%比;
& lt;/div比;

<代码> escapeHTML() 按照如下规则进行转义:

|字符|转义后的字符|,,
| - | |,,
| <代码>和 | <代码>,ampamp; |,,
| <代码> & lt; | <代码>,amplt; |,,
| <代码>在 | <代码>,ampgt; |,,
| <代码>, | <代码>,ampquot; |,,
| <代码> & # 39; | <代码>,amp # x27; |,,
| <代码>/ | <代码>,amp # x2F; |

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

 

如何防止XSS攻击