2010-10-08 5 views
14

Supongo que esta es una pregunta general, pero estoy asistiendo a cursos introductorios a Java (SE/ME) y el material de estudio afirma que Java se usa a menudo para "fines de seguridad". Sin embargo, no explica lo que quieren decir al afirmar que Java incorpora buena seguridad.¿Por qué Java está etiquetado como un lenguaje "seguro"?

¿Es hacker a prueba? ¿Produce software altamente estable? ¿Qué?

La seguridad desde mi punto de vista (por el momento) es que está en manos del desarrollador que escribe el código, no el idioma en sí mismo.

+0

¿Estás seguro de que no dicen "seguro" en lugar de "seguro"? Esas son dos cosas completamente diferentes. –

+3

¿Puede incluir un presupuesto de sus materiales de estudio? Simplemente decir 'seguro' es bastante amplio sin más contexto. –

+0

Las presentaciones relacionadas con las conferencias hacen resaltar la "seguridad" de los puntos fuertes de Javas, el presentador continúa enumerando el uso de javas en el sistema bancario, el mercado de valores (nasdaq), tarjetas inteligentes y un par de áreas más. – Marcus

Respuesta

24

En mi humilde opinión, esa es una declaración muy engañosa. En Java, no puede acceder a matrices fuera de límite, y no tiene punteros, y por lo tanto varios fallos de seguridad como corrupción de pila o desbordamiento de búfer es imposible de explotar en Java. Pero Java no es intrínsecamente más seguro que cualquier otro idioma; es solo que hay menos posibilidades de cometer errores que pueden causar fallas de seguridad. En efecto, esto reduce los fallos de seguridad, pero es totalmente engañoso decir que Java es seguro.

+4

Generalmente, cuando la gente dice que Java es " Seguro "es exactamente por las razones por las que está estableciendo: las matrices encuadernadas y la pobre aritmética del puntero son dos errores de seguridad comunes en el código C. – aperkins

+2

Es más seguro en el sentido de que las posibilidades son menores para comprometer el sistema que ejecuta Java VM (el entorno limitado). Lo que Lie Ryan ment es que no hace que la aplicación sea más segura. es decir, todavía puede tener inyecciones de SQL, si usted mismo forja sus consultas SQL y no las evita correctamente y errores similares de "seguridad" – Tseng

+1

, librándose de lo que solía ser ** LA ** causa más común de problemas de seguridad (memoria intermedia) overrun/overflow) no es intrínsecamente más seguro que, por ejemplo, C? Usted se está contradiciendo en su propia respuesta: * "Java no es intrínsecamente más seguro que cualquier otro idioma" * (incorrecto) y * "En efecto, esto reduce los defectos de seguridad" * (correcto). entonces que eliges? Es ** NO ** porque no protege contra todos los problemas de seguridad de que no está más seguro que otros idiomas. Buena suerte escapando del VM Lie Ryan;) – SyntaxT3rr0r

3

Como Java se compila como bytecode, que se ejecuta dentro de un Virtual machine, no puede acceder al equipo en el que se ejecuta como un programa compilado de forma nativa.

+2

Esto es lo mismo que el código .net que se compila en IL y se ejecuta en el tiempo de ejecución .net. –

+2

Técnicamente no es cierto, ya que puede usar JNI para acceder a llamadas nativas al sistema, y ​​un programa java puede causar estragos en un sistema, borrando archivos, ejecutando argumentos de línea de comandos, etc. – aperkins

2

La razón general por la cual se considera que Java es más seguro que, digamos C, es porque maneja la administración de memoria por usted. En otros lenguajes, los programadores asignan su propia memoria y a menudo no lo hacen correctamente, causando desbordamientos de búfer, etc. Por supuesto, la VM Java podría contener los mismos tipos de errores, pero está bien probada con el tiempo, a diferencia de cada programa escrito por el usuario .

Por lo tanto, en ese sentido, es más seguro. Pero aún puede escribir código inseguro, porque ningún lenguaje podría protegerlo de escribir simplemente código erróneo.

3

Varios lenguajes, sobre todo C y C++, tienen una clase de errores que pueden permitir que se ejecute código arbitrario cuando se explotan, estos errores son bastante comunes y son fáciles de realizar. Estos errores son a menudo una forma de buffer overflow.

