˟΂‹ Þ›ŸÁ ÁÍ Ëߊ ÿÁß‚‡ ÿ‚ à›‚œÍƒ

Todd Sundsted à…Œßœ
JavaWorld
Í•ÎßÍŸ„ ΂œžŒ :݇ͅ›


àšŠ
ÿ‚éœéé› àƒ Áß‚‡ ÍË ÅŸœ›Á .ËÍÁË ÿ…ß‚•…› ÿœ‚› Ø™…Š› ËÁÍ•Á ÍÕœ ÎÁ ÅŸœ›Á
àËÍé— Ñß›ÁÍ• ÁÍ Ýž› Ýßž•› ßË Ë‚›œ ÞŸÁ à…ƒ™Á .Å‹Á á΂‡› ÞŸŒ‚› ß Ë— ÅŸ‚ƒ
ÅéŸéœé›Á Ë…‹Ëœ‚‹ Ë‚… ¬Åš‚–› áÍ‹ ÞŸÁ ÍË .à—ƒŒ ÅŸœ›Á ß à›‚œÍƒ ÅŸœ›Á :Å‹Á
.ËËÿ› ÍÁÍ– ÿ‹Í̓ ËÍß› ÁÍ à—ƒŒ ß à›‚œÍƒ ¬ÿ΂‡› ÞŸŒ‚›

Ý郂Ÿÿ› ÍË Ã™’Á ¬Ýœ—ÿ› щ ÅŸœ›Á àÍ‚ƒ ÍË Þ‚‹Ëœž› ß ÞÁÍŸË› ‚ƒ à—Ÿ›‚˜œ
."Åé‹Á Þ›Á Áß‚‡" ‚žœÀ Ë‚–…Á àƒ ÁÍŸÎ Ëœ…‹Ÿœ ÞÁ͘œ àÔƒÁÍ ÞŸÁ ÍË ‚žœÀ à—
Áß‚‡ ÿ‚à›‚œÍƒ Ë‚‡ŸÁ ÍË à— ÁÍ à™ì‹› ÞŸÁ Þ‚‹Ëœž› ¬à‚ƒ…ŒÁ ÞŸÁ Þ…•ÍŸÌ„ ‚ƒ
ß àé—éƒéŒ ÅŸœ›Á ¬ÿ΂‡› ÞŸŒ‚› ÅŸœ›Á ÿœŸ Ø™…Š› àƒœ‡ à‹ ÎÁ ÁÍ ÅŸœ›Á ËŸ‚ƒ
àéœéŸé›Î ÍË Ôé–• Áß‚‡ .Ëœœ—ÿ›œ ËŸì‚… ¬ËÁË ÍÁÍ– ÿ‹Í̓ ËÍß› à›‚œÍƒ ÅŸœ›Á
.Å‹Á Þ›Á á΂‡› ÞŸŒ‚›

ÞéŸÁ ÿÁÍéƒ .ÝŸ‚›œ ÉšÁ ÁÍ Íß—Ì› ÝŸ‚•› à— ÝÍÁË ÿ‹ Åš‚–› áÍ‹ ÞŸÁ ÍË Þ›
.ÝËÿ› ÉŸŽß… Íß—Ì› àƒœ‡ à‹ ÎÁ ÁÍ Áß‚‡ ÅŸœ›Á ÍßÕœ›


ÅŸœ›Á àƒœ‡ à‹
áË‚éŸÎ Ü‚é‡éœ‡ ÞÁÍ‚˜œ à›‚œÎßÍ ß Þ‚––‰› ¬Þ‚˜ËœË à‹ß… ¬Áß‚‡ ÍßžÕ Ý‚˜œ
ß Ë— ÅŸ‚ƒ ÅŸœ›Á ÿ‚œ› àƒ Áß‚‡ ÅŸœ›Á ¬‚ÎßÍ ÞÀ ÍË .ËœËÍ— ‚„̓ ÞÀ àÍ‚ƒÍË
ÿ陉› ÿÁ͇Á ß ‚à›‚œÍƒ download ÿÁ̓ Áß‚‡ à—Ÿì‚‡œÀ ÎÁ .Ë߃ á΂‡› ÞŸŒ‚›
.Åé•‚éŸ ÅŸ›Á àËŒ download Ë— ÿÁ͇Á ÔŸ‰› ß ÿ˜ˆÍ‚„—Ÿ ¬Å•Íÿ› Í‚— àƒ ‚žœÀ
ß security manager ß class loader ÉŸ‰ Ü Ýßž•› àƒ ÅŸœ›Á ¬Ý‚˜œ ÞÀ ÍË
.Ë߃ àËŒ download Ë— ÿŸ‚‹‚œŒ

