본문 바로가기
개발, IT

Internet Explorer 신뢰사이트 등록

by Nabi™ 2008. 8. 12.

Explorer 6.x버전 대에선 상관이 없었던 보안문제가 7.x 버전으로 와서는 많이 강화되어 애를 먹이고 있다 -_-

DLL을 작성하여 해당 DLL을 regsvr32를 통해 분명 등록을 하였건만
웹페이지에 다시 접속하면 "ActiveX 컨트롤 실행" 이라는 노란바가 뜬다.

분명 예전에는 됐었던 것인데 요새들어 안된다.

하루종일 삽질끝에 7.x버전에 와서는 보안강화로 이렇게 수동으로 DLL을 등록할 경우는
한번더 ActiveX 컨트롤 실행 이라는 문구가 나온뒤 [실행] 을 해줘야 정상적으로 동작한다는 것을 알았다.

이것을 통과하는 편법을 수많은 웹서핑으로 결국 찾았다.

첫번째 방법은 레지스트리에 등록하는 방법이다.(별로 권장은 안한다.)

HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings\ZoneMap

예를들면
"http://*.test.com" 이라면  "test.com"으로 키를 만들고 http라는 DWORD값을 만든후 "2"값을 설정하면 된다.

두번째 방법으로는 해당 Application에서 직접하는방법

bool CLauncher::LSetTrustZone(LPTSTR lpszDomain)
{
    USES_CONVERSION;
    HRESULT hr;
    IInternetSecurityManager* pSM;
    IInternetZoneManager* pZM;

    DWORD dwEnum, dwZoneCount, dwZone;

    ZONEATTRIBUTES za;
    int nIndex = 2;
    bool bResult;

    hr = CoCreateInstance(CLSID_InternetSecurityManager, NULL, CLSCTX_ALL, IID_IInternetSecurityManager, (void**)&pSM);

    if(FAILED(hr))
    {
        return false;
    }

    hr = CoCreateInstance(CLSID_InternetZoneManager, NULL, CLSCTX_ALL, IID_IInternetZoneManager, (void**)&pZM);

    if(FAILED(hr))
    {
       return false;
    }

    dwEnum = 0;

    pZM->CreateZoneEnumerator(&dwEnum, &dwZoneCount, 0);

     // nIndex가 2일 경우가 신뢰할 수 있는 사이트
    pZM->GetZoneAt(dwEnum, nIndex, &dwZone);
    pZM->GetZoneAttributes(dwZone, &za);

    // 신뢰할 수 있는 사이트는 기본적으로 https를 요구하기 때문에 이 속성을 제거
    if(za.dwFlags & ZAFLAGS_REQUIRE_VERIFICATION)
    {
       za.dwFlags &=~ZAFLAGS_REQUIRE_VERIFICATION;
    }

    // 현재보안 설정이 낮음이 아닐경우 낮음으로 설정    
    if(za.dwTemplateCurrentLevel != 0x10000)
    {
       za.dwTemplateCurrentLevel = 0x10000;
       za.dwTemplateMinLevel = 0x10000;
    }

    pZM->SetZoneAttributes(dwZone, &za);

    // 해당도메인을 등록 (형변환은 USES_CONVERSION을 이용)
    hr = pSM->SetZoneMapping(nIndex, T2OLE(lpszDomain), SZM_CREATE);

    if(FAILED(hr))
    {
       // 실패 오류에 대한 메시지 처리 등등
       bResult = false;       
    }
    else
    {
       bResult = true;
    }

    if(dwEnum != 0)
        pZM->DestroyZoneEnumerator(dwEnum);

    pSM->Release();
    pZM->Release();

    return bResult;
}
좋은정보가 되셨다면 아래 한번 클릭해주세요^^



댓글