2009-07-22 5 views

Respuesta

5
  1. Como siempre, asegúrese de que la salida apropiada codificar - aviso de que estoy aquí diciendo codificar y no HtmlEncode. Si está sacando contenido de a HTML, entonces quiere use Html.Encode; sin embargo, si está dando salida a JavaScript, entonces desea usar una función de codificación de JavaScript . - Esto le ayudará en contra de Cross Site Scripting (XSS)
  2. Uso los ayudantes que le ayudan contra los ataques CSRF cuando sea necesario (o tal vez sólo por todas partes)
  3. Dependiendo de cómo se accede a su almacenamiento de datos, si se trata de una base de datos SQL, recuerde que debe Protéjase contra las inyecciones de SQL, ya sea a través de consultas parametrizadas, procedimientos almacenados, LINQ o lo que sea.
  4. Cuando realiza la prueba, asegúrese de que los datos de prueba contengan resultados dudosos (cosas donde no se pueda llamar Html.Encode se revelarán fácilmente, quizás por <script type="text/javascript">alert("XSS attack!");</script>XSS here!, lo mismo ocurre con las cosas que se inyectan en JavaScript, ¡aparezcan errores!)
  5. Cuando el enlace de modelo utiliza un enfoque de lista blanca para las propiedades, los usuarios no pueden hacer que el enlace enlace las propiedades que no están destinadas a ser atadas.
+1

Me gusta el elemento 4. No creo que haya suficientes personas que confíen en los evaluadores para hacer ese tipo de pruebas. – griegs

+0

Heh yo también, curiosamente, este es el tipo de cosa que me vino a la mente cuando tuve que pensar qué tipo de consejo les daría a los demás. Ahora puedo ver que necesito hacer una reflexión sobre esto. – kastermester

+0

Sí, estoy viendo todos estos comentarios pensando que tengo que hacer exactamente lo mismo. :) – griegs

1

Yo hago lo siguiente;

  1. Separar mis preocupaciones. Admin en administrador de carpetas, etc.
  2. [Autorizar] en todas las acciones que requieren que se encuentre conectado.
  3. Html.Encode todos los campos de entrada de datos.
  4. ActionResult Crear ([bind (prefix = "", Excluir = "id")] MyModel newModelObject) < == excluyen de identificación que se pueden utilizar en un ataque

Aparte de eso ...

1

Los siguientes son medidas generales ASP.NET

  1. Conjunto de depuración = false en web.config
  2. Encienda error personalizado
  3. Cifrar las cookies
  4. validar todas las entradas
  5. Habilitar validación de solicitud
  6. Codificar su salida
1

No utilice el valor predeterminado GET en las acciones a menos que sea absolutamente necesario.Por ejemplo, si usted tiene una acción DeleteUser que no tiene un [AcceptVerbs(HttpVerbs.Post)] en él, se le puede llamar a través de

<img src="http://yoursite/admin/DeleteUser/1" /> 

Qué va a ser llamado por quien sea "vistas" de la imagen.

+0

IMO Si un pirata informático puede inyectar una etiqueta img en una página, puede no ser difícil para él inyectar JS, que hará una publicación en la URL de eliminación. ¿Qué piensas? – Ramesh

+0

Sí, por eso sigues el consejo de @rishes y [Autorizar] las cosas sensibles también :). [Autorizar] solo no funcionará, ya que un usuario puede iniciar sesión (para la mayoría de las aplicaciones) sin ver la página. – swilliams

+0

Hmm, lo tengo, la exposición de la solicitud GET puede conducir al dominio cruzado de XSRF en todo el dominio. – Ramesh

Cuestiones relacionadas