ÅéŸéœé›Á àÍ‚éƒ ÍË ¬Ý酌ߜÿ› C++ ß C Þ‚ƒÎ àƒ áË̓͂— ÿ‚à›‚œÍƒ à—Ÿ›‚˜œ
Åš‚é—éŒÁ ÞÁ͘œ ÝËÍ—ÿ› Í—• ÅŸœ›Á àƒ ÿ…–ß ‚›Á .Ý…ŒÁËœ ÿœÁ͘œ á΂‡› ÞŸŒ‚›
Ãééœ ÞÀ ÿßÍ Íéƒ à雂œÍƒ à— ÿ›…‹Ÿ‹ ‚Ÿ à›‚œÍƒ á΂‹ àË‚Ÿ„ ‚Ÿ à›‚œÍƒ ÙÔœ›
àÎßé‰ ÞËßé›éœ ËßËé‰é› ÿ‚éœéé› àéƒ à雂œÍƒ ÍË ÅŸœ›Á C++ ÍË .ÝË߃ ¬ËŒÿ›
ß (Ë錂ƒÿ› ͘ŸË ̓͂— ÞÁßœ àƒ setuid code ЗŸœßŸ ÔŸ‰› ÍË) setuid code
.ËŸÀÿ› Ü› àƒ Åœ‚›› stack Åš—Œ› ÍŸ‚‹ ß Í•‚ƒ overrun ÎÁ

àËéŒ ‘éŸÎß… à›‚œÍƒ .Å‹Á ÅŸœ›Á ÎÁ á͘ŸË àƒœ‡ ¬àËŒ ‘ŸÎß… ÿ‚à›‚œÍƒ ÿ•Í›
‚éƒ ß Ëߌ ÝŸ–› Ëߊ àƒ Ô߃͛ ÞŸŒ‚› ÍË ËŸ‚ƒ ÑŠƒ Í à— ËÍÁË ÿ•™…Š› ÿ‚ÑŠƒ
Ãß áË̓͂— à›‚œÍƒ .ËŸ‚›œ ÍÁ͖̓ Ô‚ƒ…ÍÁ ÿ›ß› à—ƒŒ ÚŸ ÿßÍ Íƒ ‚ÑŠƒ ÍŸ‚‹
Í‚éƒé…éÁ ÜÍé…霗 ÿ‚œ› àƒ à—ƒŒ àœŸ›Î ÍË ÅŸœ›Á .Å‹Á àœŸ›Î ÞŸÁ ÍË ÿ™‚†›
.Å‹Á ÿÔ‚ƒ…ÍÁ ÿ‚Ü‚œ‚— áÍÁÌ˜Î›Í ß áË̓͂— à›‚œÍƒ Á·Á ß ÞÁ̓͂—

Åé‹Á ÞŸÁ ̓ Þ‚ŒÍß… ß ËœÍÁËœ à‡ß… Åß‚•… ÞŸÁ àƒ Þ‚˜ËœË àÖ‹ß… ÎÁ áÍ‚Ÿ‹ƒ
àé› ÍË Áß‚‡ áË̓͂— ÿ‚à›‚œÍƒ ¬Å‹Á Þ›Á á΂‡› ÞŸŒ‚› ÉÔ‹ ÍË Áß‚‡ Þ߈ à—
.Ëœ…‹ Þ›Á ‚àœŸ›Î


á΂‡› ÞŸŒ‚› ÅŸœ›Á
àËß雜 Ù‡ Ëߊ àƒ ÁÍ Þ‚˜ËœË à‹ß… à‡ß… á΂‡› ÞŸŒ‚› ÅŸœ›Á ÿœšßÔ ÿ‚ž…Ë›
.ÝËÿ› ÉÍŒ àšŠ ÍßÔƒ ÁÍ á΂‡› ÞŸŒ‚› ÅŸœ›Á ÁË…ƒÁ .Ë߃

ËÍßé› ËœËŒ ÿŸ‚‹‚œŒ à…ŒÌ˜ Ü‚‹ ÑŒ ÿÔ à— ÁÍ ÅŸœ›Á ÿ‚áÍŸÌ„ ß‹À ÖÁßœÁ ͘Á
.ËœÍÁË ÍÁÍ– Íß—Ì› Å‚–ƒÔ ÍË à— ËŸƒ‚Ÿÿ› ÍË ¬ËŸË ÍÁÍ– ÿ‹Í̓



