htc 7ca38fdcbb 善行少年PC端首次提交(基础版) 10 mesi fa
..
lib 7ca38fdcbb 善行少年PC端首次提交(基础版) 10 mesi fa
.npmignore 7ca38fdcbb 善行少年PC端首次提交(基础版) 10 mesi fa
LICENSE.md 7ca38fdcbb 善行少年PC端首次提交(基础版) 10 mesi fa
README.md 7ca38fdcbb 善行少年PC端首次提交(基础版) 10 mesi fa
package.json 7ca38fdcbb 善行少年PC端首次提交(基础版) 10 mesi fa

README.md

Bourne. JSON Bourne.

JSON.parse() drop-in replacement with prototype poisoning protection

Build Status

Introduction

Consider this:

> const a = '{"__proto__":{ "b":5}}';
'{"__proto__":{ "b":5}}'

> const b = JSON.parse(a);
{ __proto__: { b: 5 } }

> b.b;
undefined

> const c = Object.assign({}, b);
{}

> c.b
5

The problem is that JSON.parse() retains the __proto__ property as a plain object key. By itself, this is not a security issue. However, as soon as that object is assigned to another or iterated on and values copied, the __proto__ property leaks and becomes the object's prototype.

API

Bourne.parse(text, [reviver], [options])

Parses a given JSON-formatted text into an object where:

  • text - the JSON text string.
  • reviver - the JSON.parse() optional reviver argument.
  • options - optional configuration object where:
    • protoAction - optional string with one of:
      • 'error' - throw a SyntaxError when a __proto__ key is found. This is the default value.
      • 'remove' - deletes any __proto__ keys from the result object.
      • 'ignore' - skips all validation (same as calling JSON.parse() directly).

Bourne.scan(obj, [options])

Scans a given object for prototype properties where:

  • obj - the object being scanned.
  • options - optional configuration object where:
    • protoAction - optional string with one of:
      • 'error' - throw a SyntaxError when a __proto__ key is found. This is the default value.
      • 'remove' - deletes any __proto__ keys from the input obj.