2010-07-05 19 views
16

Durante una auditoría PCI recient el auditor dijo que teníamos grandes riesgos de seguridad debidoJavascript Los comentarios son un riesgo de seguridad?

  1. Fue posible descargar recursos estáticos de nuestro sitio web, como imágenes CSS y JavaScript sin autenticación previa.
  2. Nuestro javascript tiene comentarios en él.

Personalmente, creo que esto no supone ningún riesgo para la seguridad. Las imágenes css y javascript no se crearon dinámicamente y no contenían datos en nuestro back-end, los detalles de nuestros clientes y los mecanismos.

Los comentarios en el javascript fueron simplemente explicando lo que hicieron los métodos en el archivo javascript. Cualquiera que lea JS podría haberse enterado de todos modos.

¿Cómo se ve esto "information leakage"?

¿Los comentarios dentro de javascript son realmente un riesgo de seguridad?

+0

el primer punto es un riesgo de seguridad, pero yo no lo llamaría importante. comentarios de Javascript por otro lado, un riesgo de seguridad? Eso me hizo reír en realidad. No es óptimo, eso es seguro, pero no un riesgo de seguridad. Continúa y utiliza http://developer.yahoo.com/yui/compressor/ Eliminará los comentarios y todos los espacios en blanco innecesarios. – AlexanderMP

+3

El punto importante aquí es, ¿los comentarios contienen algo NO deducible del código en sí? Al igual que la forma en que se organizan los servidores internos (cualquier nota de un servidor de base de datos separado, un nombre de servidor, o algo así), puede suponer un riesgo de seguridad. Por otra parte, también lo puede hacer el código, si le permite sacar tales conclusiones. – falstro

+0

@roe: ¿como esto? =) http://thedailywtf.com/Articles/Client-side_PHP.aspx –

Respuesta

16

Dependiendo de cuán estricta sea la auditoría, descargando imágenes, etc., sin autenticación PODRÍA verse como un riesgo de seguridad (piense en diagramas, cuadros, gráficos ...).

Eliminar comentarios en el javascript es como ofuscar el código: lo hace un poco más difícil, pero no imposible de entender lo que está pasando. JavaScript debe verse como una mejora; solo de todos modos, toda su seguridad debe estar (duplicada) en el lado del servidor. Hacer que alguien entienda lo que hace el JS no debe considerarse un riesgo.

+0

Estoy de acuerdo con la seguridad de los recursos dinámicos creados (gráficos, etc.) pero simplemente no es el caso aquí. Estamos hablando de imágenes de fondo, etc. – Wes

+0

@Wes; ¿No serán necesarios para la página de autenticación de todos modos? :) – falstro

+1

+1. ¡sí! si las imágenes (por ejemplo) no están disponibles públicamente para cualquier persona en la web pública, no deberían estar públicamente disponibles para cualquiera que tenga la URL adecuada. lo mismo es válido para cualquier contenido estático, como documentos, que se cargan en el servidor donde * algunos-pero-no-todos * los usuarios pueden descargarlo del sitio web. averiguar la URL no debe cortocircuitar las comprobaciones de seguridad. basado en su segundo párrafo, esto realmente no debería importar para los archivos css y js. –

4

Sin entrar en ellos si son un riesgo de seguridad o no, minimice su JS en entorno de producción, esto evitará la "fuga de información" y ayudará (de alguna manera al menos) a proteger la información de su sitio web.

con respecto al riesgo de seguridad, no creo que los comentarios de JS sean un riesgo en absoluto, cada contenido del sitio web (estático) se puede descargar sin autenticación. (a menos que se defina lo contrario)

+0

¿No hay formateadores de código automáticos (personalmente no he encontrado ninguno que funcione) que puedan tomar código reducido y hacerlo legible? Creo que minimizar es una buena manera para que los sitios de tráfico de gran volumen ahorren ancho de banda, pero no son realmente relevantes para la seguridad. Y uno debe diseñar una aplicación bajo la suposición de que no se puede confiar en el cliente, y los atacantes ya entienden completamente el código del lado del cliente y cualquier comunicación no encriptada entre el cliente y el servidor. –

