跨站脚本攻击有哪些类型
发布网友
发布时间:2022-04-29 22:44
我来回答
共4个回答
热心网友
时间:2022-04-15 11:41
1、持久型跨站:最直接的危害类型,跨站代码存储在服务器(数据库)。
2、非持久型跨站:反射型跨站脚本漏洞,最普遍的类型。用户访问服务器-跨站链接-返回跨站代码。
3、DOM跨站(DOM XSS):DOM(document object model文档对象模型),客户端脚本处理逻辑导致的安全问题。
扩展资料:
跨站脚本攻击产生的原因是网站过于相信用户的输入,那么解决的办法也很直接,就是从根本上不相信用户的任何输入。一个安全的网站应当对任何用户的任何输入都要进行检查,特别是对用户提交到服务器中保存的数据,更要做筛选。
这种攻击与反射型攻击不同的是,它会把自己的攻击代码保存在网站的服务器上,这样,任何访问了这个页面的用户,都会受到这个攻击。
参考资料来源:
百度百科-跨站脚本攻击
热心网友
时间:2022-04-15 12:59
第一种:反射型XSS攻击
反射型XSS攻击一般是攻击者通过特定手法,诱使用户去访问一个包含恶意代码的URL,当受害者点击这些专门设计的链接的时候,恶意代码会直接在受害者主机上的浏览器执行。此类XSS攻击通常出现在网站的搜索栏、用户登录口等地方,常用来窃取客户端Cookies或进行钓鱼欺骗。
第二种:DOM-based型XSS攻击
客户端的脚本程序可以动态地检查和修改页面内容,而不依赖于服务器端的数据。例如客户端如从URL中提取数据并在本地执行,如果用户在客户端输入的数据包含了恶意的JavaScript脚本,而这些脚本没有经过适当的过滤或者消毒,那么应用程序就可能受到DOM-based型XSS攻击。需要特别注意以下的用户输入源document.URL、location.hash、location.search、document.referrer 等。
第三种:存储型XSS攻击
攻击者事先将恶意代码上传或者储存到漏洞服务器中,只要受害者浏览包含此恶意代码的页面就会执行恶意代码。这意味着只要访问了这个页面的访客,都有可能会执行这段恶意脚本,因此存储型XSS攻击的危害会更大。此类攻击一般出现在网站留言、评论、博客日志等交互处,恶意脚本存储到客户端或者服务端的数据库中。
热心网友
时间:2022-04-15 14:34
(1)持久型跨站:最直接的危害类型,跨站代码存储在服务器(数据库)。
(2)非持久型跨站:反射型跨站脚本漏洞,最普遍的类型。用户访问服务器-跨站链接-返回跨站代码。
(3)DOM跨站(DOM XSS):DOM(document object model文档对象模型),客户端脚本处理逻辑导致的安全问题。
热心网友
时间:2022-04-15 16:25
不可信数据
不可信数据通常是来自http请求的数据,以url参数、表单字段、标头或者cookie的形式。不过从安全角度来看,来自数据库、网络服务器和其他来源的数据往往也是不可信的,也就是说,这些数据可能没有完全通过验证。
应该始终对不可信数据保持警惕,将其视为包含攻击,这意味着在发送不可信数据之前,应该采取措施确定没有攻击再发送。由于应用程序之间的关联不断深化,下游直译程序执行的攻击可以迅速蔓延。
传统上来看,输入验证是处理不可信数据的最好办法,然而,输入验证法并不是注入式攻击的最佳解决方案。首先,输入验证通常是在获取数据时开始执行的,而此时并不知道目的地所在。这也意味着我们并不知道在目标直译程序中哪些字符是重要的。其次,可能更加重要的是,应用程序必须允许潜在危害的字符进入,例如,是不是仅仅因为sql认为mr.
o'malley名字包含特殊字符他就不能在数据库中注册呢?
虽然输入验证很重要,但这始终不是解决注入攻击的完整解决方案,最好将输入攻击作为纵深防御措施,而将escaping作为首要防线。
解码(又称为output
encoding)
“escaping”解码技术主要用于确保字符作为数据处理,而不是作为与直译程序的解析器相关的字符。有很多不同类型的解码,有时候也被成为输出“解码”。有些技术定义特殊的“escape”字符,而其他技术则包含涉及若干字符的更复杂的语法。
不要将输出解码与unicode字符编码的概念弄混淆了,后者涉及映射unicode字符到位序列。这种级别的编码通常是自动解码,并不能缓解攻击。但是,如果没有正确理解服务器和浏览器间的目标字符集,有可能导致与非目标字符产生通信,从而招致跨站xss脚本攻击。这也正是为所有通信指定unicode字符编码(字符集)(如utf-8等)的重要所在。
escaping是重要的工具,能够确保不可信数据不能被用来传递注入攻击。这样做并不会对解码数据造成影响,仍将正确呈现在浏览器中,解码只能阻止运行中发生的攻击。
注入攻击理论
注入攻击是这样一种攻击方式,它主要涉及破坏数据结构并通过使用特殊字符(直译程序正在使用的重要数据)转换为代码结构。xss是一种注入攻击形式,浏览器作为直译程序,攻击被隐藏在html文件中。html一直都是代码和数据最差的mashup,因为html有很多可能的地方放置代码以及很多不同的有效编码。html是很复杂的,因为它不仅是层次结构的,而且还包含很多不同的解析器(xml、html、javascript、vbscript、css、url等)。
要想真正明白注入攻击与xss的关系,必须认真考虑html
dom的层次结构中的注入攻击。在html文件的某个位置(即开发者允许不可信数据列入dom的位置)插入数据,主要有两种注入代码的方式:
injecting
up,上行注入
最常见的方式是关闭现有的context并开始一个新的代码context,例如,当你关闭html属性时使用">并开始新的
可以终止脚本块,即使该脚本块被注入脚本内方法调用内的引用字符,这是因为html解析器在javascript解析器之前运行。
injecting
down,下行注入
另一种不太常见的执行xss注入的方式就是,在不关闭当前context的情况下,引入一个subcontext。例如,将改为
,并不需要躲开html属性context,相反只需要引入允许在src属性内写脚本的context即可。另一个例子就是css属性中的expression()功能,虽然你可能无法躲开引用css属性来进行上行注入,你可以采用x
ss:expression(document.write(document.cookie))且无需离开现有context。
同样也有可能直接在现有context内进行注入,例如,可以采用不可信的输入并把它直接放入javascript
context。这种方式比你想象的更加常用,但是根本不可能利用escaping(或者任何其他方式)保障安全。从本质上讲,如果这样做,你的应用程序只会成为攻击者将恶意代码植入浏览器的渠道。
本文介绍的规则旨在防止上行和下行xss注入攻击。防止上行注入攻击,你必须避免那些允许你关闭现有context开始新context的字符;而防止攻击跳跃dom层次级别,你必须避免所有可能关闭context的字符;下行注入攻击,你必须避免任何可以用来在现有context内引入新的sub-context的字符。
积极xss防御模式
本文把html页面当作一个模板,模板上有很多插槽,开发者允许在这些插槽处放置不可信数据。在其他地方放置不可信数据是不允许的,这是“白名单”模式,否认所有不允许的事情。
根据浏览器解析html的方式的不同,每种不同类型的插槽都有不同的安全规则。当你在这些插槽处放置不可信数据时,必须采取某些措施以确保数据不会“逃离”相应插槽并闯入允许代码执行的context。从某种意义上说,这种方法将html文档当作参数化的数据库查询,数据被保存在具体文职并与escaping代码context相分离。
本文列出了最常见的插槽位置和安全放置数据的规则,基于各种不同的要求、已知的xss载体和对流行浏览器的大量手动测试,我们保证本文提出的规则都是安全的。
定义好插槽位置,开发者们在放置任何数据前,都应该仔细分析以确保安全性。浏览器解析是非常棘手的,因为很多看起来无关紧要的字符可能起着重要作用。
为什么不能对所有不可信数据进行html实体编码?
可以对放入html文档正文的不可行数据进行html实体编码,如
标签内。也可以对进入属性的不可行数据进行实体编码,尤其是当属性中使用引用符号时。但是html实体编码并不总是有效,例如将不可信数据放入
directlyinascript
insideanhtmlcomment
inanattributename
<...neverputuntrusteddatahere...href="/test"/>
inatagname
更重要的是,不要接受来自不可信任来源的javascript代码然后运行,例如,名为“callback”的参数就包含javascript代码段,没有解码能够解决。
no.2
–
在向html元素内容插入不可信数据前对html解码
这条规则适用于当你想把不可信数据直接插入html正文某处时,这包括内部正常标签(div、p、b、td等)。大多数网站框架都有html解码的方法且能够躲开下列字符。但是,这对于其他html
context是远远不够的,你需要部署其他规则。
...escapeuntrusteddatabeforeputtinghere...
...escapeuntrusteddatabeforeputtinghere...
以及其他的html常用元素
使用html实体解码躲开下列字符以避免切换到任何执行内容,如脚本、样式或者事件处理程序。在这种规格中推荐使用十六进制实体,除了xml中5个重要字符(&、<、
>、
"、
')外,还加入了斜线符,以帮助结束html实体。
&-->&
<--><
>-->>
"-->"
'-->''isnotrecommended
/-->/forwardslashisincludedasithelpsendanhtmlentity
esapi参考实施
stringsafe=esapi.encoder().encodeforhtml(request.getparameter("input"));
no.3
–
在向html常见属性插入不可信数据前进行属性解码
这条规则是将不可信数据转化为典型属性值(如宽度、名称、值等),这不能用于复杂属性(如href、src、style或者其他事件处理程序)。这是及其重要的规则,事件处理器属性(为html
javascript
data
values)必须遵守该规则。
contentinsideunquotedattribute
content
insidesinglequotedattribute
除了字母数字字符外,使用小于256的ascii值hh格式(或者命名的实体)对所有数据进行解码以防止切换属性。这条规则应用广泛的原因是因为开发者常常让属性保持未引用,正确引用的属性只能使用相应的引用进行解码。未引用属性可以被很多字符破坏,包括[space]
%
*
+
,
-
/
;
<
=
>
^
和
|。
esapi参考实施
string
safe
=
esapi.encoder().encodeforhtmlattribute(
request.getparameter(
"input"
)
);
no.4
–
在向html
javascript
data
values插入不可信数据前,进行javascript解码
这条规则涉及在不同html元素上制定的javascript事件处理器。向这些事件处理器放置不可信数据的唯一安全位置就是“data
value”。在这些小代码块放置不可信数据是相当危险的,因为很容易切换到执行环境,因此请小心使用。
insideaquotedstring
onesideofanexpression
insideunquotedeventhandler
insidequotedeventhandler
insidequotedeventhandler
除了字母数字字符外,使用小于256的ascii值xhh格式
对所有数据进行解码以防止将数据值切换至脚本内容或者另一属性。不要使用任何解码捷径(如"
)因为引用字符可能被先运行的html属性解析器相匹配。如果事件处理器被引用,则需要相应的引用来解码。这条规则的广泛应用是因为开发者经常让事件处理器保持未引用。正确引用属性只能使用相应的引用来解码,未引用属性可以使用任何字符(包括[space]
%
*
+
,
-
/
;
<
=
>
^
和|)解码。同时,由于html解析器比javascript解析器先运行,关闭标签能够关闭脚本块,即使脚本块位于引用字符串中。
esapi参考实施
stringsafe=esapi.encoder().encodeforjavascript(request.getparameter("input"));
no.5
–
在向html
样式属性值插入不可信数居前,进行css解码
当你想将不可信数据放入样式表或者样式标签时,可以用此规则。css是很强大的,可以用于许多攻击。因此,只能在属性值中使用不可信数据而不能在其他样式数据中使用。不能将不可信数据放入复杂的属性(如url,、behavior、和custom
(-moz-binding))。同样,不能将不可信数据放入允许javascript的ie的expression属性值。
propertyvalue
textpropertyvalue
除了字母数字字符外,使用小于256的ascii值hh格式对所有数据进行解码。不要使用任何解码捷径(如"
)因为引用字符可能被先运行的html属性解析器相匹配,防止将数据值切换至脚本内容或者另一属性。同时防止切换至expression或者其他允许脚本的属性值。如果属性被引用,将需要相应的引用进行解码,所有的属性都应该被引用。未引用属性可以使用任何字符(包括[space]
%
*
+
,
-
/
;
<
=
>
^
和|)解码。同时,由于html解析器比javascript解析器先运行,标签能够关闭脚本块,即使脚本块位于引用字符串中。
esapi参考实施
stringsafe=esapi.encoder().encodeforcss(request.getparameter("input"));
no.6-
在向html
url属性插入不可信数据前,进行url解码
当你想将不可信数据放入链接到其他位置的link中时需要运用此规则。这包括href和src属性。还有很多其他位置属性,不过我们建议不要在这些属性中使用不可信数据。需要注意的是在javascript中使用不可信数据的问题,不过可以使用上述的html
javascript
data
value规则。
linkanormallink
animagesource
ascriptsource
除了字母数字字符外,使用小于256的ascii值%hh
解码格式对所有数据进行解码。在数据中保护不可信数据:url不能够被允许,因为没有好方法来通过解码来切换url以避免攻击。所有的属性都应该被引用。未引用属性可以使用任何字符(包括[space]
%
*
+
,
-
/
;
<
=
>
^
和|)解码。
请注意实体编码在这方面是没用的。
什么是跨站脚本攻击
跨站脚本攻击有多种类型,包括反射型、存储型和基于DOM的跨站脚本攻击。反射型跨站脚本攻击是指攻击者将恶意脚本作为参数包含在URL中,当用户点击该URL时,恶意脚本就会被执行。存储型跨站脚本攻击是指攻击者将恶意脚本提交到网站的数据库中,当其他用户访问包含这些数据的网页时,恶意脚本就会被执行。基于DOM...
vlookup 的用法
Excel一键自动匹配,在线免费vlookup工具,3步完成!Excel在线免费vlookup工具,点击4步自动完成vlookup匹配,无需手写公式,免费使用!
跨站脚本攻击类型
跨站脚本攻击,简称XSS,是一种常见的网络安全威胁,主要分为三种类型:首先,我们来谈谈持久型跨站脚本。这种攻击最为直接且危害严重,攻击者会将恶意的脚本代码存储在服务器的数据库中。一旦用户访问包含这些代码的页面,这些脚本就会被服务器发送给用户,即使用户离开该页面,代码仍可能在用户的浏览器中执行...
什么是xss攻击?
1、持久型跨站:最直接的危害类型,跨站代码存储在服务器(数据库)。2、非持久型跨站:反射型跨站脚本漏洞,最普遍的类型。用户访问服务器-跨站链接-返回跨站代码。3、DOM跨站(DOM XSS):DOM(document object model文档对象模型),客户端脚本处理逻辑导致的安全问题。三、跨站脚本攻击的手段和目的 常...
xss跨站脚本漏洞危害有哪些
XSS跨站脚本漏洞危害主要有:盗取用户信息、会话劫持、恶意重定向、网站篡改、蠕虫传播等。1、盗取用户信息:攻击者可以通过在网页中注入恶意脚本代码,从用户的浏览器中窃取用户的敏感信息,例如账号密码、Cookie等。2、会话劫持:攻击者可以通过窃取用户的Cookie,从而绕过身份认证,获取用户的权限并执行恶意操...
跨站脚本攻击有哪些类型
1、持久型跨站:最直接的危害类型,跨站代码存储在服务器(数据库)。2、非持久型跨站:反射型跨站脚本漏洞,最普遍的类型。用户访问服务器-跨站链接-返回跨站代码。3、DOM跨站(DOM XSS):DOM(document object model文档对象模型),客户端脚本处理逻辑导致的安全问题。
什么是XSS攻击
XSS攻击又称为跨站脚本,XSS的重点不在于跨站点,而是在于脚本的执行。XSS是一种经常出现在Web应用程序中的计算机安全漏洞,是由于Web应用程序对用户的输入过滤不足而产生的,它允许恶意web用户将代码植入到提供给其它用户使用的页面中。常见的XSS攻击有三种:反射型XSS攻击、DOM-based型XSS攻击、存储型XSS...
intetnet,攻击的类型是什么?
1. Cross Site Script(XSS, 跨站脚本攻击)XSS 主要有三种类型:存储型 XSS: 注入的脚本永久的存在于目标服务器上,每当受害者向服务器请求此数据时就会重新唤醒攻击脚本;反射型 XSS: 当用受害者被引诱点击一个恶意链接,提交一个伪造的表单,恶意代码便会和正常返回数据一起作为响应发送到受害者的...
Web 安全 - 跨站脚本攻击 XSS 三种类型及防御措施
恶意脚本的注入方式,归纳起来有三种类型:存储型 XSS 攻击、反射型 XSS 攻击、基于 DOM XSS 攻击。存储型 XSS 攻击是将恶意代码存储到网站服务器,如果出现漏洞传播速度、影响范围较为广泛,常见于社区、论坛等带有内容保存的系统中。首先黑客利用网站漏洞将恶意代码发送至服务器,而服务器未经校验就保存...
跨站脚本攻击是什么意思?
跨站脚本攻击(也称为XSS)指利用网站漏洞从用户那里恶意盗取信息。用户在浏览网站、使用即时通讯软件、甚至在阅读电子邮件时,通常会点击其中的链接。攻击者通过在链接中插入恶意代码,就能够盗取用户信息。攻击者通常会用十六进制(或其他编码方式)将链接编码,以免用户怀疑它的合法性。网站在接收到包含恶意...
xss脚本跨站脚本漏洞包括哪些
XSS脚本跨站脚本漏洞包括:反射型XSS、存储型XSS、DOM型XSS。反射型(非持久性):当用户访问一个带有XSS代码的URL请求时,服务器端接收数据后处理,然后把带有XSS代码的数据发送到浏览器,浏览器解析这段带有XSS代码的数据后,最终造成XSS漏洞。存储型(持久性):攻击流程是正常服务器信息,服务器存储...