2010-12-02 9 views

Respuesta

5

Depende enormemente del contexto.

Además, codificar menos que solo no es tan rápido como una idea. Usted sólo debe codificar todos los caracteres que tienen un significado especial y podrían utilizarse para XSS ...

  • <
  • >
  • "
  • '
  • &

Para una ejemplo trivial de dónde codificar menos de lo que no importará es algo como esto ...

Bienvenido a Dodgy Site. Por favor, enlace a su página de inicio.

usuario malicioso entra ...

http://www.example.com" onclick="window.location = 'http://nasty.com'; return false; 

que se hace, obviamente, ...

<a href="http://www.example.com" onclick="window.location = 'http://nasty.com'; return false;">View user's website</a> 

Tenía ha codificado comillas dobles, que el ataque no sería válido.

+1

+1 para el excelente ejemplo – Yahel

+0

+1 - Buen ejemplo. – Kyle

+0

@alex - ¿Crees que solo la codificación 'less than 'estaría bien si el único lugar en el que alguna vez emití el contenido fuera'

$ outputcontenthere

'? – Kyle

0

Si escapa a la entrada de todos los usuarios, debe estar seguro.

Eso significa TODO LO QUE APARECE EN TODOS LADOS. Incluso un nombre de usuario en un perfil.

+1

ESPECIALMENTE el nombre de usuario Pueden suceder cosas divertidas cuando un usuario en un sitio web social puede poner JavaScript en su nombre de usuario. Una lista de usuarios se muestra con bastante frecuencia en ese tipo de sitios ... :-) Dicho esto, realmente debería escapar CADA usuario ingresado, o más bien cada entrada no confiable. – paprika

+0

@paprika: Todos se verían afectados por un nombre de usuario ... No pensé en eso. – John

+8

¿De verdad le pusiste a tu hijo el nombre de "Robert")? DROP TABLE Students; - '? – eyelidlessness

2

No. Tiene que escapar de todas las entradas del usuario, independientemente de lo que contenga.

+1

Copio pegado su HTML Hex en una página de prueba, similar a cómo mostraría algo en el servidor. El texto ' 'aparece en la página, pero en realidad no ejecuta el script. ¿Cómo terminarán ejecutando HTML Hex o Base 64 Encoding? – Kyle

+0

Tienes razón. Eliminando mis ejemplos. – Yahel

2

Dependiendo del marco que esté utilizando, ahora muchos tienen un módulo de validación de entrada. Una pieza clave que les digo a los estudiantes de software cuando doy conferencias es ¡UTILICE LOS MÓDULOS DE VALIDACIÓN DE LA ENTRADA QUE YA EXISTEN!

reinventar la rueda a menudo es menos efectivo que usar los módulos ya probados que ya existen. .Net tiene la mayor parte de lo que podría necesitar: muy fácil de incluir en la lista blanca (donde sabe la única entrada permitida) o en la lista negra (un poco menos efectivo ya que las cosas "malas" siempre cambian, pero sigue siendo valioso)

Cuestiones relacionadas