2013-04-17 6 views
0

일부 경우 사용자의 파일 시스템을 검색해야하는 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은 옵션이지만 실제로는 이것이 내 마지막 수단이라는 것을 알고 있습니다.

+0

특정 도메인에서만 작동하도록 플러그인을 제한 할 수 없습니까? –

+0

할 수는 있지만 크로스 사이트 스크립팅 공격에 여전히 취약합니다. 최상의 (그리고 가장 쉬운) 솔루션은 사용자에게 알려주는 것입니다. – Wavey

답변

0

아니요, 크로스 플랫폼 방식으로 안전하게 수행 할 수있는 방법은 거의 없을 것입니다. 아마 각 플랫폼에서 시스템 확인 대화 상자가 나타납니다.

(주 스레드를 차단하는 것은 대부분의 브라우저에서 종료를 플러그인에 대한 근거가 있기 때문에 당신은 아마, 별도의 스레드에서 그것을 할 필요가있을 것이다)

내가 당신에게 줄 수있는 예를 들어 가장 가까운 것은 코드 I는 파일/폴더 열기 대화 상자, which you can find in a gist을 수행 할 때 사용합니다.

+0

Mac 및 Windows (그리고 가장 큰 사용자를 대상으로합니다.)에 대한 좋은 생각이지만, 리눅스에서 그러한 메시지를 보여주는 "표준"방법은 없다고 생각합니다. Xt/Motif, GTK + 또는 Qt를 확인해야합니다. – Wavey