일부 경우 사용자의 파일 시스템을 검색해야하는 FireBreath NPAPI 플러그인을 개발 중입니다.FireBreath : 사용자에게 확인 대화 상자를 안전하게 표시하는 방법?
사용자에게 알리고 플러그인의 악의적 인 사용을 피하기 위해 사용자에게 작업을 수락하거나 거부 할 수있는 확인 대화 상자를 표시하려고합니다.
지금까지, 나는 고전적인 자바 스크립트 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>();
}
악의적 인 사용자는 항상 true 반환하는 window.confirm
기능을 오버로드 할 수있다. 함수가 실제로 브라우저에 기본 있었다면 내가 생각 한 가지 해결책은 확인했다 :
// 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()
과부하 수 있습니다. (따라서이 솔루션 : Detect if function is native to browser은 실제로 안전하지 않습니다.)
그러므로 어떤 방식 으로든 해킹 할 수없는 확인 대화 상자를 표시하는 크로스 플랫폼 (OSX, Linux 및 Windows) 방법을 알고 있습니까? 또는 FireBreath를 통해 window.confirm
의 고유 기능에 직접 액세스 할 수 있습니까?
QT 또는 wxWidgets은 옵션이지만 실제로는 이것이 내 마지막 수단이라는 것을 알고 있습니다.
특정 도메인에서만 작동하도록 플러그인을 제한 할 수 없습니까? –
할 수는 있지만 크로스 사이트 스크립팅 공격에 여전히 취약합니다. 최상의 (그리고 가장 쉬운) 솔루션은 사용자에게 알려주는 것입니다. – Wavey