Java, y muchos otros lenguajes/plataformas eliminan esa clase de errores (bloquean errores explotables potenciales en la propia máquina virtual), que muchos afirman lo hace más seguro.

13

Hay dos cosas que hacen de Java "más seguro" que el otro idioma en ciertos aspectos:

  • límites automáticos de matriz de control, como la falta de gestión de memoria manual hacen que ciertas clases de errores de programación que a menudo causan grave de seguridad agujeros (tales como desbordamientos de búfer) imposible. La mayoría de los otros idiomas modernos comparten esta característica, pero C y C++, que eran lenguajes de desarrollo de aplicaciones dominantes (y todavía son importantes) en el momento en que Java apareció por primera vez, no.
  • El concepto Security Manager hace que sea relativamente fácil ejecutar aplicaciones Java en un "entorno limitado" que les impide dañar el sistema en el que se ejecutan. Esto jugó un papel importante en la promoción de Java durante sus primeros días, ya que los Applets se concibieron como una forma ubicua y segura de tener aplicaciones web del lado del cliente.
+0

El administrador de seguridad es más amplio que eso, y aún útil. Puede asignar diferentes permisos a diferentes bases de código. Esto es muy útil cuando descargas algún código. –

+0

He escuchado rumores de que no es tan difícil escapar de la caja de arena. –

+0

@Sami: probablemente haya versiones de Java donde sea posible; Las JVM deben recibir actualizaciones de seguridad regularmente, como cualquier otro paquete de software importante relacionado con la seguridad. Pero definitivamente no hay métodos genéricos para romper el sandbox. –

2

Es comercialización)

+1

Respuesta elegante :) –

+0

Correcto, – nehemiah

2
  1. Esta es la pregunta básica en una entrevista por qué java está segura de esto porque java es seguro porque dentro de jvm hay un software presente cuyo nombre es gerente de seguridad , cuya responsabilidad es manejar todas las cosas, si algo sucede mal .so su control/prevención de un sistema

  2. Otra cosa es que crea una interfaz entre el código fuente y el sistema (os), y ningún permiso del usuario para hacer algo mal.

+4

¿Qué significa esta respuesta? –

1

tipos También genéricos (o genéricos) tienen una semejanza superficial con plantillas en C++, tanto en su sintaxis y en sus casos de uso previstos (tales como clases de contenedores). Pero la similitud es solo superficial: los genéricos en el lenguaje Java se implementan casi por completo en el compilador, que realiza la verificación de tipos y la inferencia de tipos, y luego genera códigos de bytes comunes, no genéricos. Esta técnica de implementación, llamada borrado (donde el compilador usa la información de tipo genérico para garantizar la seguridad del tipo, pero luego la borra antes de generar el bytecode), tiene algunas consecuencias sorprendentes ya veces confusas. Mientras que los genéricos son un gran paso adelante para la seguridad del tipo en las clases de Java, aprender a usar los genéricos proporcionará casi con certeza alguna oportunidad para arañar la cabeza (ya veces maldecir) en el camino.

2

El compilador de Java convierte el código de Java en código de bytes (archivo .class) y estos códigos de bytes son luego ejecutados por Java Virtual Machine (JVM). JVM es un intérprete que se instala en cada máquina cliente que se actualiza con las últimas actualizaciones de seguridad por Internet. Cuando se ejecutan estos códigos de bytes, la JVM puede encargarse de la seguridad. Por lo tanto, se dice que Java es más seguro que otros lenguajes de programación.

0

**

> ¿Por qué Java es seguro lanquage

**

Motivo: 1. Como programa Java se ejecuta dentro de su propia máquina virtual caja de arena 2. Los datos que oculta en Java (OOP) lo convierte en uno de los idiomas seguros. Quizás algunos puntos también estén allí, pero no pueden recordarlo ahora.

3.No se utilizan punteros para evitar el acceso no autorizado al bloque de memoria.

4.No acceso a la gestión de memoria

  1. control de acceso Funcionalidad
  2. manejo de excepciones
  3. El uso de palabra clave final
  4. java paquete.de seguridad proporciona las clases e interfaces para el marco de seguridad

seguridad de Java está habilitado en cada etapa: última palabra clave clase de carga segura gestor de seguridad JIT verificación de código bytes gestión de memoria automática JSSE java extensión criptográfica firma digital jaas: servicio de autenticación y autorización de Java

Si ha aprendido esto, por favor, como

Cuestiones relacionadas