线程本地存储可以被伪造/黑客攻击吗?

2023-12-26

我发现自己有点进退两难。

我有一个大型应用程序,其中有 Google 的 V8 javascript 引擎。一些调用是在 UI 线程上对 V8 引擎进行的。为了像大家建议的那样对用户友好,一些长时间操作在单独的线程上运行,而不挂起 UI 线程。然而,这些长时间运行的操作也会调用 V8 JavaScript 引擎。所以多个线程调用V8。

事实是,V8 似乎使用线程本地存储。这似乎使我的应用程序随机爆炸。这绝对属于“到目前为止这怎么可能行得通?”的类别。错误。

在不显着重新架构我的应用程序的情况下,我提出了一个丑陋、丑陋、可怕的超级黑客:我能让 V8 认为它在不同的线程上运行吗?

换句话说,当我第一次调用 V8 时,我会记下该线程。那么,对于对 V8 的所有其他调用,我以某种方式欺骗线程,以便线程本地存储/任何其他线程相关的工作。

能做到吗?它会起作用吗?我是不是太蠢了,竟然考虑这么卑鄙的黑客?


你不应该欺骗任何东西。相反,您应该告诉 V8 您正在尝试从不同的线程使用它。

在 3.2 版本之前的 V8 中,唯一的方法是使用v8::Locker在从不同线程使用 V8 之前。它保证了两者独家的访问 V8 并初始化存储在 TLS 中的内部结构。欲了解更多详情,请参阅http://code.google.com/p/v8/source/browse/branches/3.1/include/v8.h#3189 http://code.google.com/p/v8/source/browse/branches/3.1/include/v8.h#3189

从V8 3.2版本开始有这样的概念isolate。如果您没有显式创建隔离,V8 会隐式创建默认隔离以保持 API 兼容。在这种情况下你仍然可以简单地使用v8::Locker与旧版本一样。如果您显式创建隔离,那么除了获取独占访问权限之外v8::Locker您还必须在线程中显式输入和退出它们v8::Isolate::Enter/v8::Isolate::Exit方法或v8::Isolate::Scope。欲了解更多详情,请参阅http://code.google.com/p/v8/source/browse/trunk/include/v8.h#3510 http://code.google.com/p/v8/source/browse/trunk/include/v8.h#3510

在大多数情况下有效的简单答案是:使用v8::Locker在从不同线程使用 V8 之前。

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

线程本地存储可以被伪造/黑客攻击吗? 的相关文章