àËŒœ ÿŸ‚‹‚œŒ Ë— ΛÍ
ÎÁ ¬ËßéŒÿé› load àé—éƒéŒ ÍË ÍßÍ‹ ÎÁ ÜŸ‚• К— ÚŸ ÞÁßœ àƒ JVM à— ÿ›‚˜œ
à‚˜ˆŸ Þ›Á Ë— ÅŸ‚ƒ .ËÍÁËœ ÿšÔÁ ÍŸŠ ‚Ÿ Å‹Á Þ›Á Ë— ÅŸ‚ƒ ÿÁ͇Á ‚ŸÀ à—œŸÁ
΂é‡é› ÍŸ’ ÅŸŽß ‚Ÿ áÍ‚˜Î‚‹‚œ Ë à— ÿ…‚Ÿ™› ÿÁ͇Á ÿÁ̓ ÁÍ á΂‡› ÞŸŒ‚›
.Ëœ—ÿ›œ ÅŸÁË ¬ËœßŒÿ› Áß‚‡

.Åé‹Á Þé›Á Ëé—ÅéŸ‚éƒ àé— Ë霗ÿ› Ü‚‰ Þ‚œŸ›ÔÁ Áß‚‡ Í™Ÿ‚„›‚— ¬Üß›› ÍßÔƒ
Þ韜Áß– ‚ƒ à— ÁÍ áË— ß àËß›œ ÿ‹Í̓ ÁÍ ‚Ë— ÅŸ‚ƒ à› Áß‚‡ àËœœ— ÿŸ‚‹‚œŒ
¬ËéŒ ÿŸ‚‹‚œŒ Ë— ÅŸ‚ƒ à—œŸÁ Ó‰› àƒ .Ëœ—ÿ› ÿŸ‚‹‚œŒ ¬ËÍÁË ÅÍŸ‚“› ÍÕœ ËÍß›
.Å‹Á Þ›Á ÞÀ ÿÁ͇Á à— Ëƒ‚Ÿÿ› ÍË á΂‡› ÞŸŒ‚›


:ÝŸœ—ÿ› ÿ‹Í̓ ÁÍ ÍŸÎ Ðš—

  public
  class Test1
  {
    public
    static
    void
    main(String [] arstring)
    {
      Float a = new Float(56.78);
      Integer b = new Integer(1234);
      System.out.println(a.toString());
    }
  }


Ä‚ˆ ÁÍ 56/78 à…ŒÍ áË̓͂— à›‚œÍƒ ¬ËŸì‚›œ Á͇Á ß ÜŸ‚„›‚— ÁÍ Ðš— ÞŸÁ ͘Á
ÉšéÁ ‚éƒ ‚› .Ëߌÿ› Ë…œ› Float К— ÎÁ ÿÁàœß›œ àƒ ÍÁË–› ÞŸÁ .ËÍ— ËÁߊ
‚… ÝŸÁߊÿ› ÞÀ ÎÁ ß ÝŸËÿ› ß͕ ÁÍ á΂‡› ÞŸŒ‚› ¬Ðš— Ë— ÅŸ‚ƒ ÎÁ ÅŸ‚ƒ ÚŸ
.ÁÍ Float К— àœ Ëœ— ÁË Integer К— ÿÁ̓ ÁÍ toString() Ë…›

  Method void main(java.lang.String[])
     0 new #3
     3 dup
     4 ldc2_w #13
     7 invokespecial #8
    10 astore_1
    11 new #4
    14 dup
    15 sipush 1234
    18 invokespecial #9
    21 astore_2
    22 getstatic #10
    25 aload_1
    26 invokevirtual #12
    29 invokevirtual #11
    32 return


àéƒ Ößé‡Í á΂é‡é› ÞŸŒ‚› ¬²µ ÿ„— ÍË .Å‹Á main() Ë…› ÿ‡ßÍŠ ÿß‚‰ Ùß• Å‹Ÿ™
.Ë霗ÿ› áÍÁ̘͂ƒ ¬(10 ‚… 0 ÿ„— ÎÁ) àËŒ à…Š‚‹ "šƒ– ÁÍ Float ÎÁ ÿÁ àœß›œ
:ËÁË ÝŸÁߊ ÍŸŸ“… ÁÍ Ü›™Á Íß…‹Ë ÞŸÁ ‚›

  Method void main(java.lang.String[])
     0 new #3
     3 dup
     4 ldc2_w #13
     7 invokespecial #8
    10 astore_1
    11 new #4
    14 dup
    15 sipush 1234
    18 invokespecial #9
    21 astore_2
    22 getstatic #10
    25 aload_2
    26 invokevirtual #12
    29 invokevirtual #11
    32 return


