JSON 数据 - 已解析或“评估”

2023-12-09

从安全角度来看,我认为简单地对传入的 JSON 数据进行“评估”是一个严重错误。如果你得到像下面这样的数据,你就会遇到一些问题。

{ someData:((function() { 
    alert("i'm in ur code hackin' ur page"); 
})()) }

我想知道最流行的 Javascript 库是做什么的?是手动解析还是简单的评估?

[Edit]

我不是问是否I应该 eval/parse - 我问一些流行的 Javascript 库使用什么方法(jQuery、Prototype 等......)


这是什么官方 JavaScript 解析器 does:

// In the second stage, we run the text against regular expressions that look
// for non-JSON patterns. We are especially concerned with '()' and 'new'
// because they can cause invocation, and '=' because it can cause mutation.
// But just to be safe, we want to reject all unexpected forms.

// 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 + ')');

    ...

除了内置的JSON解析支持在现代浏览器中,这就是所有(基于库的)安全 JSON 解析器所做的事情(即,之前的正则表达式测试eval).

安全图书馆(除了官方的json2实现之外)

原型的isJSON功能。

穆托尔斯JSON.decode函数(再次,通过之前的正则表达式测试eval).

不安全的库:

dojo's fromJson does not提供安全evaling. 这是他们的完整实现(减去注释):

dojo.fromJson = function(json) {
    return eval("(" + json + ")");
}

jQuery 不提供安全的 JSONeval'ing,但请参阅官方插件的secureEvalJSON函数(第 143 行)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JSON 数据 - 已解析或“评估” 的相关文章

  • 使用 Javascript 实现 Tinder 风格的拖放手势?

    我正在尝试找出哪些库可以用于仅使用 Javascript 的 Tinder 风格拖放手势 需要创建一个响应拖动手势的 HTML 元素 触摸并按住时 允许元素跟随用户的手指移动 当用户移开手指时 该元素会 动画回到原来的位置 如果元素在释放时
  • 将图像缩略图上传到服务器,而不上传整个图像

    据我所知 我在这里问的是不可能的 但我想无论如何我都会问 以防我遗漏了什么 假设您想让用户上传 JPG 图像 并且这些图像被缩放为较小的图标 并且原始图像始终被丢弃并且不再需要 有没有什么方法可以在大多数现代浏览器中普遍使用 让用户选择硬盘
  • 如何在React-Native中选择ListView的一项?

    我是 React Native 的新手 我想使用 ListView 选择一项 当我第一次按下 item 时 ListView renderRow 被调用 但终究不起作用 我该如何修复这个错误 我的问题出在哪里 我写了一个演示here htt
  • 如何使用 Underscore 获取 JavaScript 数组中的重复项

    我有一个数组 我需要重复的项目并根据特定属性打印这些项目 我知道如何使用 underscore js 获取唯一项目 但我需要找到重复项而不是唯一值 var somevalue name john country spain name jan
  • 如何根据另一个动态下拉列表的值创建动态下拉列表?

    我有一个下拉菜单 当我选择一个选项时 它会创建一个动态下拉菜单 到目前为止 一切都很好 但我想创建另一个动态下拉列表 现在基于另一个动态下拉列表的值 我该怎么做 第一个动态下拉列表有效 我猜第二个无效 因为动态变量 div 没有静态 ID
  • 使用 Charts.js 禁用动画

    我在使用 Charts js 关闭动画时遇到一些问题 这是我的代码 var pieData value 30 color F38630 value 50 color E0E4CC value 100 color 69D2E7 var myP
  • 为什么我的箭头函数有原型属性?

    正如文档中提到的https developer mozilla org en docs Web JavaScript Reference Functions Arrow functions https developer mozilla o
  • 如何在Javascript中声明静态变量[重复]

    这个问题在这里已经有答案了 在下面的代码中 我希望有一个计数器来跟踪创建的 Person 对象的数量 这段代码没有这样做 我该如何实现呢 function Person this name Peter this counter this c
  • 强制执行 show.bind

    我有一个包含数据的表 当从另一个视图触发事件时 我希望视图检查 show bind 语句 问题是该事件没有更改当前视图中的任何数据 foo html tr p canBeRemoved p tr 我正在使用 EventAggregator
  • jQuery 中如何判断 JSON 对象是否为空

    我有以下 JSON meta limit 20 next null offset 0 previous null total count 0 objects 我对对象感兴趣 我想知道对象是否为空并显示警报 像这样的东西 success fu
  • Facebook 登录无法在移动浏览器中使用

    我使用 react facebook login 在我的网站中实现了 facebook 登录module https github com keppelen react facebook login 我在 ComponentDidMount
  • 为什么我无法解开根节点并反序列化对象数组?

    为什么我无法通过展开根节点来反序列化对象数组 import java io IOException import java util Arrays import java util List import org codehaus jack
  • React JS“this”没有按预期工作

    我有下面的代码 save function var this this console log this refs itemText this setState isEditing false function console log In
  • Backbone.js 应用程序可以逐步增强并可供搜索引擎抓取吗?

    我需要为我的下一个项目实现一个 MVC JavaScript 框架 但它既是一个网站 又是一个 Web 应用程序 是否可以公开数据服务器端 然后解析 URL 以显示 JS 版本 我计划使用 Rails 作为服务器端代码 我写了一个关于这个主
  • Bootstrap 3 - 模态背景不会根据模态对话框的高度调整大小?

    我将一个表单放入模式中 并尝试在用户触发单选按钮时显示表单的一些隐藏字段 显示隐藏字段后 模态自动重新缩放的高度 但模态背景的高度不能用作模态对话框 我该如何解决它 div class modal fade div class modal
  • JavaScript 按名称获取当前作用域中的变量

    所以我有一个变量和该变量名称的字符串 function Factory string var foo bar console log foo is equal to this string 如果变量所在的对象是当前对象 如何从字符串文字中获
  • 加载 angularjs 路由后运行 javascript 代码

    我需要在 angularjs 加载路线后显示警报 显示警报的代码位于 angularjs 异步加载的视图中 视图加载后 我希望它能够运行 但它没有 我知道我可以广播并告诉它稍后运行等 但我需要一个更通用的解决方案 假设您正在谈论基于以下内容
  • 自动更改 Twitter Bootstrap 选项卡

    我希望 Twitter Bootstrap 选项卡按时间顺序更改 我使用它们有点像旋转木马 我希望选项卡每 10 秒切换到下一个选项卡 这是一个例子 http library buffalo edu http library buffalo
  • python 函数返回 javascript date.getTime()

    我正在尝试创建一个简单的 python 函数 它将返回与 javascript 相同的值new Date getTime 方法 如所写here http www w3schools com js js dates asp javascrip
  • 使用 Three.js 中的设备方向控件进行对象旋转

    我正在迈出使用 JavaScript 进行编码并使用 Three js 的第一步 我正在尝试 Threejs org 的这个例子 http trijs org examples misc controls deviceorientation

