°ÁÂ Àü ÇÊÀÚÀÇ Àâ´ã>
±× Àü¿¡ Å¿ÀÀÇ Àâ´ã : ÀÌ °Á´ 2004³â 2¿ùºÎÅÍ 4¿ù±îÁö ¿ù°£¸¶¼Ò¿¡ ¿¬ÀçµÇ¾ú´ø ½º¸¶Æ® Ŭ¶óÀÌ¾ðÆ®¿¡ ´ëÇÑ Ä÷³À̱¸¿ä.
´å³Ø¿¢½ºÆÛÆ®ÀÇ ±â¼ú ÄÁ¼³ÅÏÆ®À̽ŠÁ¤¼ºÅ´ÔÀÌ Á¦°øÇØÁּ̽À´Ï´Ù. ½º¸¶Æ® Ŭ¶óÀÌ¾ðÆ®¿¡ ´ëÇÑ ÀڷḦ ±¸Çϱâ Èûµç »óȲ¿¡¼
ÀÌ·¸°Ô ¼±¶æ ÁÁÀº ÀڷḦ °ø°³ÇØÁֽмºÅ´Բ² ´Ù½Ã Çѹø °¨»çµå¸³´Ï´Ù.
Âü°í·Î, ¼ºÅ´ÔÀÇ °³ÀÎ »çÀÌÆ®´Â ¹Ù·Î
www.sysnet.pe.krÀÔ´Ï´Ù.
°Áº¸°í °¨µ¿À» ¸Ô¾î¼ ÇѸ¶µð °Ý·Á¸¦ ÇØ ÁÖ°í ½Í°Å³ª, °Á¿¡ ´ëÇØ Áú¹®Àº ¿ä±â·Î!!!
½º¸¶Æ® Ŭ¶óÀ̾ðÆ®ÀÇ °æ¿ì Á¦ÀÛÇÏ´Â ¹æ¹ý¸¸Å ¹èÆ÷ ¶ÇÇÑ ´õ¿í ½±°Ô µÇ¾îÀÖ´Ù. À̹ø ȸ¿¡¼´Â ¹èÆ÷Çϱâ Àü ¾î¼Àºí¸®¿¡ ´ëÇÑ Ãß°¡ÀûÀÎ ÀÛ¾÷À» ¸ÕÀú ´Ù·é ÈÄ, Á¤»óÀûÀΠŬ¶óÀÌ¾ðÆ® Ãø µ¿ÀÛÀ» À§ÇÑ º¸¾È¼³Á¤°ú ÇÔ²² ¸¶Áö¸·À¸·Î µð¹ö±ë ¹æ¹ý¿¡ ´ëÇØ ¾ð±ÞÇÏ°í ¸¶¹«¸®¸¦ ÇϰڴÙ
Á¤¼ºÅ kevin@dotnetxpert.com
ÇöÀç (ÁÖ) ´å³Ý ¿¢½ºÆÛÆ® ¿¡¼ ±â¼úÄÁ¼³ÅÏÆ®·Î ÀÏÇϰí ÀÖÀ¸¸ç, ÁÖ·Î COM-ActiveX, COM+, .NET Framework °ü·ÃÇÑ ÀÛ¾÷À» Çϰí ÀÖ´Ù.
¿¬Àç ¼ø¼
1ȸ : Smart Client ÀÇ °³¿ä
2ȸ : Internet Explorer ¿ÍÀÇ ¿¬µ¿
3ȸ : ¹èÆ÷
¿¬Àç °¡À̵å
¿î¿µÃ¼Á¦ : IIS °¡ ¼³Ä¡µÈ Windows ¿î¿µÃ¼Á¦ - ÇÊÀÚÀÇ °æ¿ì Windows 2003
°³¹ßµµ±¸ : Visual Studio .NET 2003, .NET Framework v1.1.4322
±âÃÊÁö½Ä : COM, C#, ASP.NET ±âÃÊ
ÀÀ¿ëºÐ¾ß : ÇöÀç·Î¼´Â ±â¾÷ ³»ºÎÀÇ ÀÎÆ®¶ó³Ý ȯ°æ¿¡¼ÀÇ ActiveX ÄÁÆ®·Ñ ´ëü.
ÀÌÈÄ, ´å³Ý ÇÁ·¹ÀÓ¿öÅ©°¡ ÀϹÝÈµÇ¸é ¿ÜºÎ À¥»çÀÌÆ® ¿¡¼ÀÇ ActiveX ÄÁÆ®·Ñ ´ëü
[°ÁÂÀÇ ¼Ò½º¸¦ ´Ù¿î·ÎµåÇÏ°í ½Í´Ù¸é Ŭ¸¯Çϼ¼¿ä!!]
¿¬Àç 1ȸ¿¡¼µµ ¸»¾¸µå·ÈÁö¸¸, ½º¸¶Æ® Ŭ¶óÀ̾ðÆ®ÀÇ °æ¿ì ¾ÆÁ÷Àº "ÀÎÅͳÝ" »óÀ¸·ÎÀÇ ¹èÆ÷¿¡´Â ´Ù¼Ò ¹«¸®°¡ ÀÖ¾î º¸ÀδÙ. ¿Ö³ÄÇÏ¸é ¸ðµç Ŭ¶óÀÌ¾ðÆ® ÄÄÇ»ÅÍ¿¡ ".NET Framework" ÀÌ ¼³Ä¡µÇ¾î ÀÖÁö´Â ¾Ê±â ¶§¹®ÀÌ´Ù. ÇöÀç ´å³ÝÀÌ ±âº» Æ÷ÇÔµÈ ¿î¿µÃ¼Á¦´Â Windows 2003 Çϳª»ÓÀÌ¸ç ±× ¿ÜÀÇ ¿î¿µÃ¼Á¦µéÀº "Windows Update" À¥ »çÀÌÆ®¸¦ ÅëÇϰųª "MSDN ¿Â¶óÀÎ ´Ù¿î·Îµå" À¥»çÀÌÆ®¸¦ ÅëÇØ¼ ¼±ÅÃÀûÀ¸·Î ¼³Ä¡ÇÏ´Â °ÍÀÌ °¡´ÉÇÑ Á¤µµÀÌ´Ù. ȯ°æÀÚü·Î¸¸ º»´Ù¸é ÀÌ¹Ì ¸ðµç Windows »ç¿ëÀÚµéÀÌ "´å³Ý ÇÁ·¹ÀÓ¿öÅ©" ¸¦ ¼³Ä¡ÇÒ ¼ö ÀÖÁö¸¸, »ç¿ëÀÚµéÀÇ ÀνÄÀ̶ó´Â Ãø¸é¿¡¼ º»´Ù¸é ±×·¯ÇÑ ¼³Ä¡¹æ¹ýÀº Àǹ̰¡ ¾ø´Ù°í ºÁ¾ß ÇÑ´Ù. ÀÏ¹Ý »ç¿ëÀÚµéÀÌ Windows Update »çÀÌÆ®¸¦ ¹æ¹®Çؼ ".NET Framework" ¼³Ä¡¸¦ ±â´ëÇϱ⠺¸´Ù´Â ¿ÀÈ÷·Á ÀÚ»çÀÇ À¥»çÀÌÆ®¿¡¼ "´å³Ý Àç¹èÆ÷ °¡´É¸ðµâ" À» Æ÷ÇÔÇÑ ¼Â¾÷ ÆÄÀÏÀ» Á¦°øÇØ ÁÖ´Â °ÍÀÌ ´õ¿í Çö½ÇÀûÀÎ ¹æ¾ÈÀÌ µÉ ¼ö ÀÖ´Ù. Âü°í·Î ±â»ç¸¦ ¾²°í ÀÖ´Â ½ÃÁ¡À» ±âÁØÀ¸·Î ¹öÀü 1.1 Àº MSDN ¿Â¶óÀÎ ´Ù¿î·Îµå À¥»çÀÌÆ®ÀÎ °æ¿ì
http://www.microsoft.com/korea/msdn/msdn-files/027/001/829/msdncompositedoc.asp
¿¡¼ ´Ù¿î·Îµå ¹ÞÀ» ¼ö ÀÖÀ¸¸ç ¸ðµâÀÇ Å©±â´Â 20MB Á¤µµÀÌ´Ù.
¾ÕÀ¸·Î ÀÎÅͳÝÀ¸·ÎÀÇ ¹èÆ÷´Â ½Ã°£ÀÌ Áö³ª¸é ÇØ°áµÉ °ÍÀ̰í, Áö±Ý Àû¿ë°¡´ÉÇÑ ºÐ¾ß¶ó¸é ´Ü¿¬ ÀÎÆ®¶ó³ÝÀ» µé ¼ö ÀÖ°Ú´Ù. ƯÁ¤ ´ÜüÀÇ ³»ºÎ¶ó¸é "´å³Ý ÇÁ·¹ÀÓ¿öÅ©" ÀÇ ¼³Ä¡¸¦ Àǹ«ÈÇÒ ¼ö ÀÖÀ» ÅÙµ¥ ¿äÁòÀÇ »ç³» ³×Æ®¿öÅ© ¼Óµµ°¡ ´ë°³ 100Mbps ÀÎ °ÍÀ» °¨¾ÈÇØ º»´Ù¸é 20MB Á¤µµÀÇ ·±Å¸ÀÓ È¯°æÀ» ¼³Ä¡ÇÏ´Â °ÍÀº ±×´ÙÁö ºÎ´ãµÇ´Â ¼öÁØÀº ¾Æ´Ï´Ù. ¿ÀÈ÷·Á Çѹø ¼³Ä¡·Î ÀÎÇØ¼ ÀÌÈÄ¿¡ °³¹ßµÇ´Â ÀÎÆ®¶ó³Ý ¾ÖÇø®ÄÉÀ̼ÇÀÇ »ý»ê¼ºÀÌ ³ô¾ÆÁø´Ù¸é ¿ÀÈ÷·Á ¼³Ä¡´Â ºÎ´ãÀÌ ¾Æ´Ñ ÅõÀÚ¶ó°íµµ º¼ ¼ö ÀÖÀ» °ÍÀÌ´Ù.
´å³Ý ÇÁ·¹ÀÓ¿öÅ© ȯ°æ¿¡ ´ëÇÑ ¼³Ä¡´Â ±âº»ÀûÀÎ »çÇ×ÀÌ´Ï ´õ ¾ð±ÞÇÒ °ÍÀÌ ¾ø°í, ÇÊÀÚ ÀÔÀå¿¡¼´Â ±×º¸´Ù´Â °³¹ß¿¡ °ü°èµÈ »çÇ×µéÀ» Á¤¸®ÇÏ´Â °ÍÀ¸·Î ±ÛÀ» ½á³ª°¡µµ·Ï ÇϰڴÙ. ±×·³, ÀÌÁ¦ºÎÅÍ ¹èÆ÷¸¦ À§ÇÑ Çö½ÇÀûÀÎ ¹®Á¦µéÀ» Çϳª¾¿ ÇØ°áÇØ º¸ÀÚ. ¿ì¼±, ¿©·¯ºÐÀº ´ÙÀ½°ú °°Àº ±¸¹®À» ÀÌ¿ëÇØ¼ HTML ÆäÀÌÁö¿¡¼ ¿©·¯ºÐÀÌ ¸¸µç ÄÁÆ®·ÑÀ» À§Ä¡½Ãų °ÍÀÌ´Ù.
<OBJECT id="_Control1" style="WIDTH: 272px; HEIGHT: 193px" classid="SmartClient.dll#SmartClient.TreeControl"
VIEWASTEXT>
<PARAM Name="DebugEnable" VALUE="True">
</OBJECT>
|
Á÷Á¢ÀûÀÎ ¹èÆ÷¹®Á¦´Â ¾Æ´ÏÁö¸¸, ¿ì¼± ´«¿¡ ¶ç´Â °ÍÀº <PARAM/> ű׸¦ µé ¼ö ÀÖ´Ù. ÇÊÀڴ óÀ½¿¡ <PARAM/> ¼³Á¤À» »ý°¢ÇßÀ» ¶§ ¿ì¼± IPersistPropertyBag À» ¶°¿Ã·È´Ù. ActiveX ¿¡¼´Â IPersistPropertyBag ÀÎÅÍÆäÀ̽º¸¦ COM °³Ã¼¿¡ ±¸ÇöÇØ µÎ¸é, Internet Explorer °¡ ÇØ´ç ÀÎÅÍÆäÀ̽º°¡ COM °³Ã¼¿¡ ±¸ÇöµÇ¾î ÀÖ´ÂÁö QueryInterface ¸¦ ÇØº¸°í ±¸ÇöµÇ¾î ÀÖ´Ù¸é, IPersistPropertyBag::Load ¸Þ¼µå¸¦ È£ÃâÇØ Áֱ⠶§¹®ÀÌ´Ù. ÀÎÅÍ³Ý ÀͽºÇ÷η¯°¡ Ȱ¼ºÈ½ÃŰ´Â ½º¸¶Æ® Ŭ¶óÀ̾ðÆ®ÀÇ °æ¿ìµµ ±×¿Í Å©°Ô ´Ù¸£Áö ¾Ê´Ù. ÇÏÁö¸¸, ´ÙÇàÈ÷µµ C# ÄÁÆ®·ÑÀÇ °æ¿ì¿¡´Â ±×·± º¹ÀâÇÑ °úÁ¤À» IE ¿ë .NET ·±Å¸ÀÓ È£½ºÆ® ( ÀÌÇÏ IEHost.dll ) °¡ ¼û°ÜÁÖ°í ÀÖ´Ù. À§¿¡ ¿¹½ÃÇÑ °æ¿ì´ë·Î¶ó¸é "DebugEnable" À̶ó´Â À̸§°ú µ¿ÀÏÇÑ "°ø¿ë¼Ó¼º" À» Á¤ÀÇÇØ µÎ¸é ³ª¸ÓÁö ¸ÅÇΰúÁ¤Àº ÀÚµ¿À¸·Î ÀÌ·ç¾îÁö°Ô µÇ¾î ÀÖ´Ù. Âü°í·Î, °ø¿ë ¼Ó¼ºÀº ¹Ýµå½Ã get/set ÀÌ ¸ðµÎ ±¸ÇöµÇ¾î ÀÖ¾î¾ß ÇÑ´Ù. <PARAM/> ÀÇ Æ¯¼º»ó set Á¢±ÙÀÚ´Â ÇÊ¿ä¾ø´Â µ¥µµ, ±¸ÇöÀ» ÇÏÁö ¾Ê°Ô µÇ¸é µ¿ÀÛÇÏÁö ¾Ê´Â´Ù.
bool _debugEnable = false;
public string DebugEnable
{
get
{
return _debugEnable.ToString();
}
set
{
_debugEnable = Boolean.Parse( value );
}
}
|
.NET Windows Forms ·Î ±¸ÇöµÈ ÄÁÆ®·ÑÀÇ °æ¿ì¿¡´Â ³»ºÎÀûÀ¸·Î ¼û°ÜÁø ü·Î IPersistPropertyBag ÀÌ ±âº» ±¸ÇöµÇ¾îÁ® ÀÖ°í, IEHost.dll Àº ³»ºÎÀûÀ¸·Î Reflection À» ÀÌ¿ëÇØ¼ <PARAM/> ű×ÀÇ NAME ¼Ó¼ºÀ¸·Î ÀÖ´Â À̸§°ú ÄÁÆ®·Ñ¿¡ ±¸ÇöµÈ °ø¿ë ¼Ó¼ºÁß¿¡¼ µ¿ÀÏÇÑ À̸§À» ã¾Æ¼ °ªÀ» ¼³Á¤ÇØ ÁØ´Ù.
´Ù½Ã À§ÀÇ <OBJECT/> ±¸¹®À¸·Î µ¹¾Æ°¡¼, À̹ø¿¡´Â CLASSID ¼Ó¼ºÀ» »ìÆìº¸ÀÚ. 1ȸ¿¬Àç¿¡¼ ºÎÅÍ ´ç¿¬ÇÏ°Ô ½á¿Ô´ø °ÍÀÌÁö¸¸, ¹èÆ÷¸¦ ¾Ë¾Æº¸´Â °ÍÀÌ´Ï ¸¸Å Á»´õ ÀÚ¼¼È÷ ¾Ë¾ÆºÁ¾ß ÇÒ Çʿ䰡 ÀÖ´Ù. Microsoft ¿¡ ÀÇÇØ¼ Á¤ÀÇµÈ Àǹ̷δ ´ÙÀ½°ú °°ÀÌ ±¸¼ºÀÌ µÈ´Ù.
ÄÄÆ÷³ÍÆ® °æ·Î#³×ÀÓ½ºÆäÀ̽º°æ·Î.ÄÁÆ®·Ñ À̸§
|
Áï, CLASSID="SmartClient.dll#SmartClient.TreeControl" À̶ó°í µÇ¾î ÀÖ´Ù¸é,
ÄÄÆ÷³ÍÆ® °æ·Î: SmartClient.dll
³×ÀÓ½ºÆäÀ̽º °æ·Î : SmartClient
ÄÁÆ®·Ñ À̸§: TreeControl
|
ÀÌ µÇ´Â °ÍÀÌ´Ù. 1ȸ ¿¬Àç¿¡¼ ÇÊÀÚ´Â ¹«Á¶°Ç °³¹ßµÈ ÄÁÆ®·Ñ DLL ÀÇ À§Ä¡¸¦ ÄÁÆ®·ÑÀÌ Æ÷Ç﵃ À¥Æû ÆäÀÌÁö¿Í µ¿ÀÏÇÑ Æú´õ¿¡ ÀÖµµ·Ï Çß´Ù. ÀÌÁ¦´Â Á» ¹Ù²ãº¸ÀÚ. °ü¸®ÀûÀÎ ÆíÀǸ¦ À§ÇØ ÀÌÁ¦ À¥ »çÀÌÆ®ÀÇ ·çÆ® µð·ºÅ丮¿¡ "netcontrols" ¶ó´Â Æú´õ¸¦ ¸¸µé°í SmartClient.dll À» º¹»çÇØ ³õÀÚ. À̸¦ ¹Ý¿µÇϱâ À§ÇØ CLASSID ´Â ´ÙÀ½°ú °°ÀÌ º¯°æµÇ¾îÁ®¾ß ÇÑ´Ù.
CLASSID="/netcontrols/SmartClient.dll#SmartClient.TreeControl"
|
±×·³, ÀÎÅÍ³Ý ÀͽºÇ÷η¯´Â "GET /netcontrols/SmartClient.dll" ¶ó°í HTTP GET È£ÃâÀ» ÇÏ°Ô µÈ´Ù. ¿©±â¼ ½ÇÁ¦ HTTP ¼ÒÄÏ Åë½ÅÀÌ ¹ß»ýÇÏ´Â °úÁ¤À» »ìÆìº¼ Çʿ䰡 ÀÖ´Ù. ¿©·¯ºÐµéµµ "³×Æ®¿öÅ© ¸ð´ÏÅÍ" µîÀÇ ÅøÀ» ÀÌ¿ëÇØ¼ º¸¸é ¾Ë ¼ö ÀÖ°ÚÁö¸¸, IEHost.dll Àº ´Ù¼Ò ÀÌÇØÇÒ ¼ö ¾ø´Â ¿À¹öÇìµå ¸¦ ¾ß±â½Ã۰í ÀÖ´Ù. ´ÙÀ½Àº ³×Æ®¿öÅ© ¸ð´ÏÅ͸¦ ÅëÇØ¼ ¼ø¼´ë·Î ³ª¿ÇØ º» GET È£ÃâÀÌ´Ù.
GET /netcontrols/SmartClient.dll
------- DLL Àü¼Û ----------
GET /ko-KR/mscorlib.resources.dll ( File Not Found )
GET /ko-KR/mscorlib.resources.mscorlib.resources.dll ( File Not Found )
GET /bin/ko-KR/mscorlib.resources.dll ( File Not Found )
GET /bin/ko-KR/mscorlib.resources/mscorlib.resources.dll ( File Not Found )
GET /ko-KR/mscorlib.resources.EXE ( File Not Found )
GET /ko-KR/mscorlib.resources.mscorlib.resources.EXE ( File Not Found )
GET /bin/ko-KR/mscorlib.resources.EXE ( File Not Found )
GET /bin/ko-KR/mscorlib.resources/mscorlib.resources.EXE ( File Not Found )
GET /SmartClient.DLL ( File Not Found )
GET /SmartClient/SmartClient.DLL ( File Not Found )
GET /bin/SmartClient.DLL ( File Not Found )
GET /bin/SmartClient/SmartClient.DLL ( File Not Found )
GET /SmartClient.EXE ( File Not Found )
GET /SmartClient/SmartClient.EXE ( File Not Found )
GET /bin/SmartClient.EXE ( File Not Found )
GET /bin/SmartClient/SmartClient.EXE ( File Not Found )
GET /ko-KR/System.resources.DLL ( File Not Found )
GET /ko-KR/System.resources/System.resources.DLL ( File Not Found )
GET /bin/ko-KR/System.resources.DLL ( File Not Found )
GET /bin/ko-KR/System.resources/System.resources/DLL ( File Not Found )
GET /ko-KR/System.resources.EXE ( File Not Found )
GET /ko-KR/System.resources/System.resources.EXE ( File Not Found )
GET /bin/ko-KR/System.resources.EXE ( File Not Found )
GET /bin/ko-KR/System.resources/System.resources.EXE ( File Not Found )
|
óÀ½¿¡ Çѹø /netcontrols/SmartClient.dll ¿¡¼ ÄÄÆ÷³ÍÆ® DLL ÀÌ ½ÇÁ¦·Î Àü¼ÛÀÌ ÀÌ·ç¾îÁö°í ÀÌÈÄ mscorlib.resources.dll/exe, smartclient.dll/exe, system.resources.dll/exe ¿¡ ´ëÇÑ GET È£ÃâÀÌ ¿¬ÀÌ¾î¼ È£ÃâÀÌ µÇ¾îÁø´Ù. ¸®¼Ò½º DLL µé¿¡ ´ëÇØ¼ ã´Â °úÁ¤ÀÌ ¹ß»ýÇÏ´Â °ÍÀº ´Ù±¹¾î Áö¿ø DLL µéÀÇ °æ·Î Ç®ÀÌ °úÁ¤À¸·Î ¹Ì·ïº¼¶§ ´ç¿¬ÇÑ È£ÃâµéÀÌ´Ù. ±×·±µ¥ ¾î°¼ SmartClient.DLL ÀÌ Ã³À½ÀÇ È£Ãâ¿¡¼ ¹ß°ßµÇ¾ú´Âµ¥µµ ±× ÀÌÈÄ¿¡ ¶Ç ´Ù½Ã ãÀ¸·Á°í GET È£ÃâÀ» ¹ß»ý½ÃŰ´Â °¡ ÇÏ´Â Á¡ÀÌ Àǹ®À¸·Î ³²´Â´Ù. ÇѸ¶µð·Î, ¾µ¸ð ¾ø´Â ³×Æ®¿öÅ© Æ®·¡ÇÈÀ» ¹ß»ý½ÃŰ´Â °ÍÀÏ »ÓÀÌ´Ù. ±×¸®°í Á»´õ »ý°¢ÇØ º»´Ù¸é ¸®¼Ò½º DLL µé¿¡ ´ëÇÑ GET È£Ãâ±îÁöµµ ½º¸¶Æ® Ŭ¶óÀ̾ðÆ®ÀÇ °æ¿ì¶ó¸é Á¦¾î¸¦ ÇÒ ¼ö ÀÖ¾î¾ß ÇÏÁö ¾Ê¾ÒÀ»±î ¶ó´Â ¾Æ½¬¿òÀÌ ³²´Â´Ù. Å×½ºÆ® ÇÑ °á°ú·Î´Â ¸¶Áö¸· "GET" È£ÃâÀÌ ³¡³ª¾ß¸¸ ½º¸¶Æ® Ŭ¶óÀÌ¾ðÆ® DLL ÀÌ <OBJECT/> ³»¿¡¼ Á¤»óÀûÀ¸·Î Ȱ¼ºÈµÇ´Â °ÍÀ» º¼ ¼ö ÀÖ´Ù. 24¹øÀÇ HTTP GET Åë½ÅÀº ÀÎÅÍ³Ý È¯°æ¿¡¼´Â ¼Óµµ ÀúÇ϶ó´Â °á°ú¸¦ ³ºÀ» ¼ö ÀÖ´Ù. SmartClient.DLL ÀÇ °æ·ÎÇ®ÀÌ´Â ÇѰ¡Áö ´õ Àǹ®À» ³²±â°í ÀÖ´Ù. ÇÊÀڴ óÀ½¿¡ À§ÀÇ ¸ñ·ÏÀ» º¸°í, ¸¸¾à CLASSID ¿¡ ±âº» ÁöÁ¤µÈ Æú´õ¿¡¼ SmartClient.dll ÀÌ ¹ß°ßµÇÁö ¾Ê´Â ´Ù¸é, À§ÀÇ HTTP GET ¸®½ºÆ®¿¡¼ º¸¿©Áö´Â °Íó·³ Â÷·Ê´ë·Î ÇØ´ç DLL À» ¹ß°ßÇϱâ À§ÇÑ È£ÃâÀÌ ÀϾ´Â °ÍÀÌ ¾Æ´Ï³Ä°í »ý°¢À» Çß¾ú´Ù. ÇÏÁö¸¸, ½ÇÁ¦ Å×½ºÆ®¸¦ ÇØº¸¸é, CLASSID ¿¡ ¸í½ÃµÈ Æú´õ¿¡ ÇØ´ç DLL ÀÌ ¾ø´Ù¸é ÀÌÈÄÀÇ È£ÃâÀº ¾Æ¿¹ ¹ß»ýµµ ÇÏÁö ¾Ê´Â´Ù. ¾ÆÁ÷ Ãʱ⠱â¼úÀ̶ó ±×·±Áö ÀÌ·¯ÇÑ ¹Ì¼÷ÇÑ ¹®Á¦µéÀÌ ¾ÆÁ÷ ³²¾Æ ÀÖ´Ù´Â °ÍÀ» ¾Ë¾ÆµÎÀÚ.
ÀÌÁ¦ <OBJECT/> ¿¡ ´ëÇÑ »çÇ×Àº ³¡¸¶Ãưí, ¼¹öÃø ÄÚµå·Î ³Ñ¾î°¡ º¸ÀÚ. ¿©·¯ºÐÀº ÀÚ½ÅÀÌ ¸¸µç ÄÁÆ®·Ñ¿¡ ´ëÇØ¼ "°·ÂÇÑ À̸§¼¸í" À» ÇØ¼ ¹èÆ÷Çϱ⸦ ¿øÇÒ °ÍÀÌ´Ù. ±âÁ¸ µ¶¸³ ¾ÖÇø®ÄÉÀ̼Ǹ¸À» ¸¸µé¾î º» µ¶ÀÚ¶ó¸é ¿ì¼± AssemblyKey Ư¼º¸¸À» ÁöÁ¤ÇÏ¿© SNK ÆÄÀϰú ¿¬°áÇÒ ÅÙµ¥, ½º¸¶Æ® Ŭ¶óÀÌ¾ðÆ®¿¡¼´Â ±×°Í¸¸À¸·Î´Â ºÎÁ·ÇÏ´Ù. ½º¸¶Æ® Ŭ¶óÀÌ¾ðÆ®¿¡¼´Â "°·ÂÇÑ À̸§¼¸í" ÀÌ µÈ ¾î¼Àºí¸®ÀÇ °æ¿ì ´ÙÀ½°ú °°ÀÌ ¹Ýµå½Ã "AllowPartiallyTrustedCallers" ( ÀÌÇÏ, APTC ) Ư¼ºÀ» Æ÷ÇÔ½ÃÄѾ߸¸ ÇÑ´Ù.
[assembly: AllowPartiallyTrustedCallers]
[assembly: AssemblyKeyFile("rich.snk")]
|
¿ì¼±, µ¿ÀÛ°á°ú¸¸À» ³õ°í º»´Ù¸é APTC Ư¼ºÀ» Á¦¿Ü½ÃŰ´Â °æ¿ì, Á¤»óÀûÀÎ <OBJECT/> Ȱ¼ºÈ°¡ ÀÌ·ç¾îÁöÁö ¾Ê´Â´Ù. ¿ø·¡, "°·ÂÇÑ À̸§¼¸í" ÀÌ µÈ ¾î¼Àºí¸®ÀÇ °æ¿ì "ºÎºÐ½Å·Ú¸¦ ¹Þ°í ÀÖ´Â ¾î¼Àºí¸®" ¿¡ ÀÇÇÑ È£ÃâÀÌ ¿øÄ¢ÀûÀ¸·Î Çã¿ëÀÌ ¾ÈµÈ´Ù. ÀÌ ±ÔÄ¢Àº »ó½ÄÀûÀ¸·Î »ý°¢ÇØ º¸¸é ½±°Ô ÀÌÇØ°¡ µÈ´Ù. "°·ÂÇÑ À̸§¼¸í" ÀÌ µÈ ¾î¼Àºí¸®¶ó¸é ºÐ¸íÇÑ ÀÚ°ÝÁõ¸íÀ» °¡Áø °ÍÀÌ°í ±¸ÇöµÈ µ¿ÀÛ ¿ª½Ã Áß¿äÇÑ ¿ªÇÒÀ» ÇÑ´Ù°í º¼ ¼ö ÀÖ´Ù. ±×·¯ÇÑ ¾î¼Àºí¸®¸¦ ½Å·ÚÇÒ ¼ö ¾ø´Â ¶Ç ´Ù¸¥ ¾î¼Àºí¸®°¡ ÀÚÀ¯·Ó°Ô ÀνºÅϽºÈÇØ¼ È£ÃâÇÑ´Ù´Â °ÍÀº ºÐ¸í ¹®Á¦°¡ ¾Æ´Ò ¼ö ¾ø´Ù. ¿¹¸¦ µç´Ù¸é, ½Ã½ºÅÛ¿¡ Áß¿äÇÑ ±â´ÉÀ» ÇÏ´Â "DxType" À̶ó´Â ¾î¼Àºí¸®°¡ ÀÖ´Ù°í °¡Á¤ÇÒ ¶§, ¾î´À »çÀÌÆ®¿¡ ¹æ¹®Çؼ ´Ù¿î·Îµå ¹Þ¾Æ ½ÇÇàÇÑ "AttackType" À̶ó´Â ¾î¼Àºí¸®°¡ "DxType" À» »ý¼ºÇؼ ½ÇÇàÇÏ´Â °æ¿ìÀÏ ÅÙµ¥, ÀÌ·± °æ¿ì´Â Àý´ë À־ ¾ÈµÈ´Ù. ( »ç½Ç, ±× µ¿¾ÈÀº ±×°ÍÀÌ ÀÚ¿¬½º·¯¿ü´Ù. ) .NET ȯ°æ¿¡¼´Â ±×·¯ÇÑ Á¢±Ù±îÁöµµ ¸·°Ú´Ù´Â °ÍÀε¥ °³¹ßÀڷμ´Â ¹ø°Å·Ó°ÚÁö¸¸ Âù¼ºÇÒ ¸¸ÇÑ °³³äÀÌ´Ù. ÀÏ´Ü, ±×·¯ÇÑ APTC Ư¼ºÀ¸·Î ÀÎÇØ ÁÖÀÇÇØ¾ß ÇÒ »çÇ×ÀÌ ¸î°¡Áö ÀÖ´Ù. ù¹øÂ°·Î, µ¶¸³ ¾îÇø®ÄÉÀ̼ǿ¡¼ Á¦°øµÇ´Â "°·ÂÇÑ À̸§¼¸í" µÈ ¾î¼Àºí¸®¿¡ APTC Ư¼ºÀ» ¼³Á¤ÇÏ´Â °ÍÀº À§ÇèÇÏ´Ï Æ¯º°ÇÑ »çÀ¯°¡ ¾Æ´Ï¶ó¸é ¾Æ¿¹ ¾²Áö ¸»¶ó´Â °ÍÀ̰í, µÎ¹øÂ°´Â ±× ¾î¼Àºí¸®°¡ GAC ¿¡ µî·ÏµÉÁöÀÇ ¿©ºÎ¿¡ µû¶ó ´õ¿í ´õ ¿©·¯ºÐÀÇ Äڵ忡 ´ëÇÑ ÁÖÀǸ¦ ±â¿ï¿©¾ß ÇÑ´Ù´Â °ÍÀÌ´Ù. Çö½ÇÀûÀ¸·Î ½º¸¶Æ® Ŭ¶óÀÌ¾ðÆ®¿¡ APTC Ư¼ºÀ» »ç¿ëÇÑ´Ù°í ÇØµµ ¿ÜºÎ ¾î¼Àºí¸®¿¡¼ ½º¸¶Æ® Ŭ¶óÀÌ¾ðÆ® DLL ¿¡ ÀÖ´Â Type À» »ý¼ºÇÏ´Â °ÍÀº °ÅÀÇ ºÒ°¡´ÉÇÏ´Ù. ±×·±µ¥, µ¶¸³ ¾ÖÇø®ÄÉÀ̼ǿ¡¼ÀÇ GAC ¿¡ µî·ÏµÇ´Â ¾î¼Àºí¸®¶ó¸é »çÁ¤ÀÌ ´Þ¶óÁø´Ù. ±×·± °æ¿ì ¿ÜºÎ ÇÁ·Î±×·¥¿¡¼ ÀÚÀ¯·Ó°Ô Type À» »ý¼ºÇÒ ¼ö ÀÖÀ¸¹Ç·Î, APTC Ư¼ºÀ» ¸í½ÃÇß´Ù´Â °ÍÀº ¸ðµç ¾î¼Àºí¸®·Î ÇÏ¿©±Ý Á¢±ÙÀ» Çã¿ëÇϵµ·Ï ÇÑ´Ù°í º¼ ¼ö Àֱ⠶§¹®ÀÌ´Ù.
¹èÆ÷·Î ÀÎÇØ ¹ß»ýÇÏ´Â ¶Ç ÇϳªÀÇ °í¹ÎÀº ¾ÖÇø®ÄÉÀÌ¼Ç ¼³Á¤ ÆÄÀÏÀÇ À§Ä¡ ¹®Á¦ÀÌ´Ù. ÀÌ À§Ä¡¿¡ ´ëÇÑ ¹®Á¦ÇذáÀº "³×Æ®¿öÅ© ¸ð´ÏÅÍ" µîÀÇ ÅøÀ» ÅëÇØ¼ º¸¸é ½±°Ô ¾Ë ¼ö ÀÖ´Ù. ¿ì¼±, TreeControl.cs ÆÄÀÏÀÇ TreeControl_Load À̺¥Æ® Çڵ鷯¿¡¼ ´ÙÀ½°ú °°Àº Äڵ带 ³Ö¾îº¸ÀÚ.
AppSettingsReader reader = new AppSettingsReader();
bool bDebugEnable = (bool)reader.GetValue( "DebugEnable", typeof( bool ) );
|
ÀÌÁ¦ ÄÄÆÄÀÏÀ» Çϰí, DLL ÆÄÀÏÀ» À¥¿¡ ¹èÆ÷ÇÑ ÈÄ À¥ Æû ÆäÀÌÁö¸¦ ÀÎÅÍ³Ý ÀͽºÇ÷η¯¸¦ ÀÌ¿ëÇØ¼ ¹æ¹®ÇÏ°í ±× »çÀÌ ¿À°í °¡´Â ³×Æ®¿öÅ© ÆÐŶÀ» "³×Æ®¿öÅ© ¸ð´ÏÅÍ" ¸¦ ÅëÇØ¼ »ìÆìº¸ÀÚ. ±×·³, ´ÙÀ½°ú °°Àº À¯ÇüÀÇ GET ÆÐŶÀ» º¼ ¼ö ÀÖ´Ù.
GET /IEXPLORE.EXE.config HTTP/1.1
Connection: Keep-Alive
Host: 192.168.100.19
|
À§Ä¡¸¦ ¾Ë¾ÒÀ¸´Ï, À¥ »çÀÌÆ®ÀÇ ·çÆ® Æú´õ¿¡ IExplore.exe.config ÆÄÀÏÀ» »ý¼ºÇÏ°í ´ÙÀ½°ú °°ÀÌ ³»¿ëÀ» ³Ö¾îµÎÀÚ.
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="DebugEnable" value="True" />
</appSettings>
</configuration>
|
±×·³, AppSettingsReader Ŭ·¡½º·Î À§ÀÇ Config ÆÄÀÏ¿¡ ´ã±ä ¼³Á¤À» ¾×¼¼½º ÇÒ ¼ö°¡ ÀÖ´Ù. Âü°í·Î /iexplorer.exe.config ÀÇ À̸§°ú °æ·Î¿¡¼ ¾Ë ¼ö ÀÖµíÀÌ, ¿©·¯°³ÀÇ ½º¸¶Æ® Ŭ¶óÀÌ¾ðÆ® DLL µéÀÌ ÀÖ´Ù°í ÇØµµ °¢°¢¿¡ ´ëÇÑ ¼³Á¤ÆÄÀÏÀ» ³ª´ ¼ö ¾ø°í ¿ÀÁ÷ ·çÆ® °æ·Î¿¡ ÀÖ´Â IEXPLORE.EXE.config ÆÄÀÏÀ» °øÀ¯ÇØ¾ß ÇÑ´Ù´Â °ÍÀÌ´Ù. ¾Æ¿ï·¯, ¿©±â¼µµ IEHost.dll ÀÇ ÀÌÇØÇÒ ¼ö ¾ø´Â Çö»óÀÌ Çϳª Àִµ¥, ³×Æ®¿öÅ© ¸ð´ÏÅ͸¦ ÁÖÀDZí°Ô »ìÆìº¸½Å ºÐÀº ¾Æ½Ã°ÚÁö¸¸ IExplorer.exe.config ¿¡ ´ëÇÑ GET È£ÃâÀÌ ¿¬ÀÌ¾î µÎ¹ø ¹ß»ýÇØ¼ ¶È°°Àº ³»¿ëÀÇ ÆÄÀÏÀÌ Áߺ¹µÇ¾î Àü¼ÛµÇ¾îÁö´Â °ÍÀ» È®ÀÎÇÒ ¼ö ÀÖ´Ù.
ÀÏ´Ü, ÀÌ Á¤µµ·Î ¹èÆ÷¿¡ °üÇÑ HTML °ú ÄÁÆ®·ÑÃøÀÇ Äڵ忡 ´ëÇØ¼ ¾Ë¾Æº¸´Â °ÍÀº ³¡³ °Í °°´Ù. ÀÌÁ¦ ±× µ¿¾ÈÀÇ 1~2ȸ ¿¬Àç¿¡¼ ¼öÀÛ¾÷À¸·Î ±âº»¼³Á¤ÇÏ°í ³Ñ¾î°¬´ø ½º¸¶Æ® Ŭ¶óÀ̾ðÆ®ÀÇ µ¿ÀÛ¿¡ ÇÊ¿äÇÑ º¸¾È ¼³Á¤¿¡ °üÇØ¼ »ìÆìº¸µµ·Ï ÇÏÀÚ. ¿©·¯ºÐÀº Áö±Ý±îÁö ¸¸µé¾ú´ø ActiveX ÄÁÆ®·ÑµéÀ» »ý°¢ÇØ º¼ ¶§, ±×¿Í µ¿ÀÏÇÑ ±â´ÉÀÇ ½º¸¶Æ® Ŭ¶óÀÌ¾ðÆ®¸¦ ¸¸µé°íÀÚ ÇÑ´Ù¸é ´ë°³ÀÇ °æ¿ì ÇÊÈ÷ ±âº» "Internet" ±ÇÇÑ ÁýÇÕ¿¡¼ Á¦°øÇÏ´Â ±ÇÇѸñ·Ï ÀÌ¿ÜÀÇ °ÍµéÀ» ÇÊ¿ä·Î ÇÏ°Ô µÈ´Ù´Â °ÍÀ» ¾Ë°Ô µÉ °ÍÀÌ´Ù. ¹°·Ð, ±×·± °æ¿ì¿¡ »ç¿ëÀÚ·Î ÇÏ¿©±Ý Á÷Á¢ ±ÇÇÑ ¼³Á¤À» Çϵµ·Ï À¯µµÇÏ´Â °ÍÀÌ Çö½ÇÀûÀ¸·Î ¾î·Á¿î ÀÏÀ̶ó´Â °ÍÀ» ÀÌ¹Ì ¾Ë°í ÀÖÀ» °ÍÀÌ´Ù. ¿©±â¼, ½º¸¶Æ® Ŭ¶óÀÌ¾ðÆ®¿¡ ´ëÇÑ ÇѰ¡Áö "¾ÆÀÌ·¯´ÏÄÃ" ÇÑ »óȲÀÌ ¹ß»ýÇÏ°Ô µÈ´Ù. ÇÊÀÚ´Â ¿¬Àç 1ȸ¿¡¼ ActiveX ÄÁÆ®·ÑÀº Ŭ¶óÀÌ¾ðÆ®¿¡ ´ëÇØ¼ ¹«Á¦ÇÑÀûÀÎ ¾×¼¼½º°¡ °¡´ÉÇÏ´Ù´Â ¹®Á¦¸¦ ÁöÀûÇß¾ú´Ù. ±×·¡¼ °¡´ÉÇÑ ActiveX ¸¦ ÀÚÁ¦Çϰí ÀÌÈĺÎÅÍ´Â Á¦ÇÑµÈ º¸¾Èȯ°æ¼Ó¿¡¼ .NET ½º¸¶Æ® Ŭ¶óÀÌ¾ðÆ®¸¦ ½á¾ß ÇÑ´Ù°í À̾߱âÇß´Ù. ±×·±µ¥, "º¸¾È¼³Á¤" ¿¡ ¿Í¼´Â ¾î¿ ¼ö ¾øÀÌ ´Ù½Ã ActiveX ÀÇ ÈûÀ» ºô·Á¾ß ÇÏ´Â »óȲÀ¸·Î ¿À°Ô µÈ´Ù.
»ý°¢ÇØ º¸ÀÚ. º¸¾È ¼³Á¤À» Ãß°¡Çϱâ À§Çؼ´Â ±×·¯ÇÑ ±ÇÇÑÀ» °¡Áø ¾î¼Àºí¸®¸¸ÀÌ °¡´ÉÇÒ°ÍÀ̰í, ½º¸¶Æ® Ŭ¶óÀÌ¾ðÆ® ¾î¼Àºí¸®´Â ±âº» "Internet" ±ÇÇÑÁýÇÕ¸¸ °¡Áö°í Àֱ⠶§¹®¿¡, ½º½º·Î Àڽſ¡ ´ëÇÑ º¸¾È»çÇ×À» Çã¿ëÇÒ ¼ö ¾øÀ¸¸ç ¶ÇÇÑ º¸¾È¼³Á¤À» Àü´ãÇÏ´Â ½º¸¶Æ® Ŭ¶óÀÌ¾ðÆ® Á¶Â÷µµ ºÒ°¡´ÉÇÑ ½Ã³ª¸®¿ÀÀÏ »ÓÀÌ´Ù. Áß¿äÇÑ °ÍÀº, ¾î·µç ÃÖÃÊÀÇ "½Å·Ú¹ÞÀº" ¸ðµâÀÌ "½º¸¶Æ® Ŭ¶óÀ̾ðÆ®" ¸¦ À§ÇÑ º¸¾È ¼³Á¤À» ¹Ýµå½Ã ÇØÁÖ¾î¾ß¸¸ Çϴµ¥, Áö±ÝÀÇ À©µµ¿ìÁî ȯ°æ¿¡¼ ±× "½Å·Ú¹Þ´Â" ¸ðµâ¿¡ ´ëÇÑ ¼±ÅÃÀ¸·Î ¿ì¸®°¡ ÃëÇÒ ¼ö ÀÖ´Â Çö½ÇÀûÀÎ ¹æ¾ÈÀº "ActiveX" »ÓÀÌ´Ù. ¹°·Ð, Á¶±Ý ´ú Çö½ÇÀûÀÎ ¹æ¹ýµµ ¸î°¡Áö°¡ ÀÖ´Ù. ¿¹¸¦ µé¾î, º¸¾È¼³Á¤À» ÇØÁÖ´Â .NET µ¶¸³ ½ÇÇàÆÄÀÏÀ» ¸¸µé¾î¼ »ç¿ëÀÚ·Î ÇÏ¿©±Ý ´Ù¿î·Îµå ¹Þ°Ô Çϰí Á÷Á¢ ½ÇÇàÇØ ÁÖ´Â °Íµµ ¹æ¹ýÀÌ´Ù. ¹°·Ð, ±×·¸°Ô »ç¿ëÀÚ·Î ÇÏ¿©±Ý ´Ü°è¸¦ ´õ °ÅÄ¡µµ·Ï ÇÏ´Â °ÍÀ» À¥ »çÀÌÆ® ¿î¿µÀÚÀÔÀå¿¡¼´Â ¿øÇÏÁö ¾ÊÀ» °ÍÀÌ´Ù. »ç½Ç »ç¿ëÀÚµéÀÌ ±×·± ´Ü°è¸¦ ½È¾îÇϱ⠶§¹®¿¡ ¿î¿µÀÚ ¿ª½Ã ¿øÇÏÁö ¾Ê°Ô µÈ´Ù. »ç¿ëÀÚµéÀº ¸ðµç °ÍÀÌ "¿øÅ¬¸¯" ¹æ½ÄÀ¸·Î ÀÌ·ç¾îÁö±â¸¦ ¹Ù¶ó°í °¡´ÉÇÏ¸é ¾î¶°ÇÑ Áú¹®µµ, ¾î¶°ÇÑ ÆË¾÷µµ ¶ß´Â °ÍÀ» ¿øÄ¡ ¾Ê´Â´Ù. ±×·¸±â ¶§¹®¿¡ °á±¹ Çö½ÇÀûÀÎ ¹æ¾ÈÀ¸·Î, ÀÎÁõ¼¸¦ Æ÷ÇÔÇÑ ActiveX °¡ ½ÇÇàÀÌ µÇ¾î¼ »ç¿ëÀÚ´Â ´ÜÁö "È®ÀÎ" ¹öư¸¸ ´·¯ÁÖ¸é º¸¾È¼³Á¤ÀÌ ³¡³ª°Ô µÇµµ·Ï °³¹ßµÇ¾î¾ß ÇÒ ¼ö ¹Û¿¡ ¾ø´Â °ÍÀÌ´Ù.
±×·¯´Ï, °á±¹ ´Ù½Ã "ActiveX" ·Î µ¹¾Æ¿Â °ÍÀÌ´Ù. ¹°·Ð, ÀÌÀü»óȲ°ú´Â ¸¹ÀÌ ´Ù¸£´Ù. ´ÜÁö ¼³Á¤ÇÏ´Â °Í¿¡¸¸ "ActiveX" ¸¦ »ç¿ëÇÒ »Ó ³ª¸ÓÁö ¸ðµç ÄÁÆ®·Ñ¿¡ ´ëÇØ¼´Â .NET ½º¸¶Æ® Ŭ¶óÀÌ¾ðÆ®·Î Á¦ÀÛµÉ °ÍÀ̹ǷΠ»ý»ê¼º Ãø¸é¿¡¼´Â ¿©ÀüÈ÷ ¿ìÀ§¸¦ Â÷ÁöÇÏ°Ô µÈ´Ù. ±×¸®°í, ÇѰ¡Áö ´Ù¸¦ ¼ö ÀÖ´Â Á¡ÀÌ Çϳª ´õ ÀÖ´Ù. °í±Þ »ç¿ëÀÚ¸¦ À§ÇÑ "º¸¾È¼³Á¤" ¹æ¹ýÀ» ¼³¸íÇÏ´Â µµ¿ò¸»À» ÇØ´ç À¥»çÀÌÆ®¿¡ ¿Ã·Á ³õ´Â ´Ù¸é, »ç¿ëÀÚµéÀº ÇÑ°á ¸¶À½ ÆíÇÏ°Ô ActiveX ¸¦ ¼³Ä¡ÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù. Áï, ÇØ´ç ActiveX ´Â ±×·¸°Ô °ø°³ÇÑ "º¸¾È¼³Á¤" ÀÌ¿ÜÀÇ °ÍÀº ¾Æ¹«°Íµµ ÇÏÁö ¾Ê´Â ´Ù´Â ¹«¾ðÀÇ ¾à¼ÓÀ» »ç¿ëÀڵ鿡°Ô ÇØÁÙ ¼ö Àֱ⠶§¹®ÀÌ´Ù. ±×·± ¼±ÅÃÀÌ ÁÖ¾îÁø´Ù¸é ³»·Á¹Þ´Â ActiveX ÄÁÆ®·Ñ¿¡ ´ëÇØ¼ »ç¿ëÀÚµéÀº ÀÌÀüº¸´Ù ÈξÀ ½Å·Ú¸¦ ÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù.
ÀÌ¹Ì º¸¾È¿¡ °ü°èµÇ¾ú´ø APTC Ư¼ºÀ» »ìÆìº¸¸é¼ ´À³¢´Â °ÅÁö¸¸, º¸¾ÈÀº ¿ª½Ã ¾î·Á¿î °ÍÀ¸·Î ´Ù°¡¿Â´Ù. »ç½Ç µéÃ纸¸é ±×´ÙÁö ¾î·ÆÁö ¾ÊÁö¸¸ ±× µ¿¾È ¹è¿ö¿Â ´Ù¸¥ °Íº¸´Ù »ó´ëÀûÀÎ ±âÁØÀ¸·Î ¾î·Æ±â ¶§¹®¿¡ ´Ù°¡¼´Â °ÍÀÌ °¡Àå ¸¶Áö¸· ´Ü°è·Î ¹Ð·Á³ª±â ¸¶·ÃÀÌ´Ù. ÇÊÀÚµµ ¾ÆÁ÷ .NET Framework ¿¡¼ Á¦°øµÇ´Â Code Access Security ¿¡ ´ëÇÑ ±íÀº Áö½ÄÀÌ ¾øÀ¸¹Ç·Î ½º¸¶Æ® Ŭ¶óÀÌ¾ðÆ® ºÐ¾ß¿¡ ÇØ´çÇÏ´Â º¸¾È¼³Á¤ ºÎºÐÀ» À§ÁÖ·Î ¼³¸íÇØ ³ª°¡°Ú´Ù. ±× ÀÌ¿ÜÀÇ Á»´õ ÀÚ¼¼ÇÑ .NET º¸¾È¿¡ ´ëÇÑ ÀÚ·á´Â "Âü°í URL" ¿¡ ÀÖ´Â º¸¾È °ü·Ã ÀڷḦ ÀоîÁֱ⠹ٶõ´Ù. ¿©±â¼´Â, ¿¬Àç 1ȸ¿¡¼ ´Ù·é ¼öÀÛ¾÷ º¸¾È¼³Á¤À» ÇÁ·Î±×·¥À¸·Î ÀÚµ¿ÈÇØÁÖ´Â ¾ÖÇø®ÄÉÀ̼ÇÀ» Á¦ÀÛÇØ º¼ °ÍÀÌ´Ù. ±×¸®°í, ±× ¹æ¹ý¿¡´Â 2°¡Áö°¡ Àִµ¥, ù¹øÂ°´Â Caspol.exe ¸¦ ½ÇÇà½ÃÄÑ ¼³Á¤ÇÏ´Â ¹æ¹ýÀÌ ÀÖ°í, µÎ¹øÂ°´Â .NET BCL ¿¡¼ Á¦°øµÇ´Â System.Security ¸¦ ÀÌ¿ëÇÑ ÇÁ·Î±×·¡¹ÖÀ¸·Î Á÷Á¢ Á¦¾îÇÏ´Â ¹æ¹ýÀÌ ÀÖ´Ù.
2°¡Áö ¹æ¹ýÀ» ¼Ò°³Çϱ⿡ ¾Õ¼ ±âº»ÀûÀÎ »çÇ׺ÎÅÍ Â¤°í ³Ñ¾î°¡ÀÚ. ¸ÕÀú, ¿ì¸®°¡ Áö³ 1ȸ¿¡¼ ¼³Á¤Çß´ø "SmartClientSet" ±ÇÇÑÁýÇÕ°ú "InternetSmartClient_Zone" ÄÚµå±×·ì¿¡ ´ëÇÑ º¯°æÀÌ ¾îµð¿¡ ÀúÀåµÇ´ÂÁö ¾Æ·¡ÀÇ Ç¥¸¦ ÂüÁ¶ÇÏÀÚ.
Enterprise |
%SystemRoot%\Microsoft.NET\Framework\v1.0.3512\config\enterprisesec.config
|
Machine |
%SystemRoot%\Microsoft.NET\Framework\v1.0.3512\config\security.config
|
User |
%APPDATA%\Microsoft\CLR Security Config\v1.0.3512\security.config
|
* SystemRoot : C:\Windows¿Í °°ÀÌ OS °¡ ¼³Ä¡µÈ Æú´õ
* APPDATA : C:\Documents and Settings\Administrator\Application Data¿Í °°ÀÌ ÇöÀç ·Î±×ÀÎÇÑ °èÁ¤ÀÇ ÀÀ¿ë ÇÁ·Î±×·¥ µ¥ÀÌÅ͸¦ ÀúÀåÇÏ´Â Æú´õ.
¿¬Àç 1ȸ¿¡¼ »ìÆìº» °Íó·³, "Microsoft .NET Framework 1.1 ±¸¼º" MMC Äֿܼ¡ º¸¸é, "³»ÄÄÇ»ÅÍ / ·±Å¸ÀÓ º¸¾È Á¤Ã¥" ÇÏÀ§¿¡ 3°¡Áö º¸¾È Á¤Ã¥À¯ÇüÀÌ ÀÖ´Â °ÍÀ» º¼ ¼öÀÖ´Ù. ±× 3°¡Áö º¸¾ÈÁ¤Ã¥ ³»¿¡¼ º¯°æµÈ ³»¿ëµéÀº À§ÀÇ Ç¥¿¡ ¼Ò°³µÈ CONFIG ÆÄÀÏ¿¡ ÀúÀåµÇ¾îÁø´Ù. Áï, ¿ì¸®°¡ ¸¸µé¾ú´ø "SmartClientSet" °ú "InternetSmartClient_Zone" ¿¡ ´ëÇÑ ¼³Á¤Àº "Security.config" ÆÄÀÏ¿¡¼ ã¾Æ º¼ ¼ö ÀÖ´Ù. ¿Ö À̰ÍÀÌ ÇÊ¿äÇÏ°Ô µÇ´Â Áö´Â Àá½Ã ÈÄ¿¡ »ìÆìº¸°Ú´Ù.
1. º¸¾È¼³Á¤ ù¹øÂ° : Caspol.exe ¸¦ ÀÌ¿ëÇÑ ¹æ¹ýÀ» »ìÆìº¸ÀÚ. ÇöÀç·Î¼´Â ActiveX ·Î º¸¾È¼³Á¤À» ÇÒ ¼ö ÀÖ´Â À¯ÀÏÇÑ ¹æ¹ýÀÌ´Ù.
Caspol.exe ´Â ´Ü¼øÈ÷ System.Security ¿¡ Àִ Ŭ·¡½º¸¦ ÀÌ¿ëÇÑ ÇϳªÀÇ EXE ½ÇÇàÆÄÀÏ¿¡ Áö³ªÁö ¾Ê´Â´Ù. µû¶ó¼, ±í°Ô »ìÆìº¼ »çÇ×Àº ¾øÁö¸¸ ÇÊ¿äÇÑ »ç¿ë¹ý°ú ÀÌ ÇÁ·Î±×·¥À» ÀÌ¿ëÇØ¼ ¾î¶»°Ô º¸¾È ¼³Á¤À» ÇÏ´ÂÁö¿¡ ´ëÇÑ ¼³¸íÀ» ÇϰڴÙ. ¿ì¼±, ¿ì¸®ÀÇ ¸ñÀû´ë·Î, "SmartClientSet" ±ÇÇÑÁýÇÕ°ú "InternetSmartClient_Zone" ÄÚµå ±×·ìÀ» Â÷·Ê´ë·Î ´Ù·ïº¸ÀÚ. ±ÇÇÑÁýÇÕÀ» Ãß°¡Çϱâ À§ÇÑ Caspol.exe ÀÇ »ç¿ë¹ýÀº ´ÙÀ½°ú °°´Ù.
caspol { -enterprise|-machine|-user } -ap <xml_file>
caspol { -enterprise|-machine|-user } -addpset <xml_file>
|
SmartClientSet ÀÇ °æ¿ì "ÄÄÇ»ÅÍ" ÇÏÀ§ÀÇ ±ÇÇÑÁýÇÕ¿¡ Ãß°¡µÉ °ÍÀ̹ǷÎ, ù¹øÂ° ÀÎÀÚ´Â "-machine" ÀÓÀ» ¾Ë ¼ö ÀÖ´Ù. ¹®Á¦´Â <xml_file> Àε¥, ÇØ´ç ±ÇÇÑÁýÇÕÀ» Ç¥ÇöÇÏ´Â XML ±¸¼ºÀ» ¼öÀÛ¾÷À¸·Î ÇÏ´Â °ÍÀº ³Ê¹« ¹ø°Å·Ó´Ù. ±×·¸±â ¶§¹®¿¡ À§¿¡ ¼Ò°³ÇÑ .config ÆÄÀϵéÀ» Àß ÀÌ¿ëÇϸé ÀÌ·± °æ¿ì ¼Õ½±°Ô ó¸®ÇÒ ¼ö ÀÖ´Ù. "Microsoft .NET Framework 1.1 ±¸¼º" MMC Äֿܼ¡¼ »õ·Î¿î ±ÇÇÑÁýÇÕÀ» »ý¼ºÇÏ°í ±×°Í¿¡ ¿øÇÏ´Â ±ÇÇѵéÀ» Ãß°¡ÇÑ ´ÙÀ½ ÀúÀåÀ» ÇÏ°Ô µÇ¸é ÇØ´ç ±ÇÇѳ»¿ëÀ» ´ãÀº XML ³ëµå°¡ ÁöÁ¤µÈ Á¤Ã¥¼³Á¤ ÆÄÀÏ¿¡ ´ã°ÜÁö°Ô µÈ´Ù. ¿¬Àç 1ȸ¿¡¼ ¼Ò°³Çß´ø "SmartClientSet" ±ÇÇÑ ÁýÇÕÀÇ °æ¿ì¿¡´Â "security.config" ÆÄÀÏ¿¡ ÀÖÀ¸´Ï, ¸Þ¸ðÀåÀ¸·Î ¿¾îº¸¸é ´ÙÀ½°ú °°Àº XML ³ëµå¸¦ ¹ß°ßÇÒ ¼ö ÀÖ´Ù.
<PermissionSet class="NamedPermissionSet" version="1"
Name="SmartClientSet" Description="Default rights given to internet applications">
<IPermission class="FileDialogPermission" version="1" Access="Open"/>
<IPermission class="IsolatedStorageFilePermission" version="1"
Allowed="DomainIsolationByUser" UserQuota="10240"/>
<IPermission class="SecurityPermission" version="1" Flags="UnmanagedCode, Execution"/>
<IPermission class="UIPermission" version="1" Window="SafeTopLevelWindows"
Clipboard="OwnClipboard"/>
<IPermission class="PrintingPermission" version="1" Level="SafePrinting"/>
</PermissionSet>
|
¾Æ½±°Ôµµ À§ÀÇ ³»¿ë¸¸À¸·Î´Â ºÎÁ·ÇÏ´Ù. ±ÇÇÑÀ» ³ªÅ¸³»´Â IPermission ¿¡¼ class ¿¡ ´ëÇØ ¿ÏÀüÇÑ ¾î¼Àºí¸® ¸íÀ» ÁöÁ¤ÇØ Áà¾ß ÇÑ´Ù. ¿¹¸¦ µé¾î¼, "FileDialogPermission" ¿¡ ´ëÇØ¼´Â "System.Security.Permissions.FileDialogPermission, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" ¶ó°í ¼³Á¤ÇØ ÁÖ¾î¾ß ÇÑ´Ù. ¹°·Ð ÀÌ ºÎºÐ¿¡ ´ëÇØ¼µµ "security.config" ÆÄÀÏ¿¡ º¸¸é "SecurityClass" ³ëµå¼Â¾È¿¡¼ °¢°¢ÀÇ ±ÇÇÑ¿¡ ´ëÇÑ ¾î¼Àºí¸® ¸íÀ» ±¸ÇÒ ¼ö ÀÖ´Ù. ÀÏÀÏÀÌ ¸ðµÎ ã¾Æ¼ ġȯÇÏ´Â °ÍÀÌ ±ÍÂúÀ» °Í °°Àºµ¥, ±×·± ºÐµéÀ» À§Çؼ Á»´õ ÆíÇÑ ¹æ¹ýÀ» ¸¶Àú ¼³¸íÇØ º¸°Ú´Ù. "Caspol.exe" ÀÇ °æ¿ì Á¤Ã¥ ¼öÁØÀ» ÁöÁ¤ÇÏ¸é ¸ðµç ÄÚµå ±×·ìÀ» Ç¥½ÃÇØ ÁÖ´Â ±â´Éµµ °¡Áö°í ÀÖ´Â µ¥ ±×°ÍÀ» ÀÌ¿ëÇϸé Á»´õ ½±°Ô "SmartClientSet" ±ÇÇÑ ÁýÇÕ¿¡ ´ëÇÑ ¿ÏÀüÇÑ XML À» ÃßÃâÇÒ ¼ö°¡ ÀÖ´Ù. ´ÙÀ½°ú °°ÀÌ ¸í·ÉÇà¿¡¼ ½ÇÇàÇØ¼ ±ÇÇÑÁýÇÕ ³»¿ªÀÌ ´ã±ä ÅØ½ºÆ® ÆÄÀÏÀ» »ý¼ºÇÏÀÚ
caspol -machine -listpset >> machinesecurity.txt
|
»ý¼ºµÈ MacineSecurity.txt ÆÄÀÏ¿¡¼ "SmartClientSet" ¸¸À» ÃßÃâÇØ¼ XML ÆÄÀÏ ( ¿¹¸¦ µé¾î¼, SmartClientSet.xml ) ·Î º°µµ·Î ÀúÀåÇØ µÎ¸é ÀÌÈÄ Caspol.exe ¿¡ ÀÇÇØ¼ »ç¿ëµÉ ¼ö ÀÖ´Â ¿ÏÀüÇÑ Çü½ÄÀÇ ±ÇÇÑÁýÇÕ XML ·Î Àç»ç¿ëµÉ ¼ö ÀÖ´Ù. ÀÌÁ¦, ´Ù¸¥ ÄÄÇ»ÅÍ¿¡¼ ÇØ´ç ±ÇÇÑ ÁýÇÕÀ» »ý¼ºÇØ º¸ÀÚ.
caspol -machine -addpset SmartClientSet.xml
|
À§ÀÇ ¸í·ÉÀ» ½ÇÇà ÈÄ Àû¿ëµÈ °ÍÀ» È®ÀÎÇÏ·Á¸é, ¹Ýµå½Ã "Microsoft .NET Framework 1.1 ±¸¼º" MMC ÄܼÖÀ» Àç½ÃÀÛ ÇØ¾ß µÈ´Ù. ±âÁ¸ ½ÇÇàµÇ¾î ÀÖ´Â MMC Äֿܼ¡¼´Â "»õ·Î °íħ" À» ÇØµµ ³ªÅ¸³ªÁö ¾Ê´Â´Ù.
±ÇÇÑ ÁýÇÕ¿¡ ´ëÇÑ Ãß°¡¹æ¹ýÀº ±×°É·Î ³¡À̰í, ÀÌÁ¨ ±× ±ÇÇÑÁýÇÕÀ» °®´Â "InternetSmartClient_Zone" ÄÚµå±×·ì À» Ãß°¡ÇØ º¸ÀÚ. ±ÇÇÑÁýÇÕÀÇ °æ¿ì¿¡´Â ÇÏÀ§ ±ÇÇÑ¿¡ ´ëÇÑ ¼³Á¤À» Ãß°¡ÇØ¾ß ÇÏ´Â °ÍÀ¸·Î ÀÎÇØ ´Ù¼Ò º¹ÀâÇÑ ¹Ý¸é, ÄÚµå±×·ìÀÇ °æ¿ì¿¡´Â º¸´Ù ´õ °£´ÜÇÏ°Ô ¼³Á¤µÈ´Ù.
caspol -machine -addgroup Internet_Zone -url http://192.168.100.19/webapp/* SmartClientSet -n InternetSmartClient_Zone
|
À§¿Í °°Àº ¸í·ÉÀ» ³»¸®°Ô µÇ¸é, Internet_Zone ÇÏÀ§¿¡ URL ¸â¹ö Á¶°ÇÀ¸·Î ¼±ÅÃµÈ "InternetSmartClient_Zone" ÄÚµå ±×·ìÀ» »ý¼ºÇÏ°Ô µË´Ï´Ù. ½ÇÁ¦ÀûÀÎ URL °æ·Î´Â ¿©·¯ºÐÀÇ È¯°æ¿¡ ¸Â°Ô ¼³Á¤ÇÑ´Ù.
Á¤¸®ÇØ º¸¸é,Caspol.exe ¸¦ ÀÌ¿ëÇØ¼ º¸¾È¼³Á¤À» ÀÚµ¿ÈÇÏ´Â ÇÁ·Î±×·¥À» °³¹ßÇÏ´Â ´Ü°è´Â ´ÙÀ½°ú °°´Ù.
1. ActiveX ÇÁ·ÎÁ§Æ® »ý¼º.
2. Resource ÆÄÀÏ·Î caspol.exe ÀÇ -listpset ¿É¼ÇÀ¸·Î ±¸ÇÑ SmartClientSet.xml ÆÄÀÏÀ» ´ã¾ÆµÐ´Ù.
3. ActiveX ÀÇ ÃʱâÈ ÇÔ¼ö³ª º°µµÀÇ ¸Þ¼µå¸¦ Á¤ÀÇÇÏ¿© caspol -addposet °ú caspol -addgroup À» ½ÇÇàÇÏ´Â CreateProcess / ShellExecute Win32 API ¸¦ ½ÇÇà
À§ÀÇ ³»¿ëÀ¸·Î ±¸ÇöÇÑ ActiveX DLL ÀÇ ¼Ò½ºÆÄÀÏÀº [¼Ò½º ´Ù¿î·Îµå]¿¡ "AxForSmartClient" ÇÁ·ÎÁ§Æ®·Î ÷ºÎÇØ ³õ¾ÒÀ¸´Ï Âü°íÇÏÀÚ.
2. º¸¾È ¼³Á¤ µÎ¹øÂ° : System.Security ¸¦ ÀÌ¿ëÇÑ º¸¾È¼³Á¤ ÇÁ·Î±×·¡¹Ö. ActiveX ¿¡¼´Â ÀÌ¿ëÇÒ ¼ö ¾ø°í .NET °³¹ß¾ð¾î·Î ¸¸µç °æ¿ì¿¡¸¸ À̿밡´ÉÇÏ´Ù.
Caspol.exe ¿¡ ´ëÇÑ »ç¿ë¹ýÀ» ¾Æ´Â °Íµµ À¯¿ëÇÏÁö¸¸, ±× ³»ºÎ¿¡¼ ¾î¶»°Ô µ¹¾Æ°¡´ÂÁö¸¦ ¾Æ´Â °Íµµ ±×¿¡ ¸øÁö ¾Ê°Ô Áß¿äÇÏ´Ù. ÇÁ·Î±×·¡¹ÖÀ¸·Î ±¸ÇöÇÏ´Â ¼ø¼µµ caspol.exe ·Î ÇÒ¶§¿Í µ¿ÀÏÇÏ´Ù. ¿ì¼± »õ·Î¿î ±ÇÇÑÁýÇÕ "SmartClientSet" À» »ý¼ºÇÑ´Ù.
NamedPermissionSet permSet = new NamedPermissionSet( "SmartClientSet", PermissionState.None );
À§¿¡¼Ã³·³ ±ÇÇÑ ÁýÇÕ »ý¼ºÀº ´Ü¼øÈ÷ Ŭ·¡½º ÀνºÅϽº Çϳª¸¦ Á¤ÀÇÇÏ´Â °ÍÀ¸·Î ³¡³´Ù. Âü°í·Î µÎ¹øÂ° ÀÎÀÚ¿¡ ´ëÇØ¼ Á»´õ ¾Ë¾Æº»´Ù¸é, NamedPermissionSet Ŭ·¡½ºÀÇ »ý¼ºÀÚ¿¡¼ PermissionState ÀÎÀÚ¸¦ ÁöÁ¤ÇÏÁö ¾ÊÀ¸¸é ±âº»ÀûÀ¸·Î "¹«Á¦ÇÑ" ¸®¼Ò½º Á¢±ÙÀÎ "Full Trust" ¿Í µ¿ÀÏÇÑ ±ÇÇÑÁýÇÕÀÌ µÈ´Ù. ±âº»ÀûÀ¸·Î ±ÇÇÑ Çã¿ëÀº PermissionState.None À¸·Î ½ÃÀÛÇØ¼ ¿øÇÏ´Â ±ÇÇÑÀ» Ãß°¡ÇÏ´Â ¹æ½ÄÀ¸·Î¸¸ °¡´ÉÇÏ¸ç ±× ¹Ý´ë·Î PermissionState.Unrestricted ·Î ½ÃÀÛÇØ¼ ±ÇÇÑÀ» Á¦°ÅÇÏ´Â °ÍÀº Çã¿ëµÇÁö ¾Ê´Â´Ù. ÀÌÁ¦ ¿ì¸®°¡ ¿øÇÏ´Â °¢°¢ÀÇ ±ÇÇÑÀÌ ¾î¶»°Ô Ŭ·¡½º·Î ±¸ÇöµÇ´ÂÁö ¾Ë¾Æº¼ Â÷·ÊÀÌ´Ù.
<IPermission class="FileDialogPermission" version="1" Access="Open"/>
|
FileDialogPermission fileDialogPerm = new FileDialogPermission( FileDialogPermissionAccess.Open );
|
<IPermission class="IsolatedStorageFilePermission" version="1"
Allowed="DomainIsolationByUser" UserQuota="10240"/>
|
IsolatedStorageFilePermission isolatedStorageFilePerm = new IsolatedStorageFilePermission( PermissionState.None );
isolatedStorageFilePerm.UsageAllowed = IsolatedStorageContainment.DomainIsolationByUser;
isolatedStorageFilePerm.UserQuota = 10240;
|
<IPermission class="SecurityPermission" version="1"
Flags="UnmanagedCode, Execution"/>
|
SecurityPermission securityPerm = new SecurityPermission( SecurityPermissionFlag.UnmanagedCode | SecurityPermissionFlag.Execution );
|
<IPermission class="UIPermission" version="1"
Window="SafeTopLevelWindows" Clipboard="OwnClipboard"/>
|
UIPermission uiPerm = new UIPermission( UIPermissionWindow.SafeTopLevelWindows, UIPermissionClipboard.OwnClipboard );
|
<IPermission class="PrintingPermission" version="1"
Level="SafePrinting"/>
|
PrintingPermission printingPerm = new PrintingPermission(PrintingPermissionLevel.SafePrinting);
|
Security.Config ÆÄÀÏ¿¡ ¼³Á¤µÈ <IPermission/> ³ëµå Çϳª´ç µ¿ÀÏÇÑ À̸§ÀÇ ±ÇÇÑ Å¬·¡½º¸¦ ¸¸µé¾î¼ Á¤ÀÇÇÑÈÄ, <IPermission/> ¼Ó¼º¿¡ ÁöÁ¤µÈ °ªµéÀ» ±ÇÇÑ Å¬·¡½ºÀÇ ¼Ó¼º¿¡ ±×´ë·Î ÁöÁ¤ÇÏ¸é µÈ´Ù. À§¿Í °°ÀÌ ±ÇÇÑ Å¬·¡½ºµéÀ» »ý¼ºÇß´Ù¸é ±ÇÇÑÁýÇÕ¿¡ NamedPermissionSet.AddPermission À» ÀÌ¿ëÇØ¼ Ãß°¡ÇÒ ¼ö ÀÖ´Ù. ÀÌ·¸°Ô ±¸¼ºµÈ ±ÇÇÑÁýÇÕ ÀνºÅϽº¸¦ "Machine" Á¤Ã¥¿¡ Ãß°¡ÇÑ ÈÄ ¼öÁ¤»çÇ×À» ¹Ý¿µÇϵµ·Ï ÇÏ¸é µÈ´Ù. ÇØ´ç Machine Á¤Ã¥¿¡ ´ëÇÑ Å¬·¡½ºÈµÈ ÀνºÅϽº¸¦ ã±â À§Çؼ´Â System.Security.SecurityManager Ŭ·¡½ºÀÇ static À¸·Î Á¤ÀÇµÈ PolicyHierarchy ¸Þ¼µå¸¦ »ç¿ëÇÏ¿© ´ÙÀ½°ú °°ÀÌ ±¸ÇöµÉ ¼ö ÀÖ´Ù.
PolicyLevel machinePolicyLevel = null;
System.Collections.IEnumerator ph = SecurityManager.PolicyHierarchy();
// ¾Æ·¡ÀÇ Äڵ带 ÅëÇØ¼ "Enterprise", "Machine", "User" Á¤Ã¥À» ¿¶÷
while( ph.MoveNext() ) {
PolicyLevel pl = (PolicyLevel)ph.Current;
if( pl.Label == "Machine" ) {
machinePolicyLevel = pl;
break;
}
}
NamedPermissionSet permSet = new NamedPermissionSet( "SmartClientSet", PermissionState.None );
///////// permSet ±¸¼º ºÎºÐ »ý·« /////////////
machinePolicyLevel.AddNamedPermissionSet( permSet );
// º¯°æµÈ »çÇ×À» security.config ÆÄÀÏ¿¡ ÀúÀå
SecurityManager.SavePolicy();
|
ÀÌ¿Í °°ÀÌ »õ·Î¿î ±ÇÇÑ ÁýÇÕÀ» »ý¼ºÇÏ°Ô µÇ´Âµ¥, »ç½Ç ´Ü¼ø ÀÛ¾÷ÀÇ ¹Ýº¹ÀÏ »Ó ±×´ÙÁö ¾î·Á¿î »çÇ×Àº ¾ø´Ù. ´ÙÀ½À¸·Î, À§¿¡¼ »ý¼ºÇÑ "SmartClientSet" ±ÇÇÑÁýÇÕÀ» °®´Â "InternetSmartClient_Zone" ÄÚµå ±×·ìÀ» »ý¼ºÇØ º¸°Ú´Ù. ÄÚµå ±×·ìÀÇ °æ¿ì µ¿ÀÏÇÑ À̸§À¸·Î CodeGroup À̶ó´Â Ŭ·¡½º°¡ Á¸ÀçÇÏÁö¸¸ Ãß»ó Ŭ·¡½ºÀÎ °ü°è·Î Á÷Á¢ »ý¼ºÇÒ ¼ö ´Â ¾ø°í ÆÄ»ýŬ·¡½ºÀÎ UnionCodeGroup À» ÀÌ¿ëÇØ¼ ÀνºÅϽºÈ ÇØ¾ß ÇÑ´Ù. UnionCodeGroup ÀÇ »ý¼ºÀÚ¿¡¼ ÇØ´ç ÄÚµå ±×·ì¿¡ Àû¿ëµÉ "¸â¹öÁ¶°Ç" °ú "±ÇÇÑÁýÇÕ"À» ÁöÁ¤ÇÏ°Ô µÈ´Ù. ±ÇÇÑÁýÇÕÀÇ °æ¿ì ¾Õ¿¡¼ »ý¼ºÇÑ permSet ÀνºÅϽº¸¦ ³Ö¾îÁÖ¸é µÇÁö¸¸, ¸â¹öÁ¶°ÇÀÇ °æ¿ì´Â ¿ì¸®°¡ ¿øÇÏ´Â »óȲÀ» ¹Ý¿µÇϴ Ŭ·¡½º¸¦ ¸¸µé¾î¾ß ÇÑ´Ù. ÇöÀç ±¸ÇöµÈ ¸â¹öÁ¶°ÇÀº ÃÑ 8 °³ °¡ ÀÖ´Ù.
Ŭ·¡½º |
°ü·Ã ¸â¹ö Á¶°Ç |
AllMembershipCondition |
¸ðµç ¾î¼Àºí¸® |
ApplicationDirectoryMembershipCondition |
¾î¼Àºí¸®°¡ ¼³Ä¡µÈ µð·ºÅ丮 |
HashMembershipCondition |
¾î¼Àºí¸®ÀÇ ÇØ½Ã °ª |
PublisherMembershipCondition |
¾î¼Àºí¸®ÀÇ ¼ÒÇÁÆ®¿þ¾î °Ô½ÃÀÚÀÇ Authenticode X.509v3 ÀÎÁõ¼ |
SiteMembershipCondition |
¾î¼Àºí¸®ÀÇ ¿øº» »çÀÌÆ® |
StrongNameMembershipCondition |
¾î¼Àºí¸®ÀÇ °·ÂÇÑ À̸§ |
UrlMembershipCondition |
¾î¼Àºí¸®ÀÇ URL |
ZoneMembershipCondition |
¾î¼Àºí¸®ÀÇ ¿øº» ¿µ¿ª |
½º¸¶Æ® Ŭ¶óÀ̾ðÆ®ÀÇ °æ¿ì À¥¿¡¼ ¹èÆ÷°¡ µÇ¹Ç·Î "UrlMembershipCondition" À» ¼±ÅÃÇØ¼ ´ÙÀ½°ú °°ÀÌ ÀνºÅϽº¸¦ »ý¼ºÇØ¾ß ÇÑ´Ù.
IMembershipCondition memberShipCondition = new UrlMembershipCondition( "http://127.0.0.1/webapp/*" );
|
¹°·Ð, À§¿¡ ÁöÁ¤µÈ URL Àº °¢ÀÚ ÀÚ½ÅÀÇ »óȲ¿¡ ¸Â°Ô ¼öÁ¤À» ÇØ¾ß ÇÑ´Ù. ÀÌ·¸°Ô ÄÚµå ±×·ì¿¡ ´ëÇÑ ¸â¹ö Á¶°ÇÀÌ °áÁ¤µÇ¾úÀ¸¸é UnionCodeGroup À» »ý¼ºÇÒ ¼ö ÀÖ´Ù.
// ÀÌÀü¿¡ »ý¼ºÇØ µÎ¾ú´ø SmartClientSet ±ÇÇÑÁýÇÕÀ» °®´Â PolicyStatement Ŭ·¡½º »ý¼º
PolicyStatement policyStatement = new PolicyStatement( permSet );
// ±ÇÇÑÁýÇÕ°ú ¸â¹öÁ¶°ÇÀ» °®Ãá ÄÚµå ±×·ìÀ» »ý¼º
CodeGroup smartClientGroup = new UnionCodeGroup( memberShipCondition, policyStatement );
smartClientGroup.Name = "InternetSmartClient_Zone";
// Machine Á¤Ã¥ÀÇ ÄÚµå ±×·ì¿¡ Ãß°¡
level.RootCodeGroup.AddChild( smartClientGroup );
|
»ý¼ºÀÚ¿¡¼ ¸â¹öÁ¶°Ç°ú ±ÇÇÑÁýÇÕÀ» ÁöÁ¤Çϰí, ÀÌÈÄ Name ¼Ó¼º¿¡ »ý¼ºµÉ ÄÚµå ±×·ì¿¡ ´ëÇÑ À̸§À» ÁöÁ¤ÇÏ¸é µÈ´Ù. ±×·± ÈÄ, Code Group À» ÀÌ¹Ì Á¤Ã¥¿¡ Æ÷ÇԵǾî ÀÖ´Â ±âÁ¸ ÄÚµå±×·ìÀÇ ÀڽĿ¡ Ãß°¡Çϰí SecurityManager.SavePolicy() ¸Þ¼µå¸¦ È£ÃâÇÏ¸é ¸ðµç ¼³Á¤ÀÌ ³¡³´Ù. ¿ÏÀüÇÑ ½ÇÇà ÄÚµå´Â [¼Ò½º ´Ù¿î·Îµå]¿¡ "SmartClientSecuritySetup" À̶ó´Â C# ÄÜ¼Ö ÇÁ·ÎÁ§Æ®¸¦ Ãß°¡ÇßÀ¸´Ï Âü°íÇÏÀÚ.
ºñ·Ï °³¹ßÀÚÀÎ ¿©·¯ºÐµéÀº ÇÁ·Î±×·¡¹ÖÀ» ÅëÇÑ º¸¾È¼³Á¤À» ¾Æ´Â °Íµµ Áß¿äÇÏÁö¸¸, Çö½ÇÀûÀÎ ÀÌÀ¯·Î ÀÎÇØ ÇÊÀÚÀÇ °æ¿ì¿¡´Â "Caspol.exe" ¸¦ ÅëÇÑ º¸¾È ¼³Á¤À» ÃßõÇÑ´Ù. C/C++ ·Î ¸¸µç ActiveX ¿¡¼µµ »ç¿ëÇÒ ¼ö ÀÖ´Ù´Â ÀåÁ¡µµ ÀÖÁö¸¸, ¹«¾ùº¸´Ùµµ º¹ÀâÇÑ ±ÇÇÑ ¼³Á¤À» ½±°Ô ¸¶¹«¸® ÇÒ ¼ö Àֱ⠶§¹®ÀÌ´Ù. ¸¸¾à ÇϳªÀÇ ±ÇÇÑ ÁýÇÕ¿¡ ±ÇÇÑÀÌ 30 °³¶ó¸é ±× ±ÇÇÑ ÇϳªÇϳª¿¡ ÇØ´çÇϴ Ŭ·¡½º¸¦ ÀÏÀÏÀÌ ÇÁ·Î±×·¡¹ÖÀ¸·Î ±¸ÇöÇØ¾ß ÇÒ ÅÙµ¥, ¿©°£ ±ÍÂúÀº ÀÏÀÌ ¾Æ´Ò ¼ö ¾ø´Ù. ´ë½Å¿¡ ±×·¯ÇÑ ±ÇÇѼ³Á¤À» MMC ¿¡¼ Á¦°øÇÏ´Â ¼Õ½¬¿î UI ·Î ó¸®Çϰí Caspol.exe -listgroups ¿É¼ÇÀ¸·Î ÇØ´ç ±ÇÇÑÁýÇÕÀ» XML ÆÄÀÏ·Î º°µµ ÀúÀåÇÑ ÈÄ Caspol.exe -addpset À¸·Î Ãß°¡ÇÏ´Â °ÍÀÌ ½Ã°£ÀûÀÎ ¸éÀ¸·Îµµ À¯¸®ÇÒ ¼ö ÀÖ´Ù.
±×·±µ¥, ÀÌÂë¿¡¼ Çϳª ´õ ¤°í ³Ñ¾î°¡¾ß µÇ°Ú´Ù. ¹Ù·Î ¼Óµµ ¹®Á¦ÀÌ´Ù. ¾Õ¿¡¼ "³×Æ®¿öÅ© ¸ð´ÏÅÍ" ¸¦ ÅëÇÑ ÆÐŶÀÌ ¿À°í °¡´Â °ÍÀ» »ìÆìº¸¾Ò´Âµ¥, º¸¼Ì´ø °Íó·³ ¾Æ¹« Àǹ̾ø´Â "GET" È£ÃâÀÇ °á°ú·Î ½º¸¶Æ® Ŭ¶óÀ̾ðÆ®ÀÇ È°¼ºÈ´Â ´õ¿í ´Ê¾îÁö°Ô µÈ´Ù. ºñ·Ï ¿ÏÀüÇÑ ÇØ°áÃ¥À» Á¦½ÃÇÒ ¼ö´Â ¾øÁö¸¸, <OBJECT/> ű×ÀÇ classid ¼Ó¼º¿¡ ´ëÇÑ ¶Ç´Ù¸¥ »ç¿ë¹ýÀ» °°ÀÌ ¼³¸íÇÏ¸é¼ Æ¯Á¤ÇÑ »óȲÀÇ ÄÁÆ®·ÑÀÎ °æ¿ì¿¡ ±×·¯ÇÑ ¿¬¼ÓÀûÀÎ GET ¸í·ÉÀ» ¹èÁ¦ÇÒ ¼ö ÀÖ´Â ¹æ¹ýÀ» ¼Ò°³ÇϰڴÙ. ¿ø·¡ÀÇ ActiveX ÄÁÆ®·ÑÀÇ °æ¿ì¿Í ºñ±³Çؼ Smart Client ´Â »ç½Ç classid ¼Ó¼º¿¡ ´ëÇØ¼ 2°¡Áö ¹æ½ÄÀ¸·Î »ç¿ëÇÒ ¼ö ÀÖ´Ù.
ActiveX ÄÁÆ®·Ñ |
Classid="CLSID: 108C3529-A6FF-42b4-912A-4C4754DC0273" |
Smart Client |
Classid="SmartClient.dll#SmartClient.TreeControl"
Classid="CLSID: 108C3529-A6FF-42b4-912A-4C4754DC0273" |
¹°·Ð, <OBJECT/> ÀÇ Classid ¼Ó¼º¿¡ CLSID ¸¦ ÁöÁ¤Çϱâ À§Çؼ´Â ¸î °¡Áö ¼±Çà°úÁ¤ÀÌ ÇÊ¿äÇÏ´Ù. ¿ì¼±, ÇØ´ç »ç¿ëÀÚ ÄÁÆ®·Ñ Ŭ·¡½º¿¡ GuidAttribute Ư¼ºÀ» »ç¿ëÇØ¼ CLSID ¸¦ ÁöÁ¤ÇØ¾ß ÇÑ´Ù.
[ClassInterface(ClassInterfaceType.None), ComSourceInterfaces( typeof( ITreeEvent ) )]
[Guid("108C3529-A6FF-42b4-912A-4C4754DC0272")]
public class TreeControl : System.Windows.Forms.UserControl, ......
|
±×¸®°í, ±âÁ¸ ½º¸¶Æ® Ŭ¶óÀ̾ðÆ®ÀÇ ¹èÆ÷¹æ½Ä°ú´Â ´Þ¸® ÇØ´ç DLL ÀÌ Å¬¶óÀÌ¾ðÆ® Ãø¿¡ ¹Ì¸® ´Ù¿î·Îµå µÇ¾î¼ ¾Æ·¡¿Í °°Àº µî·ÏÀ» °ÅÃÄ¾ß ÇÑ´Ù.
gacutil /i SmartClient.dll
regasm SmartClient.dll
|
À§ÀÇ 2 ´Ü°è¸¦ °ÅÃļ °¢°¢ Global Assembly Cache ¿Í ·¹Áö½ºÆ®¸®¿¡ COM °³Ã¼·Î µî·ÏÀ» ½ÃÄÑ¾ß ÇÑ´Ù. ÇÏÁö¸¸ ¹®Á¦°¡ Çϳª ÀÖ´Ù. ¾Æ¹«·¡µµ IEHost.dll Àº Smart Client ¿¡ ´ëÇÑ Å¬¶óÀÌ¾ðÆ® Ãø Ȱ¼ºÈ¸¦ Á¦´ë·Î Áö¿ø¸øÇÏ´Â µí Çѵ¥, ÄÁÆ®·Ñ ÀÚü´Â <OBJECT/> ¾È¿¡¼ Á¤»óÀûÀ¸·Î Ȱ¼ºÈ°¡ µÇ´Âµ¥ HTML ½ºÅ©¸³Æ®»ó¿¡¼ ÇØ´ç ÄÁÆ®·Ñ¿¡ ´ëÇÑ ¸Þ¼µå, ¼Ó¼º È£ÃâÀÌ ¸·Çô¹ö¸°´Ù. ±×·¯´Ï±î, ƯÁ¤ÇÑ »óȲ Áï, HTML ½ºÅ©¸³Æ®¿Í »óÈ£ÀÛ¿ëÇÏÁö ¾Ê´Â ÄÁÆ®·ÑÀ̶ó¸é À§¿Í °°Àº ¹æ¹ýÀ¸·Î Ȱ¼ºÈ¸¦ ÇÏ°Ô µÇ¸é HTTP GET È£Ãâ¿¡ ´ëÇÑ ¿À¹öÇìµå¸¦ ÁÙÀÏ ¼ö ÀÖ´Ù. °Ô´Ù°¡ Ŭ¶óÀÌ¾ðÆ® Ãø Ȱ¼ºÈÀ̹ǷΠº¸¾È¿¡ ´ëÇÑ ÇѰ谡 ¾ø¾îÁö¹Ç·Î Ưº°ÇÑ º¸¾È ¼³Á¤ÀÌ Çʿ䰡 ¾ø¾îÁø´Ù. °á±¹, ÀÏ¹Ý ActiveX ¿Í µ¿ÀÏÇÑ ±ÇÇÑÀ» °®´Â´Ù°í º¸¸é µÈ´Ù. ¹°·Ð, ±×·¯ÇÑ °æ¿ì°¡ ±×´ÙÁö ¸¹Áö´Â ¾Ê°ÚÀ¸³ª ±×·¯ÇÑ °¡´É¼ºÀÌ ÀÖ´Ù´Â °ÍÀ» ¾Æ´Â °Í¸¸À¸·Îµµ ³ªÁß¿¡ µµ¿òÀÌ µÉ ¶§°¡ ÀÖÀ» °ÍÀÌ´Ù.
¿©±â±îÁö ½º¸¶Æ® Ŭ¶óÀÌ¾ðÆ®¿¡ °üÇØ¼´Â ¾ê±âÇÒ °ÍÀ» ¸ðµÎ ÇÑ °Í °°´Ù. ÀÌÁ¦ ¸¶Áö¸·À¸·Î µð¹ö±ëÇÏ´Â ¹æ¹ý¿¡ ´ëÇØ¼¸¸ ¾ð±ÞÇϰí À̱ÛÀ» ¸¶Ä¥±î ÇÑ´Ù. ±âÁ¸ ÅëÇÕȯ°æ¿¡ Àͼ÷ÇÑ °³¹ßÀÚµéÀÇ °æ¿ì ¹«Á¶°Ç "F5" ´ÜÃà۸¦ ´·¯¼ ½ÇÇàÇÏ¸é µð¹ö±× ¸ðµå·Î ÁøÇàÇÒ °ÍÀ̶ó°í »ý°¢ÇÒ ÅÙµ¥, ½º¸¶Æ® Ŭ¶óÀ̾ðÆ®ÀÇ °æ¿ì¿¡´Â ±×°ÍÀÌ Àû¿ëµÇÁö ¾Ê´Â´Ù. ½ÇÇà°úÁ¤À» »ý°¢Çغ¸¸é ±× ÀÌÀ¯¸¦ ¾Ë ¼ö ÀÖÀ» ÅÙµ¥ ¿ì¼±, IE ÀÇ ÁÖ¼Òâ¿¡¼ http://127.0.0.1/webapp/webform1.aspx ¶ó°í ÀÔ·ÂÇØ¼ À¥ÆûÀ» ¹æ¹®ÇÏ°Ô µÇ¸é <OBJECT/> ·Î Æ÷ÇԵǾî ÀÖ´ø SmartClient.DLL Àº Ŭ¶óÀÌ¾ðÆ® ÃøÀ¸·Î ´Ù¿î·Îµå µÇ¾îÁ®¼ ij½¬Æú´õ¿¡ ´ã±â°Ô µÈ´Ù. ij½¬Æú´õÀÇ À§Ä¡´Â Ž»ö±â¸¦ ÅëÇØ¼ È®ÀÎÇÏ´Â °æ¿ì GAC Æú´õ ÇÏÀ§¿¡ "Download" ¶ó´Â Æú´õ·Î µÇ¾î ÀÖ´Ù. ÅëÇÕȯ°æ¿¡ ·ÎµùµÇ¾î¼ µð¹ö±ëÇÏ·Á°í ÇÏ´Â ´ë»óÀº WebApp À¥ °¡»ó µð·ºÅ丮¿¡ ´ã±ä SmartClient.DLL Àε¥ Á¤ÀÛ Internet Explorer ¿¡ ·ÎµùµÇ´Â °ÍÀº Cache Æú´õ¿¡ ÀÖ´Â SmartClient.DLL ÀÌ´Ï µð¹ö±ëÀÌ ¾ÈµÇ´Â °ÍÀÌ´Ù. ÀÌ·± »óȲ¿¡¼´Â µð¹ö±ëÀ» "F5" ·Î´Â ºÒ°¡´ÉÇϰí, VS.NET ÅëÇÕȯ°æÀÇ "µµ±¸¸Þ´º" ¿¡ ÀÖ´Â "ÇÁ·Î¼¼½º µð¹ö±×" ±â´ÉÀ» ÀÌ¿ëÇØ¾ß ÇÑ´Ù.
1. Internet Explorer ¸¦ ½ÇÇàÇÑ´Ù.
2. VS.NET ÅëÇÕȯ°æ¿¡¼ "µµ±¸" / "ÇÁ·Î¼¼½º µð¹ö±×" ¸Þ´º¸¦ ¼±ÅÃ.
3. ¾Æ·¡ ȸ鿡¼¿Í °°ÀÌ IEXPLORE.EXE ¸¦ ¼±ÅÃÇÑ ÈÄ, ¿ìÃøÀÇ "¿¬°á" ¹öư Ŭ¸¯
4. ¾Æ·¡¿Í °°Àº ȸéÀÌ ³ª¿À°Ô µÇ´Âµ¥ ¹Ýµå½Ã "Common Language Runtime" °ú "Native" ¸¦ Æ÷ÇÔ½ÃÄÑ¾ß ÇÑ´Ù. CLR Äڵ常 µð¹ö±ëÇÒ »ÓÀ̶ó°í ÇØ¼ Native ¸¦ üũÇÏÁö ¾ÊÀ¸¸é IE ³»ºÎ¿¡¼ Ȱ¼ºÈµÈ ½º¸¶Æ® Ŭ¶óÀ̾ðÆ®ÀÇ µð¹ö±ëÀÌ ºÒ°¡´ÉÇÏ´Ù
5. ±×·¸°Ô µÇ¸é VS.NET ÅëÇÕȯ°æÀº "F5" ·Î ½ÃÀÛÇÑ µð¹ö±ë»óȲ°ú µ¿ÀÏÇÑ È¯°æÀ¸·Î ÀüȯÀÌ µÇ°í Áß´ÜÁ¡ÀÌ À§Ä¡ÇÑ °÷¸¶´Ù Á¤»óÀûÀ¸·Î ¸ØÃß°Ô µÈ´Ù.
±×¸®°í, ÇÊÀÚÀÇ °æÇè»óÀ¸·Î ¾òÀº ÆÁÀ» Çϳª ´õ ¸»ÇÏÀÚ¸é ÇØ´ç ÄÁÆ®·ÑÀÌ Å¬¶óÀÌ¾ðÆ® Ãø GAC\Download Æú´õ¿¡ ij½¬µÈ´Ù°í ¾ð±ÞÇß¾ú´Âµ¥, °¡²û Internet Explorer °¡ ¼¹ö¿¡ ÀÖ´Â ÃֽŠDLL À» ·ÎµåÇÏÁö ¾Ê°í ij½¬Æú´õ¿¡ ÀÖ´Â DLL À» ·ÎµåÇÏ´Â »óȲÀÌ ¹ß»ýÇÏ°Ô µÈ´Ù. ij½¬Æú´õ°¡ GAC ÇÏÀ§¿¡ ÀÖ´Â °ÍÀ¸·Î ÁüÀÛÇÒ ¼ö ÀÖ°ÚÁö¸¸ ½º¸¶Æ® Ŭ¶óÀÌ¾ðÆ® Ä³½¬ Æú´õ ¿ª½Ã Gacutil.exe ¿¡ ÀÇÇØ¼ °ü¸®µÇ¾îÁø´Ù. ¾Õ¼ ¸»¾¸µå·È´ø DLL Àç»ç¿ëÀ¸·Î ÀÎÇÑ ¹®Á¦°¡ ¹ß»ýÇÏ´Â °æ¿ì¿¡´Â ¸í·ÉÇà¿¡¼ "gacutil /cdl" ÇÏ°Ô µÇ¸é Download Æú´õ¿¡ ÀÖ´Â ¸ðµç ij½¬µÈ DLL µéÀ» ºñ¿ö¹ö¸®°Ô µÈ´Ù. Âü°í·Î, ¸í·ÉÇà¿¡¼ Download Æú´õ°æ·Î¸¦ ã¾Æ°¡·Á¸é C:\Windows\assembly\temp Æú´õÀÌÁö¸¸, ij½¬µÈ DLL Àº "/ldl" ¿É¼ÇÀ» ÁÖ¸é gacutil.exe °¡ º¸´Ù ´õ Æí¸®ÇÏ°Ô º¸¿©ÁØ´Ù.
¿¬Àç 3ȸ¸¦ ¸¶Ä¡¸ç
¿©±â±îÁö, ½º¸¶Æ® Ŭ¶óÀÌ¾ðÆ®¸¦ Internet Explorer ¿¡¼ »ç¿ëÇϱâ À§ÇÑ ³»¿ëÀ» ´Ù·ïºÃ´Ù. ÇÊÀڷμ´Â ±âÁ¸¿¡ ÃâÆÇµÈ Ã¥µé¿¡¼ ÈçÈ÷ º¼ ¼ö ÀÖ´Â ³»¿ëÀ» Á¾ÇÕÇØ¼ ´Ù·ç±â º¸´Ù´Â ¾îµð¼µµ ½±°Ô ã¾Æ º¼ ¼ö ¾ø´Â °ÍÀ» À§ÁÖ·Î ±ÛÀ» ½á³ª°¬±â ¶§¹®¿¡ ¿ÀÈ÷·Á ½º¸¶Æ® Ŭ¶óÀÌ¾ðÆ®¿Í °ü°èµÇ¾î Àß ¾Ë·ÁÁø »çÇ×µéÀº °ÅÀÇ ´Ù·çÁö¸¦ ¾Ê¾Ò´Ù. ¿ÀÈ÷·Á ±×¿Í °ü°èµÈ ÀϹÝÀûÀÎ °Íµé¿¡ ´ëÇØ¼´Â ´Ù¸¥ Ã¥À» ÇѹøÂë Àо´Â °Íµµ ÁÁÀ» °Í °°´Ù. ÇÊÀÚ ³ª¸§´ë·Î´Â ½º¸¶Æ® Ŭ¶óÀ̾ðÆ®ÀÇ È°¼ºÈ´Â ½Ã°£ÀûÀÎ ¹®Á¦¸¸ ÀÖÀ» »Ó ±× Ȱ¿ë¼ºÀº ¹«±Ã¹«ÁøÇÏ´Ù°í º¼ ¼ö ÀÖ´Ù. ¶ÇÇÑ °³ÀÎÀûÀÎ ¹Ù·¥À̶ó¸é, ½º¸¶Æ® Ŭ¶óÀÌ¾ðÆ®¿Í ±âÁ¸ Legacy COM ±¸Çö°ü°è¿¡ ´ëÇÑ Á»´õ ¸¹Àº ±â¼ú °ø°³¿Í Çù·ÂÀÌ ÀÖ¾úÀ¸¸é ÇÏ´Â °ÍÀÌ´Ù. ±×·± Á¤º¸°¡ ¸¹ÀÌ °ø°³µÉ¼ö·Ï ±âÁ¸ÀÇ ¸¹Àº ActiveX °³Ã¼µéÀÌ º¸´Ù ´õ ½±°í ºü¸£°Ô ½º¸¶Æ® Ŭ¶óÀÌ¾ðÆ®·Î º¯°æµÉ ¼ö Àֱ⠶§¹®ÀÌ´Ù.
Âü°í URL
.NET Zero Deployment : Security and Versioning Models in the Windows Forms Engine Help You Create and Deploy Smart Clients
http://msdn.microsoft.com/msdnmag/issues/02/07/NetSmartClients/
.NET CAS º¸¾È : Code Access Security in Practice
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnnetsec/html/thcmch08.asp
Security in .NET : The Security Infrastructure of the CLR Provides Evidence, Policy, Permissions, and Enforcement Services
http://msdn.microsoft.com/msdnmag/issues/02/09/SecurityinNET/default.aspx
VS.NET 2003 µµ¿ò¸» : Increasing Permissions for Web-Deployed Windows Forms Applications
ms-help://MS.VSCC.2003/MS.MSDNQTR.2003FEB.1042/dnforms/html/winforms11122002.htm
°Á ¸ñ·ÏÀ¸·Î..
|