首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > JavaScript >

JS取得token

2012-08-15 
JS获得token使用struts有一个很奇怪的事情,就是你不知道在什么时候,就放进来一个bug,重复地提交,而且渗透

JS获得token

使用struts有一个很奇怪的事情,就是你不知道在什么时候,就放进来一个bug,重复地提交,而且渗透到好几个方法,甚至整个action都会被污染。像打补丁似的,struts本身可以有一个可以用来防止重复提交的拦截器:<interceptor-ref name="token"/> 

<!-- 浏览器端看到的源码 --><form method="post" name="hiddenForm"><input type="hidden" id="hiddenTest" value="123456Test" ><input type="hidden" name="struts.token.name" value="struts.token" /><input type="hidden" name="struts.token" value="C294HLLE33EEH9UM6TIY1EI9ZA37CPIN" /> </form>

所谓的struts标签,就是帮你写了一个hidden的input元素而已,然后在客户端生成一个32位的离散值,再把这个值提交回去,struts拦截器拦截到之后,就在同一次请求中,对第一次拦截到的值的表单做操作,第二次提交的表单,因为两次hex的值几乎不会重复,所以,这个hex值相当于数据库中版本戳的思想,把版本戳不匹配的请求拒绝。所以,我们可以再前台用javascript来拼装这样的url作为token拦截器需要的参数。没有拼装去请求token拦截器的action时,会报一个缺少token参数的异常。


第一个想法看似很成功,但是测试之后有一个局限性,就是点击左边,右边的frame没有token值,再点回右边有token的链接时,拿到左边的token值就跟session中不匹配了,被服务器拒绝。为什么呢?我试着把这个想法放到全局上,就是在组装左右frame的index.jsp上面,写onload事件,马上就达到想要的效果了,找了半天没有发现为什么会有这差异,可能有些带token的jsp页面没有考虑到,让右边加载的所有页面都把token写到左边,确保了最新的token值吧,所以就过关了。


糊里糊涂的记录了一下,希望是有用的记录。



热点排行