Shikata Ga Nai

Private? There is no such things.

JavaScriptプロトタイプ汚染の発見と悪用の実践にふれてみた①

Hello there, ('ω')ノ

 

実践的な経験とより深い理解を得るために、開発者ツールを開くことをお勧めして。

 

JavaScriptの機能:

プロトタイプ汚染脆弱性は、JavaScript言語に固有のもので。

したがって、脆弱性自体に取り組む前に、それにつながるJavaScriptの機能を

理解する必要があって。

 

オブジェクト:

JavaScriptではオブジェクトはどのように存在するのかを開発者ツールを開き、

2つのプロパティを含む単純なオブジェクトを作成することに。

 

var o = {name: 'Ivan', surname: 'Ivanov'}

 

 

オブジェクトのプロパティにアクセスするには、主に 2 つの方法があって。

 

o.name

o['surname']

 

 

ちなみに存在しないプロパティにアクセスしようとすると以下のとおりで。

undefinedは、プロパティが欠落していることを意味して。

 

 

JavaScript では、関数を通常の変数のように扱うことができるため

オブジェクト メソッドはプロパティとして定義され。

foo() メソッドを o オブジェクトに追加して呼び出すには。

 

o.foo = function() {
 console.log("foobar")
}
o.foo()

 

 

たとえば、toString() メソッドを呼び出すと。

o オブジェクトには toString() メソッドがありませんが、

toString() メソッドが実行されるようで。

Object.getOwnPropertyNames() 関数を使用して確認してみると

name、surname、foo の 3 つのプロパティしかなくて。

 

o.toString()

Object.getOwnPropertyNames(o)

 

 

はたして、toString() メソッドはどこからきたかというと。

 

Best regards, (^^ゞ