随机推荐

  • 当 I/O 对象已经有执行器时,为什么还需要 `net::dispatch`?

    我正在从这个例子中学习 Boost Beast 和 Boost Asiolibs beast example http server async ssl http server async ssl cpp 1 77 0 据我所知 I O 对
  • Spring简单地渲染一个html页面

    问题 使用 Spring 4 我在访问网页时收到此消息 Whitelabel Error Page This application has no explicit mapping for error so you are seeing t
  • Java中的executeUpdate方法是线程安全的吗

    我有多个线程尝试更新 MySQL 数据库 使用executeUpdate方法是线程安全的吗 不 它的使用不是线程安全的 事实上 如果某个其他线程使用了一条语句 然后另一个线程调用了executeUpdate 那么另一个线程的ResultSe
  • 如何在 Android 设备上访问用户的日历?

    我正在编写简单的 Android 应用程序来过滤用户日历中的一些事件 问题是 访问它的最佳方式是什么 我想到的一种选择是通过 Google Calendar Data API 我必须对用户进行身份验证并与我的应用程序中的日历同步 有没有办法
  • 使用 PHP 显示 SQL 数据时创建类别标题

    我有一个网站菜单 我正在从 mySQL 数据库中提取所有信息 我正在尝试找到一种方法将食物按标题分类 它们会像这样排序 开胃菜 结果显示在这里 Salads 结果显示在这里 等等几个不同的类别 这是我的选择语句 sql SELECT ite
  • 为什么我在 Python 解释器中收到语法错误?

    当我从 py 文件中尝试时 此代码可以工作 但在命令行解释器和空闲中失败 gt gt gt try fsock open bla except IOError print Caught print continue File
  • 找不到虚拟机选项文件(Pycharm 社区 5.03)

    每当我尝试启动 Pycharm 时 我都会收到消息 找不到虚拟机选项文件 由于这个原因 Pycharm 无法工作 我想你说的是下载后的第一次启动 那么重要的是你要跑pycharm sh来自bin文件夹 vm 选项文件也位于此处 并且脚本中的
  • jQuery:如何独立获取xml系统?

    Suppose xmlNode是一个XML DOM节点 如何独立获取它的XML系统呢 对于 IE 来说是xmlNode xml 对于网景来说 它是new XMLSerializer serializeToString xmlNode 在 j
  • Android Room - 使用 LIKE 选择查询

    我正在尝试进行查询以搜索名称包含文本的所有对象 Query SELECT FROM hamster WHERE name LIKE arg0 fun loadHamsters search String Flowable
  • 如何读取/写入超过 2 GB 大小的文件?

    所以 我没有一个想法来解决这种情况 我有一个函数可以通过替换我想要的值来修补文件 但我试图修补的文件大约是 4 5GB 这是函数 private static readonly byte PatchFind 0x74 0x72 0x79 p
  • Python:更改嵌套列表的值

    因此 我使用嵌套列表来存储一些数据 但在更改其中一个子列表的特定值时遇到了问题 if attributes 3 W self board 3 3 W 数字是我用来测试的占位符 board 是一个类变量 创建如下 我正在尝试创建用户指定的网格
  • 标点符号后的第一个字母大写

    比如我有这样一句话 hello my name is Jess what is your name 我想把它改成 Hello My name is Jess What is your name 我想出了这段代码 但在将所有内容重新连接在一起
  • 行驶距离区域

    有没有办法通过 Google Maps API 确定给定中心点的给定驾驶时间内的边界多边形 如果做不到这一点 有没有一种方法可以计算驾驶时间函数的倒数 也就是说 不是 从 A 点到 B 点需要多少分钟 而是询问 我会走多远 在一定的分钟内从
  • 将以 2 为基数的二进制数字字符串转换为 int

    我只是想将一个以 2 为基数的二进制数字字符串转换为 int 如下所示 gt gt gt 11111111 fromBinaryToInt 255 有没有办法在Python中做到这一点 您使用内置的int 函数 并将输入数字的基数传递给它
  • Eclipse 崩溃“java 已启动但返回退出代码 = -805306369”

    我知道有一个相同的帖子here但是所提出的解决方案都没有改变任何东西 而且它们已经很老了 与 Java6 相关的问题 并且似乎指的是与 Eclipse 相关的错误 我的问题是当我在开发时面向 RCP 和 RAP 开发人员的 Eclipse
  • 如何使用正则表达式只替换括号内的内容?

    如何使用正则表达式只替换括号内的内容 String This is my string 123 我想用 456 代替 123 Desired String This is my string 456 我的尝试 regex re sub re
  • 从 PowerShell 的列表中选择一个项目

    我正在使用 PowerShell 进行 api 调用 我得到 3 个输出作为调用结果 ID 1 Name Abc Location London 我想将 ID 传递给一个新变量 我怎样才能在powershell中实现这一点 谢谢 您可以使用
  • 使用 SwiftUI ForEach 从 NSOrderedSet 获取字符串值

    Using 这个问题 答案我可以使用 ForEach 来使用从 CoreData 中的一对多关系创建的 NSOrderedSet 但是我似乎无法访问存储在 Core Data 实体中的字符串属性 我有两个 CoreData 实体 客户端和会
  • Swift 中根据属性删除数组对象

    我有一个像这样的自定义数组 我想删除学生 ID 为 4 的元素 var strNames Student id 1 name ghj Student id 4 name def Student id 9 name bkl 以经典的方式 我确
  • JSON 数据 - 已解析或“评估”

    从安全角度来看 我认为简单地对传入的 JSON 数据进行 评估 是一个严重错误 如果你得到像下面这样的数据 你就会遇到一些问题 someData function alert i m in ur code hackin ur page 我想