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

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(使用前将#替换为@)

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

  • Clang 3.1 + libc++ 编译错误

    我已经构建并安装了 在前缀下 alt LLVM Clang trunk 2012 年 4 月 23 日 在 Ubuntu 12 04 上成功使用 GCC 4 6 然后使用此 Clang 构建的 libc 当我想使用它时我必须同时提供 lc
  • 堆栈溢出:堆栈空间中重复的临时分配?

    struct MemBlock char mem 1024 MemBlock operator const MemBlock b const return MemBlock global void foo int step 0 if ste
  • C++ OpenSSL 导出私钥

    到目前为止 我成功地使用了 SSL 但遇到了令人困惑的障碍 我生成了 RSA 密钥对 之前使用 PEM write bio RSAPrivateKey 来导出它们 然而 手册页声称该格式已经过时 实际上它看起来与通常的 PEM 格式不同 相
  • 使用 Bearer Token 访问 IdentityServer4 上受保护的 API

    我试图寻找此问题的解决方案 但尚未找到正确的搜索文本 我的问题是 如何配置我的 IdentityServer 以便它也可以接受 授权带有 BearerTokens 的 Api 请求 我已经配置并运行了 IdentityServer4 我还在
  • 无锁算法真的比全锁算法性能更好吗?

    陈雷蒙德 http blogs msdn com b oldnewthing 一直在做一个huge http blogs msdn com b oldnewthing archive 2011 04 15 10154245 aspx ser
  • 转发声明和包含

    在使用库时 无论是我自己的还是外部的 都有很多带有前向声明的类 根据情况 相同的类也包含在内 当我使用某个类时 我需要知道该类使用的某些对象是前向声明的还是 include d 原因是我想知道是否应该包含两个标题还是只包含一个标题 现在我知
  • 控件的命名约定[重复]

    这个问题在这里已经有答案了 Microsoft 在其网站上提供了命名指南 here http msdn microsoft com en us library xzf533w0 VS 71 aspx 我还有 框架设计指南 一书 我找不到有关
  • 垃圾收集器是否在单独的进程中运行?

    垃圾收集器是否在单独的进程中启动 例如 如果我们尝试测量某段代码所花费的进程时间 并且在此期间垃圾收集器开始收集 它会在新进程上启动还是在同一进程中启动 它的工作原理如下吗 Code Process 1 gt Garbage Collect
  • 这些作业之间是否存在顺序点?

    以下代码中的两个赋值之间是否存在序列点 f f x 1 1 x 2 不 没有 在这种情况下 标准确实是含糊不清的 如果你想确认这一点 gcc 有这个非常酷的选项 Wsequence point在这种情况下 它会警告您该操作可能未定义
  • 覆盖子类中的字段或属性

    我有一个抽象基类 我想声明一个字段或属性 该字段或属性在从该父类继承的每个类中具有不同的值 我想在基类中定义它 以便我可以在基类方法中引用它 例如覆盖 ToString 来表示 此对象的类型为 property field 我有三种方法可以
  • 向现有 TCP 和 UDP 代码添加 SSL 支持?

    这是我的问题 现在我有一个 Linux 服务器应用程序 使用 C gcc 编写 它与 Windows C 客户端应用程序 Visual Studio 9 Qt 4 5 进行通信 是什么very在不完全破坏现有协议的情况下向双方添加 SSL
  • 为什么编译时浮点计算可能不会得到与运行时计算相同的结果?

    In the speaker mentioned Compile time floating point calculations might not have the same results as runtime calculation
  • 通过指向其基址的指针删除 POD 对象是否安全?

    事实上 我正在考虑那些微不足道的可破坏物体 而不仅仅是POD http en wikipedia org wiki Plain old data structure 我不确定 POD 是否可以有基类 当我读到这个解释时is triviall
  • cmake 将标头包含到每个源文件中

    其实我有一个简单的问题 但找不到答案 也许你可以给我指一个副本 所以 问题是 是否可以告诉 cmake 指示编译器在每个源文件的开头自动包含一些头文件 这样就不需要放置 include foo h 了 谢谢 CMake 没有针对此特定用例的
  • 如何在Xamarin中删除ViewTreeObserver?

    假设我需要获取并设置视图的高度 在 Android 中 众所周知 只有在绘制视图之后才能获取视图高度 如果您使用 Java 有很多答案 最著名的方法之一如下 取自这个答案 https stackoverflow com a 24035591
  • C# 成员变量继承

    我对 C 有点陌生 但我在编程方面有相当广泛的背景 我想做的事情 为游戏定义不同的 MapTiles 我已经像这样定义了 MapTile 基类 public class MapTile public Texture2D texture pu
  • 测试用例执行完成后,无论是否通过,如何将测试用例结果保存在变量中?

    我正在使用 NUNIT 在 Visual Studio 中使用 Selenium WebDriver 测试用例的代码是 我想在执行测试用例后立即在变量中记录测试用例通过或失败的情况 我怎样才能实现这一点 NUnit 假设您使用 NUnit
  • Windows 目录永远不会包含临时文件的非 ASCII 字符?

    在 Windows 上使用 MinGW 7 3 0 由于 Windows 限制 Hunspell 无法从包含非 ASCII 字符的位置加载字典文件 我已经尝试了所有方法 1 现在我将文件复制到没有 ASCII 字符的路径 然后再将其交给 H
  • 如何将服务器服务连接到 Dynamics Online

    我正在修改内部管理应用程序以连接到我们的在线托管 Dynamics 2016 实例 根据一些在线教程 我一直在使用OrganizationServiceProxy out of Microsoft Xrm Sdk Client来自 SDK
  • C# - OutOfMemoryException 在 JSON 文件上保存列表

    我正在尝试保存压力图的流数据 基本上我有一个压力矩阵定义为 double pressureMatrix new double e Data GetLength 0 e Data GetLength 1 基本上 我得到了其中之一pressur

随机推荐

  • 为什么用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 线程