익스플로러 보안설정 변경
출처 : 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