mfc postmessage 예제

그러나 공격자가 http://www.examplesender.com/ XSS 버그를 발견하면 어떻게해야합니까? 즉, XSS도 http://www.examplereceiver.com/ 수 있습니다. 이전 예제 코드로 이 것을 시도했지만 유니 코드 / ANSI 번역, 타이머 콜백 호출 등과 같은 다양한 문제가 있어이 메서드가 고려하지 않고 사소한 응용 프로그램을 제외한 모든 응용 프로그램을 중단 할 가능성이 큽니다. 그래서 그것을 시도 하, 하지만 실제 코드에서 그것을 하지 마십시오 🙂 세 번째 함정은 응용 프로그램이 HTML/스크립트로 처리하는 방식으로 메시지를 사용하여 DOM XSS입니다. 원래 wParam은 16 비트였고 lParam은 32 비트였지만 Win32에서는 모두 32 비트입니다. 모든 메시지가 이러한 매개 변수를 사용하는 것은 아니며 각 메시지는 매개 변수를 다르게 사용합니다. 예를 들어 WM_CLOSE 메시지도 사용하지 않으므로 둘 다 무시해야 합니다. WM_COMMAND 메시지는 둘 다 를 사용하며, wParam은 두 값을 포함하고, HIWORD(wParam)는 알림 메시지(해당하는 경우)이고 LOWORD(wParam)는 메시지를 보낸 컨트롤 또는 메뉴 ID이다. lParam은 메시지가 컨트롤에서 온 것이 아닌 경우 메시지 또는 NULL을 보낸 컨트롤에 대한 HWND(창 핸들)입니다. «www.examplesender.com»의 메시지뿐만 아니라 «wwwaexamplesender.com», «wwwbexamplesender.com» 등도 허용할 것입니다. 이제 응용 프로그램에는 모든 메시지를 처리하는 큰 사례 문이 있는 함수가 있습니다. 예를 들어 DOM XSS는 포스트메시지와 는 관련이 없지만 많은 포스트메시지 구현에 존재하는 것입니다. 그 이유 중 하나는 수신 응용 프로그램이 http://www.examplesender.com/ 메시지만 수신하기 때문에 데이터가 올바르게 포맷되기를 기대하기 때문입니다.

중요: GetMessage()는 오류가 발생하면 -1을 반환합니다. 당신이 이것을 기억해야, 또는 그것은 어떤 시점에서 당신을 잡을 것입니다 … GetMessage()는 BOOL을 반환하는 것으로 정의되어 있지만 BOOL이 UINT(서명되지 않은 int)로 정의되므로 TRUE 또는 FALSE 이외의 값을 반환할 수 있습니다. 다음은 작동하는 것처럼 보일 수 있지만 특정 조건을 올바르게 처리하지 않는 코드의 예입니다. 모든 클래스의 모든 멤버 함수, 심지어 비 MFC 클래스, CMainFrame의 멤버 함수를 호출 하는 AfxGetMainWnd(를 사용 하 여 CMainFrame에 보낸 메시지 또는 포스트 메시지 형식의 메시지를 보낼 수 있습니다.) 코드 샘플은 3.1에 표시됩니다. CMainFrame의 구성원이 보낸 전송 메시지 또는 포스트 메시지 형식의 메시지만 클래스 CTest_SDIView에서 수신할 수 있습니다. 다른 모든 클래스에서 보낸 SendMessage 또는 PostMessage 형식의 메시지는 클래스 CTest_SDIView의 구성원이 받을 수 없습니다. MFC 클래스가 아닌 다른 모든 클래스의 경우 Microsoft MSDN 문서 IDQ108587에 설명된 자체 구현 함수 GetView를 사용합니다. 코드 샘플은 4.1 또는 4.2에 표시됩니다.

5. 클래스 CTest_SDIApp (기본 : CWinApp)의 구성원은 클래스 CMainFrame (기본 : CFrameWnd)의 구성원을 호출이 경우와 유사한 프로젝트 또는 3.1의 소스 코드를 분석합니다. . . CTest_SDIDoc 클래스의 구성원이 사용자 정의 메시지(SendMessage, PostMessage 또는 PostThreadMessage)를 수신할 수 없습니다. 클래스 CTest_SDIView의 구성원이 클래스 CTest_SDIDoc의 멤버를 호출하려는 경우 응용 프로그램 마법사에서 만든 코드에서 지원하는 포인터를 사용합니다. MFC 클래스가 아닌 다른 모든 클래스의 경우 Microsoft MSDN 문서 IDQ108587에 설명된 자체 구현 함수 GetDoc을 사용합니다. 코드 샘플은 1.1 또는 1.2로 표시됩니다.

. SendMessage와 PostMessage의 차이점을 이해하려면 아래 표를 참조하십시오. HIWORD() 및 LOWORD()는 32비트 값(0xFFFF000)과 낮은 단어(0x0000FFFFFF)의 두 개의 높은 바이트(High Word)를 각각 골라내는 창에 의해 정의된 매크로입니다. Win32에서 Word는 16비트 값으로 DWORD(또는 더블 워드)를 32비트 값으로 만듭니다. «우리의 응용 프로그램은 postMessage를 사용하지 않으므로 이러한 문제가 우리에게 적용되지 않습니다»라고 생각할 수 있습니다.