没有合适的资源?快使用搜索试试~ 我知道了~
深度学习静态识别Web漏洞:应用与安全
深度学习应用于Web安全:使用深度学习静态识别Web漏洞引用此版本:埃洛伊丝·莫瑞尔深度学习应用于Web安全:使用深度学习静态识别Web漏洞。人工智能[cs.AI]。蔚蓝海岸大学,2022年。英语NNT:2022COAZ4059。电话:04025922v3HAL Id:tel-04025922https://theses.hal.science/tel-04025922v32023年3月13日提交HAL是一个多学科的开放获取档案馆,用于存放和传播科学研究文件,无论它们是否已这些文件可能来自法国或国外的教学和研究机构,或来自公共或私人研究中心。L’archive ouverte pluridisciplinaire网络安全的专业应用培训利用深度学习算法的易受攻击Web的标识符统计埃洛伊丝·莫瑞尔INRIA信息学博士学位申请蔚蓝作者:Tamara Rezk搜索:14 novembre 2022陪审团成员:Gustavo Betarte,共和国Matteo Maffei,维也纳信息学Santiago Vidal,ISISTAN研究所Tamara Rezk,蔚蓝海岸大学研究主任博士论文集蔚蓝海岸大学STIC博士学校信息和通信科学与技术THAPOSE为了获得科学博士蔚蓝提及:InformatiquePrésentée et soutenue par埃洛伊丝·莫瑞尔深度学习在Web安全中的应用使用深度学习2022年11月14日更新陪审团:导演:Tamara REZK研究总监,INRIA报告员:Matteo MAFFEI维也纳信息技术大学Gustavo BETARTE共和国大学正教授审查员:Santiago VIDAL伊斯兰国家研究所iv简历网络安全的专业应用培训跨站脚本(XSS)在2O21(CWE)常见弱点枚举的前25名中排名第二,并且将此漏洞作为编程错误的最大危险。XSS se produit lorsquu 'une appli- cation Webneutralise de manière inappropriée une entrée controlable par l'utilisa-teur avantqu'elle ne soit placée dans la sortie.由于这种类型的脆弱性,一个at- taquantpeut effectuer des activités malveillancetelles que proposérer des informationsprivées depuis le navigateur de la victime,envoyer des requêtes malveillancetellesto an site Web au nom de la victime,émuler des sites Web de confiance et inciterles victimes à saisir des informations privées , compromettre le compte du siteWeb de la victime.等。在第一部分中,我们研究了XSS的缺陷检测算法。特别是,我们比较了两种基于自然语言(NLP)和编程语言(PLP)的代码在两种服务器语言PHP和Node.js中的表现。我们重新编译了PHP NIST的生成器,通过OWAPS规则修改了Incohéréliées,以提供XSS漏洞,并提供了基础数据。Nousquestionses un nouveau générateur de code côté serveur pour Node.js. Nouscomparons également les résultats PHP obte- nus sur deux types de distributionsde bases de données.La représentation NLP a un meiletrappel lorsque HTML ,JavaScript et CSS sont includes en tant que code.Nous comparons les résultatsobtenus par nos modèles 我 们 分 析 者 的 结 果 优 于 所 有 存 在 的 结 果 。 Nouscomparons également la detection de vulnéra- bilité XSS dans Node.js et unlangage basé sur JavaScript à plusieurs niveaux appelé Hop.js en utilisant unetechnique从这个意义上说,我们为Hop.js建立了一个新的通用程序,并为这种语言建立了一个基础。通过深入研究XSS对Hop.js的检测形式,我们发现Node.js的模型会降低精度然而,我们的经验并没有对XSS PLP基于多层模式的设计产生重大影响Mots-clés-Sécurité du Web ,Apprentissage en profondeur, Faille de sécurité Web ,Injec- tion de codevvi摘要深度学习在Web安全跨站脚本(XSS)在常见弱点枚举(2O21)的前25名中排名第二,并将此漏洞列为编程错误中当Web应用程序在将用户可控制的输入放置到提供给其他用户的网页上使用的输出中之前不正确地对用户可控制的输入进行神经化时,就会发生XSS利用这种类型的漏洞,攻击者可以执行恶意活动,例如从受害者的浏览器传输私人信息,代表受害者向网站发送恶意请求,模仿受信任的在本文的第一部分中,我们研究了使用深度学习算法检测XSS漏洞。特别是,我们比较了基于自然语言处理(NLP)和编程语言处理(PLP)的两种服务器端语言PHP和Node.js的代码表示。我们重建了PHP NIST生成器,修复了与OWAPS规则相关的不一致性以防止XSS漏洞,并扩展了数据库。我们为Node.js构建了一个新的服务器端代码生成器我们还比较了两种类型的数据库分布上获得的PHP结果。当HTML、JavaScript和CSS作为代码包含时,NLP表示具有更好的召回。我们将能够检测XSS漏洞的深度学习模型与三种知名的PHP代码静态XSS漏洞扫描仪ProgPilot、Pixy和RIPS以及知名的Nodejs扫描仪AppScan进行了比较。我们的分析仪的结果在所有情况下都克服了现有工具的结果。我们还使用PLP深度学习技术比较了Node.js和一种名为Hop.js的多层基于JavaScript的语言从这个意义上说,我们为Hop.js构建了一个新的生成器,并为这种语言创建了一个数据库。通过训练深度学习模型来检测Hop.js上的XSS,我们获得了比Node.js模型更好的召回率,尽管精度较低然而,与单层范例相比,我们的实验没有显示出对基于多层的关键词-Web安全,漏洞检测,深度学习,PLP,编程语言处理,NLP,自然语言处理,XSS,跨站脚本。VII内容1介绍12背景72.1跨站点脚本82.1.1基础知识82.1.2OWASP预防规则182.2深度学习预训练技术242.2.1二进制分类任务262.2.2学习分布式表示343使用深度学习静态识别Web漏洞393.1导言。. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .4O3.2 XSS的数据集。. . . . . . . . . . . . . . . . . . . . . . . . . . . .433.2.1 NIST的PHP数据集。. . . . . . . . . . . . . . . . . . . . .433.2.2 NIST数据库中发现的问题。. . . . . . . . . . . . . .453.2.3发电机的固定和延伸。. . . . . . . . . . . . .463.2.4 PHP的最终数据集。. . . . . . . . . . . . . . . . . . . .6O3.2.5扩展到Node.js。. . . . . . . . . . . . . . . . . . . . .613.3 XSS标识。. . . . . . . . . . . . . . . . . . . . . . . . . . .613.3.1基于词的连接技术(NLP)。. . . . . . . .623.3.2 Hashed-AST技术(PLP)。. . . . . . . . . . . . . . . . .633.4初步评价。. . . . . . . . . . . . . . . . . . . . . . . . . . .653.4.1评价过程。. . . . . . . . . . . . . . . . . . . . . .653.4.2评价结果。. . . . . . . . . . . . . . . . . . . . . .673.5不匹配评估。. . . . . . . . . . . . . . . . . . . . . . . .693.5.1不匹配策略。. . . . . . . . . . . . . . . . . . . .693.5.2评价过程。. . . . . . . . . . . . . . . . . . . . . .7O3.5.3评价结果。. . . . . . . . . . . . . . . . . . . . . .7O3.6与现有工具的比较。. . . . . . . . . . . . . . . . . . . .723.6.1 Progpilot,Pixy,RIPS for PHP. . . . . . . . . . . . . . . . . .723.6.2 Node.js的AppScan结果. . . . . . . . . . . . . . . . .733.7限制。. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .74VIII内容3.8相关工作743.9结论764比较Node.js和多层XSS漏洞检测通过深度学习实现4.1导言。. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .8O4.2 Hop.js和Node.js语言。. . . . . . . . . . . . . . . . . . . .814.3 XSS的Hop.js数据库. . . . . . . . . . . . . . . . . . . . . . . .824.3.1 Hop.js生成器。. . . . . . . . . . . . . . . . . . . . . . .834.3.2 OWASP规则在Hop.js中的实现 . . . . . . . . . . . .844.4 Hashed-AST技术(PLP)。. . . . . . . . . . . . . . . . . . . . .944.5评价。. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .954.5.1评价过程。. . . . . . . . . . . . . . . . . . . . . .964.5.2评价结果。. . . . . . . . . . . . . . . . . . . . . .964.6相关工作. . . . . . . . . . . . . . . . . . . . . . . . . . . . .984.7结论。. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1OO5结论和未来工作101参考书目109图119表1211章介绍自2005年以来,我们目睹了Web应用程序中漏洞的爆炸式增长,包括XSS、SQL注入和远程文件包含。事实上,电子商务正在蓬勃发展,成千上万的网页被构建,JavaScript开始允许Web开发人员创建交互式网页。黑客可以窃取用户名和密码等信息,输入HTML表单,并泄露其他机密信息。随着第一个XSS蠕虫的出现[86],它从一个单一的MyS- pace网站用户配置文件传播到100万用户在短短24小时内,应用程序安全研究人员重新考虑了这种类型的Web漏洞的范围。几个因素的结合导致了Web漏洞的扩展一方面,对于新手漏洞研究人员来说,通过操纵主要用户输入(例如使用XSS插入简单的警报)来快速测试许多软件是很简单的另一方面,任何Web应用程序中的每个用户可控输入都可能是潜在的攻击向量,与在程序中查找错误相比,增加了XSS缺陷发生的可能性这些类型的漏洞有许多微妙之处和变体,甚至可以用来阻碍最强大的Web应用程序,如Facebook [42]和Twitter [92]。自2005年以来,XSS在常见弱点枚举(CWE)排名的前25名中一直在第一名和前五名之间徘徊[25,43,23,24]。一种可能的缓解方法是在软件部署之前检测XSS漏洞。在这种情况下,一个重要的研究领域是研究允许自动检测软件漏洞的工具的可用性以及这些工具的性能该研究领域包括关于代码分析技术的基本部分,可以分为三种主要方法:静态,动态和混合(我们建议感兴趣的读者对这些不同方法进行调查[89]直到2018)。12第1章介绍这三种类型的方法通常遭受假阳性率和假阴性率之间的统计不平衡。事实上,在检测脆弱性时,必须在完整性和可靠性之间建立统计特权。从这个意义上说,一个促进排除漏洞的工具(也就是说,它赋予完整性特权)与易受攻击的代码的实际数量相比,更有可能导致误报率的增加,并接受这种所谓的增加作为可接受的误差幅度。如果工具支持可靠性,则检测方法包括确认易受攻击的代码并最小化误报的数量。通过支持可靠性,该工具承诺不检测可验证的代码作为误差范围,从而遭受异常高的假阴性率。在完整性和可靠性之间找到正确的平衡是一个基本的统计问题,仍然很普遍,并且在人们希望以统计方式测量性能的所有领域(例如,医学领域中诊断测试的性能)中都存在。为了解决XSS的性能问题和持久性问题,本文研究了一种基于统计分类的XSS漏洞检测方法。通过静态分类方法,我们更精确地表示使用深度学习监督的分类算法[47,37,29]来检测XSS漏洞。使用这种技术的选择受到几个因素的影响第一个因素与学习算法扩展[47,37,29]以及这些算法的实现的可用性有关。有两种类型的算法:监督和无监督深度学习[36,37]。我们选择监督学习[36],因为它适合我们的分类问题。然而,我们在使用监督式深度学习技术时遇到了一些挑战。第一个挑战与深度学习算法训练算法所需的大量可靠数据有关[68,65](包括要训练的训练集,以及用于评估和测试阶段的算法之前从未见过的另外两个集这些数据必须是可靠的,因为它们必须代表人们希望分类的人群。在我们的研究中,数据库必须充分平衡易受XSS攻击的代码和不易受XSS攻击的代码第二个挑战与我们在本文中分析的数据类型有关。事实上,我们正在调查服务器端的XSS漏洞。通过爬行Web无法找到易受攻击的服务器端为了应对这两个挑战,我们使用PHP [8O],Node.js [71]和Hop.js [95,93]代码生成器来生成和控制大量代码数据,这些代码数据要么不容易受到XSS的攻击,要么由XSS漏洞组成。第三个挑战涉及监督学习中的数据标签[68,65]。实际上,要使用这种类型的算法,数据库中的所有代码都必须标记为易受XSS攻击,如果它们实际上易受XSS攻击的话。对于没有XSS缺陷的数据库代码也是如此。在我们的研究中,我们纠正和扩展了XSS漏洞标签系统,该系统基于OWASP基金会[77]创建的针对这些漏洞的预防规则[79]我们将服务器端源代码分为两类。第一类类是带有XSS3第二类是没有漏洞的代码集第二个因素与最近机器学习在许多领域(如工业、金融、健康等)的应用有关。更具体地说,神经模型分析自然语言的能力已经证明了巨大的[64](例如语音识别和语言翻译)。最近与自然语言分析相关的研究被归类在计算机科学中的自然语言处理(NLP)领域[21]。NLP是一个研究数据处理的领域,特别是与自然语言有关,使用计算机程序。这个领域有几个目标。其中之一是定义提取语言资源中包含的信息的路径,以收集反映自然语言特征的数据(例如语法,句法,语义,单词的含义及其在句子中的含义等)。另一个目标是使这些提取的数据可以理解,以便机器学习算法应用于前面提到的许多领域。鉴于自然语言的复杂性和表达性(由于其语言多样性,不同的语法结构,不同的表达方式意味着相同的逻辑)以及NLP领域的最新进展,软件工程和安全领域的研究人员已经应用机器学习来学习和理解易受攻击的代码模式和指示易受攻击代码特征的语义。事实上,高级编程语言与自然语言有联系程序语言的语言域更直接,也更简化。它们更加精确和完整,便于计算机跟踪和执行指令。在这种情况下,我们可以想知道自然语言和编程语言之间的这些差异是否会显著影响使用NLP方法的监督机器学习技术的分类性能。在论文的第一部分,我们将使用NLP表示方法[64]以可理解的方式表示我们面向服务器的程序的源代码,以构建旨在检测XSS缺陷的分类模型。第三个因素与定义机器学习算法属性的复杂性有关[14,62],以及用于提取程序中包含的基本信息的各种分析工具,包括许多形式的表示,例如,抽象树(AST),控制流图(CFG),数据流图(DFG),程序依赖图(PDG)和许多其他。这些工具被归类在编程语言处理(PLP)领域[67,6]。在实践中,基于机器学习的任务需要选择在训练复杂但有效的模型以执行创建它的工作的努力与通过首先使用或多或少先进的代码分析方法以最佳方式定义属性的努力之间放置光标的位置属性是定义现象特征的单个将对象表示为一个整体可能需要根据其复杂性定义几个甚至数百万个属性。应用这种类型的机器学习技术和手动定义属性粒度的困难导致我们使用神经网络来自动提取这些属性的深度学习技术爆炸。要将光标放在使用不同的中间代码表示的代码分析方法上,这些中间代码表示或多或少地深入(AST、CFG、DFG或PDG......),中使用第1章介绍4我们的工作是一个名为Code2vec的原型[6]。这个原型证明了在代码分析上做一些努力--使用代码树表示(AST)--就可以训练出能够在方法名预测上集成Java语言的语义表达能力的模型。考虑到这一点,我们决定研究这种代码分析方法应用于XSS漏洞检测的潜力,并比较这种类型的方法与NLP方法。最后一个因素与编程语言和底层范式之间的差异有关此外,当今应用程序的复杂性涉及传统上,Web应用程序是执行三层架构的分布式系统:客户端层、服务器层和数据层。这些层中的每一层都响应于一个主要功能。客户端和服务器端代码传统上涉及不同的编程语言:JavaScript、HTML和CSS用于客户端,PHP和JavaScript(Node.js)用于服务器端。存在各种类型的计算机编程范例(例如,面向原型、面向对象、面向组件、函数、事件驱动编程等)。处理问题的解决方案,并以适当的语言表达。由于Web应用程序的架构复杂性,我们可能会想,由此产生的各种编程范式影响了深度学习算法在检测XSS漏洞中的学习过程。在这个意义上,本文的第一部分分析,更具体地说,两种类型的编程范例-单层和多层应用于JavaScript-在监督学习模型的学习过程中的影响,旨在检测XSS漏洞能力。多层编程[94,22,111]是2006年出现的分布式软件的编程范式,旨在通过使用单一编程语言来定义Web软件架构的所有层来在这篇论文中,我们选择使用Hop.js [95,93]编写的程序,它使用这种类型的编程范式,是一种用于执行客户端和服务器端JavaScript代码的编程语言。这种语言的同质化在开发、维护、可伸缩性和应用分析方面提供了一些优势。在这种类型的范例中,我们最感兴趣的优点是应用程序分析,更具体地说,是AST的生成。实际上,多层程序可以在语法上显示在同一AST中定义客户机和服务器部分的所有层。客户端和服务器部分之间的链接的这种抽象表示在检测XSS漏洞方面可能是有利的,并且在单层编程范例中,特别是在Node.js中,它不会以相同的表现力出现在这篇论文中,我们选择在Node.js [71]中使用单层服务器程序来与多层语言Hop.js进行对比。作为使用PLP技术检测XSS缺陷的一部分,我们决定研究5相关出版物:本论文的第3和第4两个技术章节中的每一个都曾在以下期刊/会议上发表过:Maurel,H.;维达尔,S。Rezk,T.使用深度学习静态识别XSS。在Proceedings of Science of Computer Programming Journal,(2O22)— Maurel,H.;维达尔,S。Rezk,T.使用深度学习静态识别XSS。第18届国际安全与密码学会议论文集(2O21)[59]。— Maurel,H.;维达尔,S。Rezk,T.通过深度学习比较第八届信息系统安全与隐私国际会议论文集(2O22)[58]。会议:日记帐:为Hop.js和Node.js中的代码生成的语法树(AST)论文大纲。 我们概述了以下章节:— 在第二章中,我们选择了与本文内容直接相关的Web应用程序安全领域的主题。我们介绍了理解跨站脚本机制的技术背景,这些漏洞的原因我们描述了本文中使用的预处理技术,将源代码表示为可理解的格式,以便使用深度学习来检测跨站脚本漏洞。— 在第3章中,我们将探索使用深度学习检测跨站点脚本漏洞的静态方法我们比较了两种不同的预处理代码表示基于自然语言处理和编程语言处理。我们使用基于不同神经网络架构的模型进行实验,我们将我们的结果与PHP和Node.js的知名静态分析器进行了— 在第4章中,我们探讨了使用Hashed-AST预处理预测跨站脚本对单层和多层范式语言的影响。我们构建了288个模型来比较使用包含客户端代码作为代码的服务器端代码和包含客户端代码作为文本的服务器端代码— 在第五章中,我们总结了我们所做的工作,取得的成果,并给出了未来工作的展望。7本章介绍了将在本论文的主要第3章和第4章中使用的概念和定义— 第2.1节概述了跨站点脚本和OWASP预防规则,— 第2.2节介绍了一种称为二进制分类的特定深度学习任务,并描述了两种不同的学习分布式表示。章背景28第2章. 背景2.1 跨站点脚本攻击者不断用新的和独特的注入方法在Web应用程序中利用XSS。然而,所有这些方法都是基于我们将介绍的共同基础。在本节中,我们将提供基本定义,以及与第3章和第4章中使用的XSS漏洞相关的预防规则。2.1.1基础知识1234567891O1112131415161718192O图2.1XSS攻击包括在网站中插入恶意代码,然后在用户XSS攻击的代码通常(但不总是)由HTML部分和恶意JavaScript部分组成。此漏洞不会在Web应用程序服务器上运行。攻击发生在客户端,目标是用户。一旦攻击者在用户的浏览器中拥有控制线程,他们就要创建Web应用程序,开发人员通常必须插入允许他们与应用程序的用户交互的代码片段这些代码片段,特别是,<联系我们XSSthroughpseudopopoocoljavascript <联系我们<?PHP//send$tainted= $_ GET['userData'];//sanitization$tainted=htmlspcialchars($tainted,ENT_QUOTES);//sinkwithflawecho“ link/a>“;?>> HelloWorrld!/h1><联系我们2.1.跨站点脚本9javascript:alert(“XSS“);分布在应用程序的HTML页面的不同上下文中的用户可控制的输入。但是,开发人员不应该依赖用户输入。根据插入不受信任的用户输入的上下文,开发人员必须采取特定的步骤来确保用户数据不会破坏允许代码执行的上下文除非用户可控制的输入正确地中和,否则如果Web应用程序包含源、接收器以及两者之间的链接,则可能发生XSS攻击源是用户输入的入口点,恶意用户可能会在其中注入有效负载。接收器在Web应用程序上呈现链接的源,并可能执行其恶意内容。图2.1和2.2说明了接收器周围上下文的重要性,以及确保用户数据不会破坏此上下文以执行不需要的代码的预防措施。在图2.1中,用户数据是通过特定的方法检索的$_GET用于从HTML请求中检索查询。这个数据被命名为userData,然后存储在一个名为$stained的变量中。在这个变量上调用一个标准的PHP清理函数htmlspecialchars,以防止上下文被使用HTML脚本标记插入的有效负载或使用引号或关闭的破坏上下文所破坏htmlspecialchars函数经常用于清理不可信的数据,表2.1列出了所有被相应HTML实体替换的字符(有关此函数的详细信息,请参阅官方PHP文档1)。然而,接收上下文使用特殊的HTML属性,该属性允许使用伪协议javascript(例如javascript:alert(1))执行JavaScript代码。因此,尽管应用了htmlspecialchars清理,这个例子仍然可以执行代码,这在另一个上下文中已经足够了。表2.1功能字符描述编码&ersand&“双引号",除非设置了’百分比O39;(用于ENT_HTML4O1)或'(用于ENT_XML1、ENT_XHTML或ENT_HTML5),但仅当设置<小于&小>大于>以下有效负载可以用作userData查询的值,以在pseudoprotocol JavaScript的帮助下绕过这种htmlspecialchars清理:如果我们运行图2.1中的代码并使用上面的有效负载,它将被htmlspecialchars函数编码,如下所示,但它仍然会在弹出警报中显示XSS消息:1. https:php.net/manual/fr/function.htmlspecialchars.php第2章. 背景10[][(![] % 2B[])[%2B[]] % 2B(![] % 2B[])[!%2B[] % 2B!%2B[]] % 2B(![] % 2B[])[%2B!%2B[]] % 2B(!![] %2B[])[%2B[]][[][[][(![] % 2B[])[%2B[]] % 2B(![] % 2B[])[!%2B[] % 2B!%2B[]] % 2B(![] % 2B[])[%2B!%2B[]] % 2B(!![] %2B[])[% 2 B[] %2 B[])[!%2 B[] %2 B!% 2 B[] %2 B!% 2 B[]] %2 B(!![] %2 B[][(![] %2 B[])[% 2 B[]]%2 B(![] %2 B[])[!%2B[] % 2B!% 2 B[]] %2 B(![] %2 B[])[% 2 B!% 2 B[]]%2 B(!![] %2 B[])[% 2 B[]])[% 2 B!%2B[] % 2B[% 2B[]] %2B([][[]] % 2B[])[% 2B!% 2 B[]] %2 B(![] %2 B[])[!%2 B[] %2 B!% 2 B[] %2 B!% 2 B[]]%2 B(!![] %2 B[])[% 2 B[]] %2 B(![] %2 B[])[% 2 B!%2B[]]% 2B([][[]] % 2B[])[%2B[]] % 2B([][(![] % 2B[])[%2B[]] % 2B(![] % 2B[])[!%2B[] % 2B!%2B[]] % 2B(![] % 2B[])[%2B!%2B[]] % 2B(!![] % 2B[])[%2B[]] % 2B[])[!%2B[] % 2B!%2B[] % 2B!%2B[]] % 2B(!![] % 2B[])[%2B[]] % 2B(![] %2B[][(![] % 2B[])[%2B[]] % 2B(![] % 2B[])[!%2B[] % 2B!%2B[]] % 2B(![] % 2B[])[%2B!%2B[]] % 2B(!![] %2B[])[%2B[])[%2B!%2B[] %2B[%2B[]] %2B(!![] %2B[])[%2B!%2B[]]]((!![] %2B[])[%2B!%2B[]]%2B(!![] %2B[])[!%2B[] % 2B!%2B[] % 2B!%2B[]] % 2B(!![] % 2B[])[%2B[]] % 2B([][[]] % 2B[])[%2B[]] % 2B([] % 2B[])[%2B!%2B[]]%2B([][[]] % 2B[])[%2B!%2B[]] % 2B(%2B[![]] % 2B[][(![] % 2B[])[%2B[]] % 2B(![] % 2B[])[!%2B[] % 2B!%2B[]]%2B(啊![] % 2B[])[%2B!%2B[]] % 2B(!![] % 2B[])[%2B[]])[%2B!%2B[] % 2B[%2B!%2B[] % 2B(!![] % 2B[])[!%2B[] %2B!% 2 B[] %2 B!% 2 B[]]%2 B(% 2 B(!%2 B[] %2 B!% 2 B[] %2 B!% 2 B[] %2 B[% 2 B!% 2 B[]]))[(!![] %2 B[])[% 2 B[]]%2 B(![] %2B[][(![] % 2B[])[%2B[]] % 2B(![] % 2B[])[!%2B[] % 2B!%2B[]] % 2B(![] % 2B[])[%2B!%2B[]] % 2B(!![] %2B[])[%2Bjavascript:alert(quot;XSSquot;)1234567891O1112131415161718192O图2.2图2.2表示的代码类型与图2.3中的代码类型完全相同。2.1 但是第15行中变量$pointed的上下文被修改了。这次这个变量被脚本插入标记包围。由于上下文允许脚本插入,因此不再需要使用JavaScript伪协议来插入有效负载。然而,使用相同的有效负载(没有JavaScript:,也就是alert(“XSS”))不再可能。持续增双引号由htmlspecialchars清理函数编码,并且JavaScript解释器无法识别语法&"XSS“。但是,工资-以以下方式编码的负载允许攻击成功:<联系我们