익스플로러 보안설정 변경

-- VC++ 2009. 5. 14. 18:03
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
인터넷 익스플로러의 보안 설정 변경 관련.
 
1. 신뢰할수 있는 사이트 추가.
2. 구역별 보안등급 변경.
3. 임의의 선택한 보안 수준 변경.
 
 
1. 신뢰할수 있는 사이트 추가. &  2. 구역별 보안등급 변경.
 
 HRESULT hr;
 IInternetSecurityManager * pSecurityMgr;
 IInternetZoneManager * pZoneMgr;
 DWORD dwEnum, dwZoneCount;
 DWORD dwZone;
 ZONEATTRIBUTES zoneAttr;
 int nLevel = 2;
 
 CoInitialize(NULL);

 // 먼저 IinternetSecurityManager 인터페이스를 초기화한다.
 hr = CoCreateInstance(CLSID_InternetSecurityManager, NULL, CLSCTX_ALL, IID_IInternetSecurityManager, (void**)&pSecurityMgr);
 if (hr != S_OK)
 {
       CoUninitialize();
       return;
 }


 // 다음으로 IinternetZoneManager 인터페이스를 초기화한다.
 hr = CoCreateInstance(CLSID_InternetZoneManager, NULL, CLSCTX_ALL, IID_IInternetZoneManager, (void**)&pZoneMgr);
 if (hr != S_OK)
 {
       CoUninitialize();
       return;
 }
 dwEnum = 0;

 
 // Zone Enumerator를 초기화한다.
 pZoneMgr->CreateZoneEnumerator(&dwEnum, &dwZoneCount, 0);

 
 // 2번 존에 대한 정보를 얻는다. 2번 존이 신뢰할 수 있는 영역 존이다.
 pZoneMgr->GetZoneAt( dwEnum, nLevel, &dwZone);
 pZoneMgr->GetZoneAttributes(dwZone, &zoneAttr);

 
 // 지금 예제는 보통의 HTTP 사이트를 등록하는 것이기 때문에 HTTPS만을 등록해야 하는 제약 조건을 없앤다.
 if (zoneAttr.dwFlags &ZAFLAGS_REQUIRE_VERIFICATION)
 {
       // 서버 확인 부분을 뺀다.
       zoneAttr.dwFlags = (zoneAttr.dwFlags & ~(ZAFLAGS_REQUIRE_VERIFICATION));
 }

 
 // 현재 보안 설정이 낮음이 아니면 낮음으로 설정한다.
 if (zoneAttr.dwTemplateCurrentLevel != 0x10000)
 {
       zoneAttr.dwTemplateCurrentLevel = 0x10000;
       zoneAttr.dwTemplateMinLevel = 0x10000;
 }
 pZoneMgr->SetZoneAttributes(dwZone, &zoneAttr); 
 

 // 등록 사이트
 CString strDomain = "http://www.devpia.com";
 
 // 이 값을 유니코드로 변경한다.
 BSTR bDomain = strDomain.AllocSysString();
 

 // IInternetSecurity 인터페이스의 SetZoneMapping 함수를 이용해 등록한다.
 hr = pSecurityMgr->SetZoneMapping(nLevel, bDomain, SZM_CREATE);


 if (hr == E_ACCESSDENIED)  // 존 설정이 서버 확인을 필요로 하는 곳이면
 {
       ::MessageBox(NULL, "등록하려는 영역이 서버 확인이 필요한 것으로 설정되어 있습니다.", "영역 추가 에러", MB_OK);
 }
 else if (hr == ERROR_FILE_EXISTS) // 이미 다른 영역으로 등록된 것이면
 {
       ::MessageBox(NULL, "등록하려는 주소가 이미 다른 영역으로 설정되어 있습니다.", "영역 추가 에러", MB_OK);
 }
 

 ::SysFreeString(bDomain);
 

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

 pSecurityMgr->Release();
 pZoneMgr->Release();
 CoUninitialize();

 
--------------------------------------------------------------------------------------------------------------------
위의 코드는 한기용(Keeyong@wisenut.com)님의 코드를 그대로 인용 하였음.
  
1,2 의 내용만으로 거의 모든 문제가 해결되리라 생각된다.
그러나 몇몇 보안 관련 부분은 보안 등급을 최소로 해도 문제가 해결되지 않는 경우가 있다.
이 경우엔 직접 원하는 보안관련 설정을 원하는 수준으로 변경 해야만 한다.
대표적인 예가 "안전하지 않은 것으로 표시된 ActiveX 컨트롤 초기화 및 스크립트"이다.
때때로 사소한 ActiveX들이 필요한 경우가 있는데 이런것들을 매번 서명을 받기도 번거로운 일이다.
이러한 문제를 해결하기위해서 보안수준을 변경할 필요가 있다.
 
