Bugku web4
有提示嘿嘿这么强。提示看代码:肯定不止那么简单。
那就看看,果然有问题,这么一串是啥东西。
var p1 = '%66%75%6e%63%74%69%6f%6e%20%63%68%65%63%6b%53%75%62%6d%69%74%28%29%7b%76%61%72%20%61%3d%64%6f%63%75%6d%65%6e%74%2e%67%65%74%45%6c%65%6d%65%6e%74%42%79%49%64%28%22%70%61%73%73%77%6f%72%64%22%29%3b%69%66%28%22%75%6e%64%65%66%69%6e%65%64%22%21%3d%74%79%70%65%6f%66%20%61%29%7b%69%66%28%22%36%37%64%37%30%39%62%32%62';
var p2 = '%61%61%36%34%38%63%66%36%65%38%37%61%37%31%31%34%66%31%22%3d%3d%61%2e%76%61%6c%75%65%29%72%65%74%75%72%6e%21%30%3b%61%6c%65%72%74%28%22%45%72%72%6f%72%22%29%3b%61%2e%66%6f%63%75%73%28%29%3b%72%65%74%75%72%6e%21%31%7d%7d%64%6f%63%75%6d%65%6e%74%2e%67%65%74%45%6c%65%6d%65%6e%74%42%79%49%64%28%22%6c%65%76%65%6c%51%75%65%73%74%22%29%2e%6f%6e%73%75%62%6d%69%74%3d%63%68%65%63%6b%53%75%62%6d%69%74%3b';
以上是密文。
eval(unescape(p1) + unescape('%35%34%61%61%32' + p2));//这是php的函数。Unescape()函数是解密函数,推测出密文是Excape加密出来的。Eval()函数功能是执行括号内的代码。
这个东西实在javascipt中发现的:
用工具揭秘:
解密后是:function checkSubmit()
{
var a=document.getElementById("password");//关键是这个函数document.getElemenById(),获取ID为password的值
if("undefined"!=typeof a) // typeof在两种情况下会返回"undefined":一个变量没有被声明的时候,和一个变量的值是undefined的时候
{
if("67d709b2baa648cf6e87a7114f1"==a.value)
return!0;
alert("Error");
a.focus();return!1
}
}
document.getElementById("levelQuest").οnsubmit=checkSubmit;
document.getElementById(" ") 得到的是一个对象,用 alert 显示得到的是
“ object ”,而不是具体的值,它有 value 和 length 等属性,加上 .value 得到的才
是具体的值!
参考资料:
1. document . getElementById 的用法和 DHTML.CHM 的下载地址
http://blog.sina.com.cn/u/4933092a010003k7
今天在网络上查找 document . getElementById 的用法,如下:
A : 语法:
oElement = document . getElementById ( sID )
参数:
sID : 必选项。字符串 (String) 。
返回值:
oElement : 对象 (Element) 。
说明:
根据指定的 id 属性值得到对象。返回 id 属性值等于 sID 的第一个对象的引用。假如对应的为一组对象 ,则返回该组对象中的第一个。
如果无符合条件的对象,则返回 null 。
B :有一个例子可以很好的说明:
****************************************************************************
* *
* 这个函数中最关键的地方是 document.getElementById ,他是什么呢? *
* *
* 关于 document.getElementById ,是这样的: *
* *
* 如: document.getElementById('hdrPageHeader_lblTitle') *
* *
* 表示的意思是:获取 ID 为 :hdrPageHeader_lblTitle 的对象 *
* *
* <a id="hdrPageHeader_lblTitle0">aa</a> *
* <a id="hdrPageHeader_lblTitle">bb</a> *
* <a id="hdrPageHeader_lblTitle1">cc</a> *
* <script language="javascript"> *
* <!-- *
* var idtext=document.getElementById('hdrPageHeader_lblTitle') *
* alert(idtext.innerText) *
* //--> *
* </script> *
* *
****************************************************************************
C :另外还得到一个细节:
http://bbs.cnitn.cn/dispbbs.asp?boardid=20&id=12957 ,内容是:
① document.getElementById 有时会抓 name 放过了 id ,据说是 IE 的一个 BUG ;
页面中有
<input type="hidden" id="hello8" name="category_id" value="2" />
<select id="category_id" οnchange="al();">
一个是 name="category_id" 一个是 id="category_id"
用 document.getElementById 取第二个,可是,取到的却是第一个 name=category_id
在 IE 中 getElementById 竟然不是先抓 id 而是先找 name 相同的物件 ...
兩個 form, 每個 form 有兩個 textbox, 兩個 form 中的 textbox 是相同的 name, 但 id 都不同 ...
這樣在 Firefox 是沒問題的 ... 但在 IE 卻只抓得到第一個出現的 name 資料
D :在得到答案后,同时也得到了两本好的手册工具,
1.DHTML.CHM ----- 很全面的 DHTML 的参考手
2.javascript 的参考手册
饮水思源,我还是不要把别人的成果直接放到这里,下面这个地址提供了下载连接:
http://www.xy72.com/bbs/dispbbs.asp?boardID=11&ID=71&page=1
2. document 对象
http://www.phpx.com/man/dhtmlcn/objects/obj_document.html
属性: title ; bgColor ; url; ( 使用: document.title)
方法:
focus
使得元素得到焦点并执行由 onfocus 事件指定的代码。
getElementById
获取对 ID 标签属性为指定值的第一个对象的引用。
getElementsByName
根据 NAME 标签属性的值获取对象的集合。
getElementsByTagName
获取基于指定元素名称的对象集合。
① document.getElementById 有时会抓name放过了id ,据说是IE的一个BUG;
http://community.csdn.net/Expert/topic/4223/4223888.xml?temp=.1947443
页面中有
<input type="hidden" id="hello8" name="category_id" value="2" /
<select id="category_id" οnchange="al();">
一个是name="category_id" 一个是id="category_id
用document.getElementById取第二个,可是,取到的却是第一个name=category_id
在E中getElementById竟然不是先抓id而是先找name相同的物件...
兩個form,每個form有兩個textbox,兩個form中的textbox是相同的name,但id都不同...
這樣在Firefox是沒問題的...但在IE卻只抓得到第一個出現的name資料
下面这段代码可以验证这个结果
<HTML>
<HEAD>
<TITLE> getElementById </TITLE>
</HEAD>
<SCRIPT LANGUAGE="JavaScript">
<!--
function chkacc(){
alert(document.getElementById("tbxuid1").value);
alert(document.getElementById("tbxpwd1").value);
alert(document.getElementById("tbxuid").value);
alert(document.getElementById("tbxpwd").value);
}
//-->
</SCRIPT>
<BODY>
<FORM METHOD=POST ACTION="" name="frm1">
<INPUT TYPE="text" NAME="tbxuid" id="tbxuid1">
<INPUT TYPE="text" NAME="tbxpwd" id="tbxpwd1">
</FORM>
<FORM METHOD=POST ACTION="" name="frm2">
<INPUT TYPE="text" NAME="tbxuid" id="tbxuid">
<INPUT TYPE="text" NAME="tbxpwd" id="tbxpwd">
<INPUT TYPE="button" value="檢查" name="btnchk" οnclick="chkacc();">
</FORM>
</BODY>
</HTML
② javascript中的getElementbyId使用
<!-- -->
网页中的元素必须有id属性,才能通过这个方法得到,比如
<input type=text name="content" id="content">
③获取html标记主要有两种方法,一种是通过ID值,一种是通过name属性
name属性主要用于form表单内的input标记
---------------------
作者:flashdream8
来源:CSDN
原文:https://blog.csdn.net/flashdream8/article/details/83324930
版权声明:本文为博主原创文章,转载请附上博文链接!
使用typeof方法判断undefined类型
更新时间:2014年09月09日 17:05:09 投稿:whsnow 我要评论
使用typeof方法,typeof 返回的是字符串,其中就有一个是undefined,下面是示例代码,大家可以看看
有关js判断undefined类型,使用typeof方法,typeof 返回的是字符串,其中就有一个是undefined。
js判断undefined类型
if (reValue== undefined)
{
alert("undefined");
}
发现判断不出来,最后查了下资料要用typeof方法:
if (typeof(reValue) == "undefined")
{
alert("undefined");
}
typeof 返回字符串,有六种可能:"number"、"string"、"boolean"、"object"、"function"、"undefined"。
在使用时一定要注意。
3、常规应用:
1).检查一个变量是否存在,是否有值.
typeof在两种情况下会返回"undefined":一个变量没有被声明的时候,和一个变量的值是undefined的时候.例如:
> typeof undeclaredVariable === "undefined" true
> var declaredVariable;
> typeof declaredVariable 'undefined'
> typeof undefined 'undefined'
还有其他办法检测某个值是否是undefined:
> var value = undefined;
> value === undefined true
但这种方法如果使用在一个未声明的变量上的时候,就会抛出异常,因为只有typeof才可以正常检测未声明的变量的同时还不报错:
> undeclaredVariable === undefined ReferenceError: undeclaredVariable is not defined
注意:未初始化的变量,没有被传入参数的形参,不存在的属性,都不会出现上面的问题,因为它们总是可访问的,值总是undefined:
> var declaredVariable;
> declaredVariable === undefined true
> (function (x) { return x === undefined }()) true
> ({}).foo === undefined true
注:因此,如果想检测一个可能没有被声明的全局变量是否存在,也可以使用 if(window.maybeUndeclaredVariable){}
问题: typeof在完成这样的任务时显得很繁杂.
解决办法: 这样的操作不是很常见,所以有人觉的没必要再找更好的解决办法了.不过也许有人会提出一个专门的操作符:
> defined undeclaredVariable false
> var declaredVariable;
> defined declaredVariable false
或者,也许有人还需要一个检测变量是否被声明的操作符:
> declared undeclaredVariable false
> var declaredVariable;
> declared declaredVariable true
译者注:在perl里,上面的defined操作符相当于defined(),上面的declared操作符相当于exists(),
2.判断一个值不等于undefined也不等于null
问题:如果你想检测一个值是否被定义过(值不是undefined也不是null),那么你就遇到了typeof最有名的一个怪异表现(被认为是一个bug):typeof null返回了"object":
> typeof null 'object'
注:这只能说是最初的JavaScript实现的bug,而现在标准就是这样规范的.V8曾经修正并实现过typeof null === "null",但最终证明不可行.http://wiki.ecmascript.org/doku.php?id=harmony:typeof_null
解决办法: 不要使用typeof来做这项任务,用下面这样的方法来代替:但是变量x必须事先声明,否则会报错。
function isDefined(x) { return x !== null && x !== undefined; }
另一个可能性是引入一个“默认值运算符”,在myValue未定义的情况下,下面的表达式会返回defaultValue:
myValue || defaultValue
上面的表达式等价于:
(myValue !== undefined && myValue !== null) ? myValue : defaultValue
其实是下面这条语句的简化:
myValue = myValue || defaultValue
3.区分对象值和原始值
下面的函数用来检测x是否是一个对象值:
function isObject(x) { return (typeof x === "function" || (typeof x === "object" && x !== null)); }
问题: 上面的检测比较复杂,是因为typeof把函数和对象看成是不同的类型,而且typeof null返回"object".
解决办法: 下面的方法也经常用于检测对象值:
function isObject2(x) { return x === Object(x); }
警告:你也许认为这里可以使用instanceof Object来检测,但是instanceof是通过使用使用一个对象的原型来判断实例关系的,那么没有原型的对象怎么办呢:
> var obj = Object.create(null);
> Object.getPrototypeOf(obj) null
obj确实是一个对象,但它不是任何值的实例:
> typeof obj 'object'
> obj instanceof Object false
在实际中,你可能很少遇到这样的对象,但它的确存在,而且有它的用途.
译者注:Object.prototype就是一个默认存在的,没有原型的对象
>Object.getPrototypeOf(Object.prototype) null
>typeof Object.prototype 'object'
>Object.prototype instanceof Object false
4.原始值的类型是什么?
typeof是最好的用来查看某个原始值的类型的方式.
> typeof "abc" 'string'
> typeof undefined 'undefined'
问题: 你必须知道typeof null的怪异表现.
> typeof null // 要小心! 'object'
解决办法: 下面的函数可以修复这个问题(只针对这个用例).
function getPrimitiveTypeName(x) {
var typeName = typeof x;
switch(typeName) {
case "undefined": case "boolean": case "number": case "string": return typeName;
case "object": if (x === null) { return "null"; }
default: // 前面的判断都没通过 throw new TypeError("参数不是一个原始值: "+x);
} }
更好的解决办法: 实现一个函数getTypeName(),除了可以返回原始值的的类型,还可以返回对象值的内部[[Class]]属性.这里讲了如何实现这个函数(译者注:jQuery中的$.type就是这样的实现)
5.某个值是否是函数
typeof可以用来检测一个值是否是函数.
> typeof function () {} 'function'
> typeof Object.prototype.toString 'function'
原则上说,instanceof Function也可以进行这种需求的检测.乍一看,貌似写法还更加优雅.但是,浏览器有一个怪癖:每一个框架和窗口都有它自己的全局变量.因此,如果你将某个框架中的对象传到另一个框架中,instanceof就不能正常工作了,因为这两个框架有着不同的构造函数.这就是为什么ECMAScript5中会有Array.isArray()方法的原因.如果有一个能够跨框架的,用于检查一个对象是否是给定的构造函数的实例的方法的话,那会很好.上述的getTypeName()是一个可用的变通方法,但也许还有一个更根本的解决方案.
6.综述
下面提到的,应该是目前JavaScript中最迫切需要的,可以代替一些typeof目前职责的功能特性:
isDefined() (比如Object.isDefined()): 可以作为一个函数或者一个运算符
isObject()
getTypeName()
能够跨框架的,检测一个对象是否是指定的构造函数的实例的机制
检查某个变量是否已经被声明这样的需求,可能没那么必要有自己的运算符.
以上这篇js中判断变量类型函数typeof的用法总结就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。
修改id为password,让后提交unescape(p1) + unescape('%35%34%61%61%32' + p2)的字符串值。%35%34%61%61%32也要解密一下。