FireBreath:如何安全地向用户显示确认对话框
FireBreath: How to securely display a confirmation dialog to the user?
我正在开发一个FireBreath NPAPI插件,在某些情况下,它必须搜索用户的文件系统。
通知用户并避免恶意使用插件,我想向用户显示一个确认对话框,这将允许他接受或拒绝任务。
到目前为止,我成功地显示了经典的Javascript window.confirm
对话框,但它远非安全:
bool MyPlugin::confirm( std::string msg ) {
FB::DOM::WindowPtr window = m_host->getDOMWindow();
FB::JSObjectPtr obj = window->getProperty<FB::JSObjectPtr>("window");
return obj->Invoke("confirm", FB::variant_list_of( msg )).convert_cast<bool>();
}
恶意用户可以重载window.confirm
函数以始终返回true。我想到的一个解决方案是检查该函数是否确实是浏览器原生的:
// Make sure the function is valid native function and not a hack
FB::variant f = obj->GetProperty("confirm");
FB::JSObjectPtr fPtr = f.convert_cast<FB::JSObjectPtr>();
std::string fType = fPtr->Invoke("toString", FB::variant_list_of( msg )).convert_cast<std::string>();
// Look for [native code] in fType
但是恶意用户可以再次重载window.confirm.toString
和/或Function.prototype.toString()
以伪造响应。(所以这个解决方案:检测如果函数是本地的浏览器是不安全的)
所以我想问你,你知道任何跨平台(OSX, Linux和Windows)的方式来显示确认对话框,不能以任何方式被黑客入侵吗?或是否可以通过FireBreath直接访问window.confirm
的本机功能?
我知道QT或wxWidgets是一个选择,但这真的是我最后的手段。
不,几乎没有任何方法可以安全地以跨平台的方式做到这一点。我可能会在每个平台上弹出一个系统确认对话框。
(你可能需要在一个单独的线程上做,因为阻塞主线程在大多数浏览器中是插件终止的理由)
我能给你的最接近的例子是我用来打开文件/文件夹对话框的代码,你可以在gist中找到。
相关文章:
- 显示基于用户输入的整数的字符
- 如何存储用户输入的所有数据,然后在他们想要查看所有数据时显示它们
- 我要求用户输入大小和数组,但是当我打印矢量时,它仅显示'0'作为输出
- 在数组中显示第一个元素用户输入
- 如何向用户显示特定错误,要求他/她使用循环再次提供输入?
- 运算符重载以显示用户定义的数据类型
- 错误:调用'strcmp'没有匹配函数(尝试设置显示用户信息功能)
- C++ .我正在尝试通过使用开关内的数组来获取用户输入,但是当我运行代码时,它显示分段错误?
- boost::p rogram_options - 验证失败时,显示用户在错误消息中输入的值
- 程序,它接受用户输入的字符并按出现的降序显示它们
- 使用开关大小写语句抽取随机扑克牌等级和花色以显示用户
- 如何存储多个用户输入,然后以C++显示它们
- 在单击QT中单击图像时,尝试立即显示用户编辑操作的结果
- C 程序总和从用户和显示平均值
- 如何在背景中运行vtkrenderwindow而不向用户显示
- 如何以某种格式为用户显示对象向量
- 有没有办法选择通过标准的OPENFILE对话框向用户显示哪些文件
- 有什么方法可以制作一个程序,随机选择10-20个字符串并用C++向用户显示
- 在首次向用户显示表单之前,应用程序不会启动
- FireBreath:如何安全地向用户显示确认对话框