bugku web4

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也要解密一下。

 

转载于:https://www.cnblogs.com/naihaizhuoxia/p/11190909.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值