JVM Îßéœé ÿé…Í‚éƒé àƒ .Å‹Á ΂‡› Ë— ÅŸ‚ƒ ÚŸ à‡Ÿ…œ Îßœ à— ËŸì‚›œ à‡ß…
ËéœÁßé…ÿé› àËéœéœ— ÿŸ‚‹‚œŒ ¬ÞŸÁ Ëß‡ß ‚ƒ .ËŸ‚›œ Á͇Á ÁÍ Ë— ÅŸ‚ƒ ËœÁß…ÿ›
ÍéŸÎ ÿ‚ÔŠ Ý‚Ÿ„ ¬ÝËß›œ áÍÁ̘͂ƒ ÁÍ Ðš— à— ÿ›‚˜œ .ËŸ‚›œ ÒŠŒ› ÁÍ ÅÁÍŸŸ“…
:ÝËÍ— Å•‚ŸÍË ÁÍ

  Exception in thread "main" java.lang.VerifyError:
  (class: Test1, method: main signature: ([Ljava/lang/String;)V)
  Incompatible object argument for function call


Þ‚›Í• Í—Á .Ëœ—ÿ›œ Í‚— ÿƒßŠ àƒ Ë— ¬ËŸì‚›œ Ü‚• ÍŸ’ ÁÍ àËœœ— ÿŸ‚‹‚œŒ ͘Á
.ËÍ— ÝÁߊ Å•‚ŸÍË ÁÍ 1234 Ê‹‚„ ¬Ýœ— Á͇Á ÁÍ ÍŸÎ

java -noverify Test1


¬ËßéŒ Á͇Á àËŒœ ÿŸ‚‹‚œŒ Ë— ‚… ËËÿ› à΂‡Á à— Ùß• ÚŸœ—… àƒ‚Œ› ÿŸ‚ÚŸœ—…
.˜ߌÿ› Ë ÁÍ Ößœ ÿ˜…ŠŸÍ Ý àƒ


Ößœ ÿ˜…ŠŸÍ Ý àƒ
Ößé›é‡é› ÞéŸéŸé… ÿÁ̓ áÍÁË–› Ößœ Å‚šÔÁ ÎÁ JVM ß ËÍÁË ÿßœ ¬ÿÍÁË–› Í
.Ëœ—ÿ› àË‚•…‹Á ˜͟˜ ÅÍß ÍÁË–› ÞÀ ÿßÍ Íƒ ËœœÁß…ÿ› à— ÿ…‚Ÿ™›

.Å‹Á áÍßÍŽ á΂‡› ÞŸŒ‚› ÅŸœ›Á ÿÁ̓ ¬Ößœ Å‚šÔÁ ‚ƒ Í‚˜Î‚‹ áË̓͂— à›‚œÍƒ
ÎÁ ÿé—ßé™éƒ à— Ëœ— Íß… ß ËÍߊƒ ß͕ JVM ‚… Ëߌÿ› Ë Ößœ ÿ˜…ŠŸÍ Ý àƒ
.Ë錂ƒÿ› ͘ŸË К— ÎÁ ÿÁàœß›œ ‘–Áß ÍË ¬Å‹Á К— àœß›œ ÚŸ ͘œ‚Ÿƒ à— àÕ•‚‰
áËÍéƒÍ‚é— à雂éœÍƒ ¬ËÍŸ˜ ÅÍß áΟ›À ÅŸ–•ß› ÍßÔ àƒ ÿ˜…ŠŸÍ Ý àƒ ÞŸÁ ͘Á
.Ëœ— áÍ‚—…‹Ë ¬Å‹Ÿœ К— ÉÁÍÔ ÍÕœ Ë› à— ÿÁàœß˜ àƒ ÁÍ àœß›œ ÅŸŽß ËœÁß…ÿ›
Ýé˜ÍËÍé‹ á΂‡› ÞŸŒ‚› ÁÍŸÎ ¬Ëߌÿ› àËŸ›‚œ Ößœ ÿ˜…ŠŸÍ Ý àƒ à™›‰ Å™‚‰ ÞŸÁ
Þ‚é—é›Á Îé˜Í Ößœ ÿ˜…ŠŸÍ Ý àƒ ¬Ëߌ ÿŸ‚‹‚œŒ ÉŸ‰ ÍßÔ àƒ Ðš— ͘Á .Ëߌÿ›
ÍË‚é ÁÍ Verify Error ÿ‚éÔéŠ àËéœéœ— ÿŸ‚‹‚œŒ ¬Å‹Ÿ™ ÞŸ›ßË ÍË .Å‹Ÿœ ÍŸÌ„
.Ëߌÿ› ËŸì‚… ÅŸœ›Á ¬àËŒœ Ü‚• ÍŸ’ àËœœ— ÿŸ‚‹‚œŒ à— ÿœ‚›Î ‚… .Ëœ—ÿ›

±¹¹¹ Ü‚é‹ ÍéŠÁßÁ ÍË Áß‚‡ Ë— ÅŸ‚ƒ àËœœ— ÿŸ‚‹‚œŒ ÍË áÍŠÁ ÿ‚ÔŠ ¬àœ‚…ŠƒŒßŠ
.ËŒ ÉšÁ

.˟΂‹ Ü‚• ÍŸ’ ÁÍ ÿŸ‚‹‚œŒ ÿ…‹Ë ÍßÔ àƒ ËŸœÁß…ÿ› à— ËŸŒ‚ƒ à…ŒÁË ÍÔ‚Š àƒ
Ýéžé› · ¬Ë΂‹ Ü‚• ÍŸ’ ÁÍ ÿŸ‚‹‚œŒ ËœÁß…ÿ› à— áË̓͂— ÿ‚à›‚œÍƒ ÎÁ ÿ—Ÿ
ÁÍ ÿ韂鋂œŒ ËŸœÁß…ÿ›œ ÞÀ Þß˃ à— ËÍÁË (Remote Methode Invocation) RMI
.ËŸì‚›œ Ü‚• ÍŸ’

‚é›éŒ Ößœ ÿ˜…ŠŸÍ Ý àƒ ß àËŒœ ÿŸ‚‹‚œŒ Ë— Ɖƒ› .Å‹Á Ýž› Í‚Ÿ‹ƒ JVM ÅŸœ›Á
Ü‚é‰é› ÅŸœ›Á ¬àËŒ download Ë— ËŸì‚… Þß˃ .Ëœ—ÿ› Ú›— Ùԛ ÞŸÁ ÚÍË ÍË ÁÍ
.Å‹Á


Resources
Download the source code and resource files that accompany this article:
http://www.javaworld.com/javaworld/jw-06-2001/howto/jw-0615-howto.zip

Sun's Java's Bug Chronology: http://java.sun.com/sfaq/chronology.html

The Princeton Secure Internet Programming Chronology: http://www.cs.princeton.edu/sip/history/index.php3

"Java Security Evolution and Concepts," Raghavan N. Srinivas (JavaWorld):
Part 1: Learn computer security concepts and terms in this introductory overview (April 2000)
http://www.javaworld.com/javaworld/jw-04-2000/jw-0428-security.html
Part 2: Discover the ins and outs of Java security (July 2000)
http://www.javaworld.com/javaworld/jw-07-2000/jw-0728-security.html
Part 3: Tackle Java applet security with confidence (December 2000)
http://www.javaworld.com/javaworld/jw-12-2000/jw-1215-security.html
Part 4: Learn how optional packages extend and enhance Java security (May 2001)
http://www.javaworld.com/javaworld/jw-05-2001/jw-0525-security.html

For more security-related articles, see the JavaWorld Topical Index: http://www.javaworld.com/javaworld/topicalindex/jw-ti-security.html
A complete listing of all How-To Java columns: http://www.javaworld.com/javaworld/topicalindex/jw-ti-howto.html


ÿ‡œ‹ÍÕœ
ÞŸÁ ËÍß› ÍË ÁÍ Ëߊ ÍÕœ
:ËŸŸß˜ƒ ‚› àƒ Ã™Ô›

ÑÎÍÁ ‚ƒ ÿ™ŸŠ -
ÑÎÍÁ ‚ƒ -
ÑÎÍÁÿƒ -

ÿœ šßÔ ÿ™ŸŠ -
Ë‚œ› -
à‚…ß— -

ÿŠ… ÿ™ŸŠ -
Ãߙԛ -
Å‹Ÿœ ÿŠ… ÿ•‚— àÎÁËœÁ àƒ -


:Ý‚œ

:ÚŸœßÍ…—™Á Å‹„

: Å—ÍŒ Ý‚œ








(c) Copyright 2001 IDG.net, an IDG Communications company/PC WORLD Iran. All rights reserved.