One of the main design considerations for the Java platform is to provide a secure environment for executing mobile code. Java comes with its own unique set of security challenges. While the Java security architecture [1] can protect users and systems from hostile programs downloaded over a network, it cannot defend against implementation bugs that occur in trusted code. Such bugs can inadvertently open the very holes that the security architecture was designed to contain, including access to files, printers, webcams, microphones, and the network from behind firewalls. In severe cases local programs may be executed or Java security disabled. These bugs can potentially be used to turn the machine into a zombie computer, steal confidential data from machine and intranet, spy through attached devices, prevent useful operation of the machine, assist further attacks, and many other malicious activities.
The choice of language system impacts the robustness of any software program. The Java language [2] and virtual machine [3] provide many features to mitigate common programming mistakes. The language is type-safe, and the runtime provides automatic memory management and bounds-checking on arrays. Java programs and libraries check for illegal state at the earliest opportunity. These features also make Java programs highly resistant to the stack-smashing [4] and buffer overflow attacks possible in the C and to a lesser extent C++ programming languages. These attacks have been described as the single most pernicious problem in computer security today [5]. The explicit static typing of Java makes code easy to understand (and facilitates static analysis), and the dynamic checks ensure unexpected conditions result in predictable behaviour -- which makes Java a joy to use.
To minimize the likelihood of security vulnerabilities caused by programmer error, Java developers should adhere to recommended coding guidelines. Existing publications, such as Effective Java [6], provide excellent guidelines related to Java software design. Others, such as Software Security: Building Security In [7], outline guiding principles for software security. This paper bridges such publications together and includes coverage of additional topics. This document provides a more complete set of security-specific coding guidelines targeted at the Java programming language. These guidelines are of interest to all Java developers, whether they create trusted end-user applications and applets, implement the internals of a security component, or develop shared Java class libraries that perform common programming tasks. Any implementation bug can have serious security ramifications and could appear in any layer of the software stack.
While sections 0 through 3 are generally applicable across different types of software, most of the guidelines in sections 4 through 9 focus on applications that interact with untrusted code (though some guidelines in these sections are still relevant for other situations). Developers should analyze the interactions that occur across an application's trust boundaries and identify the types of data involved to determine which guidelines are relevant. Performing threat modeling and establishing trust boundaries can help to accomplish this (see Guideline 0-4).
These guidelines are intended to help developers build secure software, but they do not focus specifically on software that implements security features. Therefore, topics such as cryptography are not covered in this document (see [9] and [10] for information on using cryptography with Java). While adding features to software can solve some security-related problems, it should not be relied upon to eliminate security defects.
This document has been updated to cover some of the new features included in Java SE 8. However, these guidelines are also applicable to software written for previous versions of Java.
One of the main design considerations for the Java platform is to provide a secure environment for executing mobile code. Java comes with its own unique set of security challenges. While the Java security architecture [1] can protect users and systems from hostile programs downloaded over a network, it cannot defend against implementation bugs that occur in trusted code. Such bugs can inadvertently open the very holes that the security architecture was designed to contain, including access to files, printers, webcams, microphones, and the network from behind firewalls. In severe cases local programs may be executed or Java security disabled. These bugs can potentially be used to turn the machine into a zombie computer, steal confidential data from machine and intranet, spy through attached devices, prevent useful operation of the machine, assist further attacks, and many other malicious activities.
The choice of language system impacts the robustness of any software program. The Java language [2] and virtual machine [3] provide many features to mitigate common programming mistakes. The language is type-safe, and the runtime provides automatic memory management and bounds-checking on arrays. Java programs and libraries check for illegal state at the earliest opportunity. These features also make Java programs highly resistant to the stack-smashing [4] and buffer overflow attacks possible in the C and to a lesser extent C++ programming languages. These attacks have been described as the single most pernicious problem in computer security today [5]. The explicit static typing of Java makes code easy to understand (and facilitates static analysis), and the dynamic checks ensure unexpected conditions result in predictable behaviour -- which makes Java a joy to use.
To minimize the likelihood of security vulnerabilities caused by programmer error, Java developers should adhere to recommended coding guidelines. Existing publications, such as Effective Java [6], provide excellent guidelines related to Java software design. Others, such as Software Security: Building Security In [7], outline guiding principles for software security. This paper bridges such publications together and includes coverage of additional topics. This document provides a more complete set of security-specific coding guidelines targeted at the Java programming language. These guidelines are of interest to all Java developers, whether they create trusted end-user applications and applets, implement the internals of a security component, or develop shared Java class libraries that perform common programming tasks. Any implementation bug can have serious security ramifications and could appear in any layer of the software stack.
While sections 0 through 3 are generally applicable across different types of software, most of the guidelines in sections 4 through 9 focus on applications that interact with untrusted code (though some guidelines in these sections are still relevant for other situations). Developers should analyze the interactions that occur across an application's trust boundaries and identify the types of data involved to determine which guidelines are relevant. Performing threat modeling and establishing trust boundaries can help to accomplish this (see Guideline 0-4).
These guidelines are intended to help developers build secure software, but they do not focus specifically on software that implements security features. Therefore, topics such as cryptography are not covered in this document (see [9] and [10] for information on using cryptography with Java). While adding features to software can solve some security-related problems, it should not be relied upon to eliminate security defects.
This document has been updated to cover some of the new features included in Java SE 8. However, these guidelines are also applicable to software written for previous versions of Java.
การแปล กรุณารอสักครู่..
ข้อพิจารณาในการออกแบบหลักสำหรับแพลตฟอร์มจาวาเพื่อให้สภาพแวดล้อมที่ปลอดภัยสำหรับการมือถือรหัส Java มาพร้อมกับชุดเป็นเอกลักษณ์ของความท้าทายด้านความปลอดภัย ขณะที่สถาปัตยกรรมความปลอดภัย Java [ 1 ] สามารถปกป้องผู้ใช้และระบบจากที่เป็นมิตรโปรแกรมดาวน์โหลดผ่านเครือข่าย มันสามารถป้องกันข้อผิดพลาดที่เกิดขึ้นในการได้รับรหัสข้อบกพร่องดังกล่าวสามารถตั้งใจเปิดหลุมมากว่า สถาปัตยกรรมการรักษาความปลอดภัยถูกออกแบบมาเพื่อบรรจุ รวมทั้งการเข้าถึงไฟล์ , เครื่องพิมพ์ , เว็บแคม , ไมโครโฟน , และเครือข่ายจากหลังไฟร์วอลล์ ในรายที่รุนแรงในท้องถิ่น โปรแกรมอาจจะถูกประหารหรือ Java การรักษาความปลอดภัยพิการ ข้อบกพร่องเหล่านี้อาจจะถูกใช้เพื่อเปิดเครื่องเป็นซอมบี้คอมพิวเตอร์ขโมยข้อมูลที่เป็นความลับจากเครื่องและอินทราเน็ต , สายลับผ่านติดอุปกรณ์ป้องกันการดำเนินงานที่เป็นประโยชน์ของเครื่องช่วยต่อการโจมตี และกิจกรรมที่เป็นอันตรายอื่น ๆ อีกมากมาย
เลือกระบบภาษาผลกระทบต่อเสถียรภาพของโปรแกรมซอฟต์แวร์ใด ๆ ชวาภาษา [ 2 ] และ [ 3 ] ให้เครื่องเสมือนคุณลักษณะมากมายเพื่อลดข้อผิดพลาดในการเขียนโปรแกรมทั่วไป ภาษาเป็นชนิดที่ปลอดภัยและทำงานให้อัตโนมัติการจัดการหน่วยความจำและขอบเขตการตรวจสอบอย่างต่อเนื่อง โปรแกรม Java และห้องสมุดตรวจสอบสถานะผิดกฎหมายในโอกาสแรก คุณสมบัติเหล่านี้ยังให้โปรแกรม Java สูงป้องกันกองดี [ 4 ] และบัฟเฟอร์ล้นการโจมตีเป็นไปได้ใน C และจะน้อยกว่าขอบเขตการเขียนโปรแกรมภาษาการโจมตีเหล่านี้ได้รับการอธิบายเป็นหนึ่งในอันตรายที่สุดปัญหาความปลอดภัยคอมพิวเตอร์วันนี้ [ 5 ] ชัดเจนคงพิมพ์รหัส Java ทำให้ง่ายต่อการเข้าใจ ( และอำนวยความสะดวกในการวิเคราะห์แบบคงที่และแบบไดนามิก ) ตรวจสอบว่าเงื่อนไขผลทำนายพฤติกรรมที่ทำให้ Java จอย
ใช้ที่ไม่คาดคิดเพื่อลดโอกาสของการเกิดข้อผิดพลาดช่องโหว่ความปลอดภัยโปรแกรมเมอร์ , นักพัฒนา Java ควรปฏิบัติตามแนวทางที่แนะนำนะครับ . สิ่งพิมพ์ที่มีอยู่ เช่น Java ที่มีประสิทธิภาพ [ 6 ] ให้แนวทางที่ดีที่เกี่ยวข้องกับ Java ออกแบบซอฟต์แวร์ อื่นๆ เช่น ซอฟต์แวร์รักษาความปลอดภัย : การรักษาความปลอดภัยในอาคาร [ 7 ] , ร่างหลักการสำหรับการรักษาความปลอดภัยซอฟต์แวร์กระดาษนี้สะพานเช่นสิ่งพิมพ์ด้วยกัน และมีความครอบคลุมของหัวข้อเพิ่มเติม เอกสารนี้มีการตั้งค่าที่สมบูรณ์มากขึ้นของการรักษาความปลอดภัยโดยเฉพาะนะครับ แนวทางเป้าหมายที่ภาษาการเขียนโปรแกรมภาษาจาวา . แนวทางเหล่านี้เป็นที่สนใจของนักพัฒนา Java ทั้งหมดไม่ว่าจะสร้างโปรแกรมประยุกต์ของผู้ใช้ applets และเชื่อถือได้ ใช้ internals ของอุปกรณ์ความปลอดภัยหรือพัฒนาจาวาคลาสห้องสมุดที่ใช้ร่วมกันปฏิบัติงานเขียนโปรแกรมทั่วไป การรักษาความปลอดภัยใด ๆข้อผิดพลาดสามารถมี ramifications ร้ายแรงและอาจจะปรากฏในชั้นของซอฟต์แวร์สแต็ค
ในขณะที่ส่วนที่ 0 ถึง 3 โดยทั่วไปจะสามารถใช้ได้ในประเภทที่แตกต่างกันของซอฟต์แวร์ส่วนใหญ่ของแนวทางในส่วนที่ 4 ถึง 9 เน้นโปรแกรมที่โต้ตอบกับรหัสที่ไม่น่าเชื่อถือ ( ถึงแม้ว่าบางแนวทางในส่วนนี้ยังเกี่ยวข้องกับสถานการณ์อื่น ๆ ) นักพัฒนาควรวิเคราะห์ปฏิสัมพันธ์ที่เกิดขึ้นในการใช้ขอบเขตความไว้วางใจและระบุประเภทของข้อมูลที่เกี่ยวข้อง เพื่อกำหนดแนวทางที่เกี่ยวข้องการแสดงและการสร้างขอบเขตความไว้วางใจการคุกคามที่สามารถช่วยให้บรรลุนี้ ( ดูแนวทาง 0-4 ) .
แนวทางเหล่านี้มีวัตถุประสงค์เพื่อช่วยให้นักพัฒนาสร้างซอฟต์แวร์รักษาความปลอดภัย แต่พวกเขาไม่ได้มุ่งเน้นเฉพาะในซอฟต์แวร์ที่ใช้มีความปลอดภัย ดังนั้นหัวข้อ เช่น การเข้ารหัสจะไม่ครอบคลุมในเอกสารนี้ ( ดู [ 9 ] และ [ 10 ] ข้อมูลโดยใช้การเข้ารหัสด้วย Java ) ในขณะที่การเพิ่มคุณสมบัติการรักษาความปลอดภัยซอฟต์แวร์ที่สามารถแก้ไขปัญหาบางอย่าง มันไม่ควรพึ่งพาการขจัดข้อบกพร่องการรักษาความปลอดภัย .
เอกสารนี้ได้รับการปรับปรุงเพื่อให้ครอบคลุมบางส่วนของคุณสมบัติใหม่ที่รวมอยู่ใน Java SE 6 . อย่างไรก็ตามแนวทางเหล่านี้จะยังสามารถใช้ได้กับซอฟต์แวร์ที่เขียนขึ้นสำหรับรุ่นก่อนหน้าของจาวา
การแปล กรุณารอสักครู่..