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").onsubmit=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也要解密一下。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM