关于我们

达成全网价值营销服务商的目标

网站建设如何抵御XSS攻击?

发布时间: 2022.01.06
阅读量: 700
分享:

网站建设中,安全抵御抵御XSS攻击是十分重要的,关系到网站安全。那么什么是XSS攻击呢?


XSS攻击全称跨站脚本攻击(Cross Site Scripting),是一种常见于 Web 应用中的计算机安全漏洞。恶意攻击者往 Web 页面里嵌入恶意的客户端脚本,当用户浏览此网页时,脚本就会在用户的浏览器上执行,进而达到攻击者的目的。比如获取用户的 Cookie、导航到恶意网站、携带木马等。


XSS 漏洞是由于对用户提交的数据没有经过严格的过滤处理造成的,所以防御的原则就是不相信用户输入的数据,对输入进行过滤,对输出进行编码。


1、使用 XSS Filter

针对用户提交的数据进行有效的验证,只接受我们规定的长度或内容的提交,过滤掉其他的输入内容。比如:

    表单数据指定值的类型:年龄只能是 int 、name 只能是字母数字等。

    过滤或移除特殊的 html 标签:<script>、<iframe>等。

    过滤 js 事件的标签:onclick、onerror、onfocus等。

2、html 实体

当需要往 HTML 标签之间插入不可信数据的时候,首先要做的就是对不可信数据进行 HTML Entity 编码,在 html 中有些字符对于 HTML 来说是具有特殊意义的,所以这些特殊字符不允许在文本中直接使用,需要使用实体字符。 html 实体的存在是导致 XSS 漏洞的主要愿意之一,因此我们需要将实体转化为相应的实体编号。


20220106155423.png


3、JavaScript编码

这条原则主要针对动态生成的JavaScript代码,这包括脚本部分以及HTML标签的事件处理属性(如onerror, onload等)。在往JavaScript代码里插入数据的时候,只有一种情况是安全的,那就是对不可信数据进行JavaScript编码,并且只把这些数据放到使用引号包围起来的值部分(data value)之中,除了上面的那些转义之外,还要附加上下面的转义:

\ 转成 \\

/ 转成 \/

; 转成 (全角;)



注意:在对不可信数据做编码的时候,不能图方便使用反斜杠\ 对特殊字符进行简单转义,比如将双引号 ”转义成 \”,这样做是不可靠的,因为浏览器在对页面做解析的时候,会先进行HTML解析,然后才是JavaScript解析,所以双引号很可能会被当做HTML字符进行HTML解析,这时双引号就可以突破代码的值部分,使得攻击者可以继续进行XSS攻击;另外,输出的变量的时候,变量值必须在引号内部,避免安全问题;更加严格的方式,对除了数字和字母以外的所有字符,使用十六进制\xhh 的方式进行编码。

4、Http Only cookie

许多 XSS 攻击的目的就是为了获取用户的 cookie,将重要的 cookie 标记为 http only,这样的话当浏览器向服务端发起请求时就会带上 cookie 字段,但是在脚本中却不能访问 cookie,这样就避免了 XSS 攻击利用 js 的 document.cookie获取 cookie。


很多地方都可能产生 XSS 漏洞,并且产生的方式不一样,所以对于这些漏洞,我们需要找到正确的方法来防御。XSS 漏洞在不断的发展,上面介绍的防御方法几乎能够解决大部分的 XSS 漏洞,即便这样,我们也不能掉以轻心,为了让 Web 应用更安全,我们还需要结合其他的方法来加强 XSS 防御。

随着科技的不断发展,Web 应用变得越来越复杂,随之而产生的漏洞(不仅限于 XSS ) 也越来越多。没有什么方法能够一次性解决所有安全问题,我们只能在实际的工作过程中,针对不同的安全漏洞进行针对性的防御。



分享到微信朋友圈 ×
与项目经理交流
扫描二维码
与项目经理交流
ciya68