+0

No quise decir que nadie podrá leer el código, esta es simplemente una manera rápida de eliminar todos los comentarios y hacerlo un poco menos legible con solo un vistazo, no más de eso y no debería esperar más de este proceso . – KensoDev

4

No si solo revelan cómo funciona el código. Cualquier persona suficientemente determinada podría descubrir eso de todos modos.

Dicho esto, probablemente sea una buena idea minificar el JavaScript; no por seguridad, sino porque reducirá los tiempos de descarga y, por lo tanto, hará que su sitio sea un poco más receptivo.

+0

+1. vencerme exactamente a los mismos dos puntos –

+0

Cierto, pero los comentarios normalmente no deberían revelar cómo funciona el código. Para eso es el código. Deberían decir por qué el código hace lo que hace. –

+0

Estoy de acuerdo, pero creo que la razón principal para la minificación no es ahorrar ancho de banda, ya que la mayoría de los servidores web ahora sirven contenido gzip, pero más bien para reducir el tiempo de análisis en el navegador. – Wes

3

Los comentarios de JavaScript pueden ser. depende de su lógica, pero sin duda, ya que está disponible públicamente, le está dando más visibilidad al funcionamiento de su código.

También hay otras razones para eliminar esto, como el tamaño del archivo y, como resultado, el tamaño de descarga.

Herramientas como asd JSMin pueden ayudarlo a eliminar los comentarios y realizar una ofuscación cruda del código.

+0

Estoy de acuerdo con JSMin y quiero incorporar eso en nuestras compilaciones, pero ese no es el problema en este caso. Sí, los archivos son demasiado detallados y podrían refactorizarse en métodos más pequeños y eficientes.(no es mi código) pero al final del día nos preocupamos por la seguridad sobre todo lo demás. – Wes

15

Depende del contenido del comentario. Debido a que no hay forma, sin intervención humana, de examinar el contenido de los comentarios para determinar si son riesgosos, la manera más eficiente de auditar esto es declarar todos los comentarios en el código fuente del cliente como riesgosos.

Los siguientes son ejemplos de comentarios potencialmente peligrosos.

// doesn't really authenticate, placeholder for when we implement it. 
myServer.authenticate(user,pass); 

o

// don't forget to include the length, 
//the server complains if it gets NaN or undefined. 
function send_stuff(stuff, length) { 
... 
} 

o

function doSomething() { 
    querystring = "" 
    //querystring = "?TRACING_MODE=true&" 
    ... 
    //print_server_trace(); 
} 

Otro ejemplo podría ser si se incluye una cabecera de la historia código fuente, alguien podría ser capaz de encontrar alguna debilidad en la seguridad mediante el examen de los tipos de errores que han sido corregidos. Al menos, un cracker podría ser capaz de dirigir mejor sus ataques, si sabe qué vectores de ataque ya se han cerrado.

Ahora, todos estos ejemplos son malas prácticas de todos modos (tanto los comentarios como el código), y la mejor manera de evitarlo es teniendo revisiones de código y buenos programadores. El primer ejemplo es especialmente malo, pero las advertencias inocentes a los compañeros de equipo, como el segundo ejemplo o el código de depuración comentado, como el tercero, son los tipos de agujeros de seguridad que podrían pasar por la red.

+0

Excelentes ejemplos. Gracias por agregar estos. –

+0

Lea esto de nuevo. Básicamente, su argumento es que si los comentarios revelan algo sobre la implementación del servidor, es un riesgo. Tiene sentido. O, en otras palabras, si los comentarios tienen información que no se puede deducir del código del lado del cliente. – Wes

+0

@Wes: Eso es más o menos del tamaño, sí. Otro problema podría ser un comentario grosero de la WTF, acusando a otro programador de ser un imbécil (del cual no di un ejemplo). No revela nada de la implementación del servidor, pero sigue siendo una filtración de información peligrosa que podría dañar la reputación de la empresa o facilitar un ataque de ingeniería social. –

Cuestiones relacionadas