익스플로러 보안설정 변경

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

인터넷 익스플로러의 보안 설정 변경 관련.

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

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 항목은 *(으)로 표시합니다