使用安全json parser防止json注入

简介:  今天在网上瞎逛又看到了一个不错的东西。 有些程序员如果没有很好的在javascript中解析json数据,往往会直接eval把json转成js对象,这时候如果json的数据中包含了被注入的恶意数据,则可能导致代码注入的问题。
 今天在网上瞎逛又看到了一个不错的东西。

有些程序员如果没有很好的在 javascript中解析 json数据,往往会直接 eval把json转成js对象,这时候如果json的数据中包含了被注入的恶意数据,则可能导致代码注入的问题。

正确的做法是 分割出json里包含的特殊字符,然后再解析为对象

http://json.org/json2.js 中是通过正则来完成的。

// We split the second stage into 4 regexp operations in order to work around
// crippling inefficiencies in IE's and Safari's regexp engines. First we
// replace the JSON backslash pairs with '@' (a non-JSON character). Second, we
// replace all simple value tokens with ']' characters. Third, we delete all
// open brackets that follow a colon or comma or that begin the text. Finally,
// we look to see that the remaining characters are only whitespace or ']' or
// ',' or ':' or '{' or '}'. If that is so, then the text is safe for eval.

            if (/^[\],:{}\s]*$/.
test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@').
replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']').
replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) {

// In the third stage we use the eval function to compile the text into a
// JavaScript structure. The '{' operator is subject to a syntactic ambiguity
// in JavaScript: it can begin a block or an object literal. We wrap the text
// in parens to eliminate the ambiguity.

                j = eval('(' + text + ')');
目前不少写的好的框架和js解析函数都取用了这种做法。

所以,以后千万别直接eval了。

目录
相关文章
|
存储 JSON 安全
解锁互联网安全的新钥匙:JWT(JSON Web Token)
解锁互联网安全的新钥匙:JWT(JSON Web Token)
229 0
|
1月前
|
JSON JavaScript Java
如何手写实现 JSON Parser
【11月更文挑战第10天】本文介绍了如何使用 Python 手写实现一个简单的 JSON 解析器。通过逐字符读取 JSON 字符串,解析出对象、数组、字符串、数字、布尔值和 null 等基本数据结构。文章详细描述了每个步骤的具体实现方法,包括去除空白字符、解析基础数据类型、解析字符串、数组和对象,以及核心的 `parse_value` 函数。最后,提供了一个完整的 JSON 解析器主函数示例。
|
JSON IDE 测试技术
软件测试|好用的pycharm插件推荐(二)—— JSON Parser
软件测试|好用的pycharm插件推荐(二)—— JSON Parser
|
存储 JSON Java
Java - Jackson JSON Java Parser API
Java - Jackson JSON Java Parser API
98 0
|
SQL JSON 安全
基于JSON的SQL注入攻击触发需要更新Web应用程序防火墙
基于JSON的SQL注入攻击触发需要更新Web应用程序防火墙
|
XML 存储 JSON
JSON Web Token (JWT),服务端信息传输安全解决方案。
JWT介绍 JSON Web Token(JWT)是一种开放标准(RFC 7519),它定义了一种紧凑独立的基于JSON对象在各方之间安全地传输信息的方式。这些信息可以被验证和信任,因为它是数字签名的。JWTs可以使用一个密钥(HMAC算法),或使用RSA的公钥/私钥密钥对对信息进行签名。 让我们进一步解释这个定义的一些概念。
954 0
JSON Web Token (JWT),服务端信息传输安全解决方案。
|
JSON 算法 JavaScript
JSON Web Token - 在Web应用间安全地传递信息
JSON Web Token - 在Web应用间安全地传递信息
201 0
JSON Web Token - 在Web应用间安全地传递信息
|
Web App开发 算法 安全
JSON Web Token (JWT),服务端信息传输安全解决方案。
image JWT介绍 JSON Web Token(JWT)是一种开放标准(RFC 7519),它定义了一种紧凑独立的基于JSON对象在各方之间安全地传输信息的方式。
1266 0
|
JSON JavaScript 安全
扯谈web安全之JSON
前言 JSON(JavaScript Object Notation),可以说是事实的浏览器,服务器交换数据的标准了。目测其它的格式如XML,或者其它自定义的格式会越来越少。
946 0