Javascript FireBreath:如何安全地向用户显示确认对话框?

Javascript FireBreath:如何安全地向用户显示确认对话框?,javascript,c++,browser,npapi,firebreath,Javascript,C++,Browser,Npapi,Firebreath,我正在开发一个FireBreath NPAPI插件,在某些情况下,它必须搜索用户的文件系统 为了通知用户并避免恶意使用插件,我想向用户显示一个确认对话框,允许用户接受或拒绝任务 到目前为止,我成功地显示了经典的Javascript窗口。确认对话框,但它并不安全: bool MyPlugin::confirm( std::string msg ) { FB::DOM::WindowPtr window = m_host->getDOMWindow(); FB::JSObjec

我正在开发一个FireBreath NPAPI插件,在某些情况下,它必须搜索用户的文件系统

为了通知用户并避免恶意使用插件,我想向用户显示一个确认对话框,允许用户接受或拒绝任务

到目前为止,我成功地显示了经典的Javascript
窗口。确认对话框,但它并不安全:

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>();
}
但恶意用户可能会再次重载
窗口.confirm.toString
和/或
函数.prototype.toString()
,以伪造响应。(因此,该解决方案:并非真正安全)

因此,我想问你们,你们知道任何跨平台(OSX、Linux和Windows)的方式来显示确认对话框,它不能被任何方式入侵吗是否可以通过FireBreath直接访问
窗口的本机功能。确认


我知道QT或wxWidgets是一种选择,但这实际上是我最后的选择

不,要以跨平台的方式安全地实现这一点,几乎没有任何方法。我可能会在每个平台上弹出一个系统确认对话框

(您可能需要在单独的线程上执行此操作,因为在大多数浏览器中,阻塞主线程是插件终止的理由)


最接近我能给你的例子是我用来打开文件/文件夹对话框的代码。

你不能限制插件只在特定域上工作吗?我可以,但它仍然容易受到跨站点脚本攻击。最好的(也是最简单的)解决方案是让用户知道。对于Mac和Windows来说,这绝对是个好主意(它覆盖了最多的用户),但是我认为在linux上没有“标准”的方式来显示这样的消息。我需要检查Xt/Motif、GTK+或Qt。。。
// 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