이 항목을 직접 변경하는 코드를 살펴보자.
  
 
3. 임의의 선택한 보안 수준 변경.

CRegKey reg;     // #include <Atlbase.h>

if(reg.Open(HKEY_LOCAL_MACHINE, "Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\Zones\\2") == ERROR_SUCCESS)
{
     reg.SetValue((DWORD)0, "1201");  // 0:허용  1:확인  3:사용안함
     reg.Close();
}


if(reg.Open(HKEY_CURRENT_USER, "Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\Zones\\2") == ERROR_SUCCESS)

{
     reg.SetValue((DWORD)0, "1201");  
     reg.Close();
}

 
-------------------------------------------------------------------------------------------------------------------- 
위의 예제는 [신뢰할수 있는 사이트>안전하지 않은 것으로 표시된 ActiveX 컨트롤 초기화 및 스크립트 => 사용] 으로 레지스트리를 직접 변경하는 코드이다.
 
그러나, 한기용(Keeyong@wisenut.com)님의 글에서는 레지스트리를 직접 편집하는것은 좋지 않은 방법이라고 설명하고 있다. 그 이유를 다음과 같이 설명하고 있다.
--------------------------------------------------------------------------------------------------------------------
그 이유는 다음 버전의 IE에서도 레지스트리의 이 항목들을 URL 보안 관련
정보를 저장하는데 사용한다는 보장이 없기 때문이다. 따라서 URL 보안 영역 관련 인터페이스를 사용하는 것이 좋다.
--------------------------------------------------------------------------------------------------------------------
 
따라서, 방법의 선택은 독자의 몫이다.
  
※ Zones > 2 는 신뢰할수 있는 사이트를 나타낸다.
  • Zone 0 (My computer 영역을 의미)
  • Zone 1 (Local intranet 영역을 의미)
  • Zone 2 (trusted sites 영역을 의미)
  • Zone 3 (Internet 영역을 의미)
  • Zone 4 (Restricted sites 영역을 의미)


  • ※ 똑같은 내용이 hkey_local_machine과 hkey_current_user 두곳에 존재하는데 필자는 그 차이를 모르겠다. 따라서 두곳 모두 바꾸어 준다. 그러나 테스트 결과 hkey_current_user만 수정해도 무방하였다.

    ※ SetValue의 첫번째 파라미터는 값을 나타낸다.
         0:허용  1:확인  3:사용안함 

    ※ SetValue의 두번째 파라미터는 값이름을 나타낸다. (1201 : 안전하지 않은 것으로 표시된 ActiveX 컨트롤 초기화 및 스크립트)

     
    참조

    엔트리정의기본값권장값
    1001서명된 ActiveX 컨트롤 다운로드03
    1004 서명 안 된 ActiveX 컨트롤 다운로드03
    1200 ActiveX 컨트롤과 플러그인 실행01
    1201안전하지 않은 것으로 표시된 ActiveX 컨트롤 초기화 및 스크립트13
    1400 액티브 스크립팅 허용01
    1402자바 애플릿 스크립트01
    1406도메인 간의 데이터 소스 액세스03
    1407스크립트를 통한 붙여넣기 작업 허용03
    1601 암호화되지 않은 폼 데이터 제출01
    1604폰트 다운로드03
    1606 사용자 데이터 유지03
    1607 서로 다른 도메인 간의 하위프레임 이동03
    1802 파일의 드래그 앤 드롭이나 복사 및 붙여넣기 01
    1803 파일 다운로드03
    1804 IFRAME에 프로그램과 파일 시작03
    1E05 소프트웨어 채널 사용권한3000020000


    MSDN참고:
    http://technet.microsoft.com/ko-kr/library/cc700750.aspx
     
    ※ 보안관련 수정 내용은 새로 시작되는 익스플로러부터 적용된다.
    ----------------------------------------------------------------------------------------------
    최재권 jk9053@nate.com

    출처 : http://www.devpia.com/MAEUL/Contents/Detail.aspx?BoardID=51&MAEULNO=20&no=8208&page=4

    '-- VC++' 카테고리의 다른 글

    API의 BOOL 리턴 값 비교 시 주의점  (0) 2009.05.18
    Debug Tutorial Part 1~7  (0) 2009.05.15
    windbg tutorial part 1  (0) 2009.05.13
    Sleep(0)과 Sleep(1)의 차이  (0) 2009.03.06
    CoInitializeEx(NULL, COINIT_MULTITHREADED) 사용 시 설정값  (0) 2009.03.03
    posted by 어린왕자악꿍