随机推荐

  • 为什么用gcc和std=c99编译时找不到getaddrinfo

    我有以下我试图编译的代码 当我尝试使用 std c99 时 它失败并出现有关 struct addrinfo 类型的隐式声明 和 函数 getaddrinfo 的隐式声明 的警告 它适用于 std gnu99 include
  • 熊猫绘图,正值一种颜色,负值另一种颜色

    我有一个 pandas 数据框 在其中绘制 12 列中的两列 一列作为 x 轴 一列作为 y 轴 x 轴只是一个时间序列 y 轴的值是大约 5000 到 5000 之间的随机整数 有没有办法只使用这两列来制作散点图 其中 y 的正值是某种颜
  • 删除虚假逗号

    一位白痴客户正在生成 csv 文件 但其中一个字段 描述字段 有时有多余的逗号 是否有一个整洁的正则表达式来查找这些不良记录并用其他内容替换多余的逗号 SED 命令行就可以了 Example A B C This is a descript
  • 如何在 puppeteer 中获取所有 xhr 调用?

    我在用puppeteer加载网页 const browser await puppeteer launch headless true const page await browser newPage await page setReque
  • Jpa 事务 javax.persistence.RollbackException:事务标记为 rollbackOnly

    我有一个应用程序通过 jpa 对各种数据库表进行大量写入 这些写入之一可能会导致乐观锁异常 如果抛出一个 也没什么大不了的 我希望提交事务的其余部分 我通过以下方式查看了 Spring 事务的无回滚功能
  • Redis 中高效的索引类型操作

    我正在尝试在 Redis 中创建一组索引 用于执行 AND 操作 像这样 inx 头发颜色 金发 set key1 key2 key3 inx 眼睛颜色 蓝色 设置 key1 key2 我可以使用sinter找到所有金发蓝眼睛的钥匙 我有这
  • RSA_private_加密总是失败

    我正在学习在我的程序中使用 OpenSSL 库 在代码中 我生成一个私钥 并立即使用该密钥加密消息 但总是失败 请帮助我 private key RSA generate key RSA KEY LENGTH RSA 3 NULL NULL
  • 如何更改 SwitchCompat 的轨道颜色

    我尝试使用以下链接来更改 SwitchCompat 的颜色 如何更改 SwitchCompat 的颜色 https stackoverflow com questions 26714864 how to change the color o
  • 如果不存在图像则显示默认图像

    我在 Centos 5 上运行 Apache 我想实现重写规则 当用户尝试访问文件夹中的图像时 var site com html image products 该规则应该检查图像是否存在 如果不存在 我想要 var site com ht
  • 如何为 WinForms 应用程序创建 MSIX 包?

    我正在尝试转移到 MSIX 来安装我们的应用程序 该应用程序目前通过 ClickOnce 安装部署给我们的客户 如果有更新 则需要在启动时进行更新 它是一个 Net Framework 4 7 2 WinForms 应用程序 我有点不知道如
  • 如何使用 Kaminari (或 will_paginate)gem 对数组的哈希值进行分页

    我现在已经设法找到解决方法 现在 索引操作在调用页面之前有一个 订单 子句 然后按日期对餐食进行排序和分组 接下来是 hackey 位 total pages 和 pages 在视图中用于提供分页链接 因为内置帮助器不适用于 meals 返
  • 拥有“(a -> b) -> b”是否等同于拥有“a”?

    在纯函数式语言中 您可以对值执行的唯一操作就是对其应用函数 换句话说 如果你想用 type 的值做任何有趣的事情a你需要一个具有类型的函数 例如 f a gt b然后应用它 如果有人递给你 flip apply a与类型 a gt b gt
  • 使用鼠标从视频上的矩形设置 ROI

    我有视频 当程序运行时 视频的第一帧被视为图像 并且允许用户在图像上绘制矩形 绘制矩形后 用户必须右键单击图像来确认矩形 当鼠标右键单击时 图像消失 视频开始播放 并在其上绘制矩形 我能够完美地绘制矩形 但无法将该矩形设置为 ROI 我想要
  • 如何使用 boto3 将文件上传到 Amazon Glacier Deep Archive

    我已成功将文件上传到 Glacier 但我想直接上传到 Deep Archive 我搜索了文档 但没有发现如何设置存储类别DEEP ARCHIVE直接地 您可以使用put object 其中有一个StorageClass参数 或者你可以使用
  • 为什么iOS SDK和iOS操作系统版本会互相影响?或者:什么是 iOS SDK?

    EDIT 下面 H2CO3 的答案让我几乎高兴 但事实并非如此 解释一件事 为什么在构建时会出现运行时异常 针对 SDK6 的应用程序 UIPageViewController 需要一个子控制器 在将其添加到父控制器之前 但在构建时则不然
  • 在 Java 中组合数组

    在下面的代码中 我需要读取五个学生姓名的列表以及每个学生五个测验的分数 这会将姓名加载到 String 类型的 ArrayList 中 并将测验分数加载到 Integer 类型的 ArrayList 中 我已经通过两个不同的 ArrayLi
  • 评价我非法状态例外

    正在开发给我评分功能 在这方面遇到问题 我已经在名为 RateUss 的片段中编写了 Rate me 函数代码 但问题是 我没有启动该部分代码的确切位置 因此用户在导航视图中单击 速率 按钮 因此会出现此速率对话框 import andro
  • 优化 Google 脚本以隐藏列

    这两个脚本非常慢 我处理的数据集大约有 32 列 x 1000 行 增长速度相当快 我读过甚至使用过像数组一样处理数据的代码 这样你就可以只调用一次谷歌服务 但我不确定这如何帮助我解决这种情况 我需要根据使用谷歌表格的人隐藏某些列 这是实际
  • 带有两个行终止符的批量插入

    我正在尝试导入一个文本文件 因此结果只是一列的单独行中的单词 例如一段文字 你好妈妈 我们再见面 应该给出5条记录 Hello Mom we meet again 我尝试用以下方法来完成此任务BULK INSERT with ROWTERM
  • 线程本地存储可以被伪造/黑客攻击吗?

    我发现自己有点进退两难 我有一个大型应用程序 其中有 Google 的 V8 javascript 引擎 一些调用是在 UI 线程上对 V8 引擎进行的 为了像大家建议的那样对用户友好 一些长时间操作在单独的线程上运行 而不挂起 UI 线程