검색결과 리스트
글
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 컨트롤 초기화 및 스크립트)
참조
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 는 신뢰할수 있는 사이트를 나타낸다.
※ 똑같은 내용이 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 |
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 |
RECENT COMMENT