웹 페이지에서 사용될 때 해당 ActiveX 컨트롤은 모든 웹 페이지 상에서 자신이 안전하다는 것을 보장해야 한다.
컨트롤의 안정성을 보장하지 않으면 Internet Explorer의 보안 설정을 낮음으로 설정하지 않으면 아예 동작을 하지 않는다. // ObjectSafety
- 파일 시스템을 조작하지 않는다.
- 자신을 등록 또는 해제하는 것을 제외하고는 시스템 레지스트리를 조작하지 않는다.
- 배열의 범위를 넘어선다든가 메모리를 부적절하게 조작하지 않는다.
- 모든 입력값에 대해서 데이터의 유효성을 확인한다.
- 사용자 또는 사용자가 제공한 데이터를 부적절하게 사용하지 않는다.
Microsoft Internet Explorer가 컴포넌트를 다운로드할 때 해당 컴포넌트가 디지털 서명(digital signature)이라고 하는 것을 가지고 있는지를 검사한다.
해당 컴포넌틀 제작한 회사를 나타내는 문자열
보안증(certificate)
디지털 서명을 확인할 수 있게 하기 위한 또 다른 바이트 문자열
Microsoft Internet Explorer가 HTML 다큐먼트를 읽으면 먼저 클라이언트의 시스템 레지스트리에서 ActiveX 컨트롤의 CLSID를 찾는다.
존재하지 않으면 웹 페이지가 다운로드된 웹 서버에서 클라이언트 시스템으로 해당 ActiveX 컨트롤을 다운로드한 후, 클라이언트 시스템에 설치하고 레지스트리에 등록 // CODEBASE
인터넷 컴포넌트 다운로드(Internet Component Download)
CAB(Cabnet) 파일 다운로드
"C:\WINDOWS\Downloaded Program Files"
CODEBASE 속성은 버전 번호를 포함할 수 있다.
이 버전 번호가 현재 시스템에 설치되어 있는 컴포넌트의 버전 번호보다 큰 경우에만 새로운 코드가 다운로드된다.
컨트롤을 인터넷 상에 배포하기 위해서는 서명된 캐비닛 파일 안에 패키지하여야 한다.
Microsoft Internet Explorer(IE) 3.02 이하
Visual C++ 5.0 CD의 CAB&SIGN 폴더
IE 4.0 이상
IE 4.0 용 인터넷 클아이언트 SDK(INet SDK)이 bin 폴더
; Sample INF file for AsyncEdit.DLL
[version]
; version signature (same for both NT and Win95) do not remove
signature="$CHICAGO$"
AdvancedINF=2.0
[도구|인터넷 옵션|두 번째 탭 보안|사용자 지정 수준|서명 안된 ActiveX 컨트롤 다운로드] 항목을 확인으로 변경
<!--
[ uuid(92B2E0C4-50AB-4E78-A928-903116E97DAC),
helpstring("Dispatch interface for Circle Control"), hidden ]
dispinterface _DCircle
{
properties:
// NOTE - ClassWizard will maintain property information here.
// Use extreme caution when editing this section.
//{{AFX_ODL_PROP(CCircleCtrl)
[id(1)] OLE_COLOR FlashColor;
[id(2)] BSTR MyName;
[id(DISPID_FORECOLOR), bindable, requestedit] OLE_COLOR ForeColor;
[id(DISPID_BACKCOLOR), bindable, requestedit] OLE_COLOR BackColor;
[id(DISPID_CAPTION), bindable, requestedit] BSTR Caption;
[id(DISPID_FONT), bindable] IFontDisp* Font;
//}}AFX_ODL_PROP
methods:
// NOTE - ClassWizard will maintain method information here.
// Use extreme caution when editing this section.
//{{AFX_ODL_METHOD(CCircleCtrl)
[id(3)] void Flash();
//}}AFX_ODL_METHOD
[id(DISPID_ABOUTBOX)] void AboutBox();
};
// Event dispatch interface for CCircleCtrl
[ uuid(5635A488-8BA6-4AAB-B3BD-AC9AFD35131E),
helpstring("Event interface for Circle Control") ]
dispinterface _DCircleEvents
{
properties:
// Event interface has no properties
methods:
// NOTE - ClassWizard will maintain event information here.
// Use extreme caution when editing this section.
//{{AFX_ODL_EVENT(CCircleCtrl)
[id(DISPID_MOUSEDOWN)] void MouseDown(short Button, short Shift, OLE_XPOS_PIXELS x, OLE_YPOS_PIXELS y);
[id(DISPID_MOUSEUP)] void MouseUp(short Button, short Shift, OLE_XPOS_PIXELS x, OLE_YPOS_PIXELS y);
[id(1)] void ClickInside(OLE_XPOS_PIXELS x, OLE_YPOS_PIXELS y);
//}}AFX_ODL_EVENT
};
// Class information for CCircleCtrl
[ uuid(53AF8976-7F5A-491E-9F8B-139B1ADD1E21),
helpstring("Circle Control"), control ]
coclass Circle
{
[default] dispinterface _DCircle;
[default, source] dispinterface _DCircleEvents;
};
-->
<HTML>
<HEAD>
<TITLE>ActiveX control test page for object CircleCtrl</TITLE>
대화상자의 컨텍스트 메뉴에서 [Insert ActiveX Control]를 선택해서 ActiveX 컨트롤 삽입
or [Project|Add To Project|Components and Controls...|Registered ActiveX Controls|...]에서 컨트롤 클래스 추가 후 [Controls] 툴바에서 선택 후 다이얼로그 리소스에 추가