La gu铆a completa para fortalecer su aplicaci贸n web y API Asp.Net Core

隆Saludad, Khabrovites! Hemos preparado una traducci贸n de una gu铆a 煤til para usted antes del inicio del curso "C # ASP.NET Core Developer" .










Con cada actualizaci贸n de .Net Core , Microsoft demuestra que .Net Core es el marco m谩s potente, vers谩til y completo disponible para desarrollar potentes aplicaciones de escritorio , m贸viles , en la nube y web . A diferencia de una aplicaci贸n de escritorio o m贸vil, una aplicaci贸n web se ejecuta en una direcci贸n p煤blica, que es una de las razones por las que la seguridad de una aplicaci贸n web es de gran importancia. Aunque Asp.Net Core est谩 dise帽ado teniendo en cuenta las mejores pr谩cticas de seguridad , todav铆a existen algunas vulnerabilidades que debemos tener en cuenta antes y despu茅s del lanzamiento de nuestro Asp.Net Coreaplicaciones.



En este art铆culo, veremos varias brechas de seguridad en las aplicaciones web Asp.Net Core y sus posibles soluciones. Comencemos enumerando algunas de las consideraciones de seguridad importantes para nuestra aplicaci贸n .Net Core .



  1. Haga su inicio de sesi贸n m谩s seguro
  2. Transfiera solo datos confidenciales encriptados
  3. Recuerde borrar sus cookies al salir
  4. Utilice siempre SSL
  5. Nunca almacene datos sensibles en su base de datos expl铆citamente
  6. Las pistas de auditor铆a y el registro son muy importantes
  7. Nunca exponga los errores t茅cnicos originales al usuario final
  8. Secuencias de comandos entre sitios (XSS)
  9. Intente ocultar la versi贸n de su .Net Core
  10. Falsificaci贸n de solicitud entre sitios (CSRF)
  11. LINQ puede proteger contra la inyecci贸n de SQL
  12. Agregar comprobaciones durante la deserializaci贸n
  13. Mantenga siempre actualizadas las versiones de sus marcos y bibliotecas


1.Haga que su inicio de sesi贸n sea m谩s seguro



La p谩gina de inicio de sesi贸n es la puerta principal de cualquier aplicaci贸n. Considere una aplicaci贸n como un panel de administraci贸n. Si una persona no autorizada obtiene acceso a su aplicaci贸n, puede controlar todo el sistema. Por lo tanto, su primer paso siempre debe ser hacer que su inicio de sesi贸n sea m谩s seguro.





A continuaci贸n, se ofrecen algunos consejos para proteger el punto de entrada de su aplicaci贸n.



USE CUENTAS COMPLEJAS



Nunca use nombres de usuario como admin y contrase帽as como 12345 , o su nombre o informaci贸n personal. Cualquiera puede aprovechar esta falla, y el bot podr谩 obtener tales credenciales en un tiempo incre铆blemente corto.



PROTEGE TU



INICIO DE SESI脫N CONTRA BRUTFORS La fuerza bruta es el tipo de ataque m谩s com煤n, que utiliza varios algoritmos para combinaciones de nombre de usuario y contrase帽a de fuerza brutapara adivinar las credenciales de inicio de sesi贸n. Adem谩s, una gran cantidad de intentos de inicio de sesi贸n pueden sobrecargar su servidor, lo que puede resultar en DoS (Denegaci贸n de servicio) y tiempo de inactividad para los usuarios reales de su aplicaci贸n.



Los ataques de fuerza bruta toman menos tiempo para adivinar nombres de usuario y contrase帽as simples , pero tambi茅n pueden adivinar combinaciones complejas usando ataques de fuerza bruta triviales.



Entonces, 驴c贸mo protege su aplicaci贸n Asp.Net de los ataques de fuerza bruta?



A continuaci贸n, se ofrecen algunos consejos para prevenir ataques de fuerza bruta :



  • Use Captcha en su p谩gina de inicio de sesi贸n, porque los bots a煤n no pueden manejar captchas.
  • IP .
  • , admin user, .
  • , (A-Z a-z), (0-9) (!, @,., #, $,%, ^, &, * ..).


驴C贸mo implementar las recomendaciones anteriores?



Las pautas anteriores pueden parecer dif铆ciles de implementar para los desarrolladores principiantes de Asp.Net Core , pero no se preocupe, existe una excelente biblioteca HackerSpray para ayudarlo a proteger su trabajo de los ataques de fuerza bruta . Todo lo que necesita hacer es configurarlo.



UTILICE SIEMPRE



LA IDENTIDAD DE .NET CORE Asp.Net Core tiene muchas bibliotecas y herramientas integradas para proteger sus aplicaciones. La autorizaci贸n tambi茅n tiene una gran implementaci贸n de Microsoft que nos brinda una personalizaci贸n completa del inicio de sesi贸n y el registro de acuerdo con las mejores pr谩cticas de seguridad.



2. Transferir datos confidenciales solo en forma cifrada



Nunca env铆e expl铆citamente su informaci贸n confidencial, como contrase帽a o credenciales de tarjetas de cr茅dito , al servidor para su verificaci贸n. Los piratas inform谩ticos pueden robar estos datos intercept谩ndolos antes de enviarlos al servidor.



Utilice siempre un algoritmo hash como md5 o SHA256 para contrase帽as y algoritmos de cifrado como AES o DES en el lado del cliente, por ejemplo, usando jQuery .





3. Recuerde borrar las cookies al salir



Al iniciar sesi贸n en la aplicaci贸n Asp.Net Core , guardamos algunos datos necesarios en la sesi贸n para mantener el inicio de sesi贸n del usuario hasta que cierre la sesi贸n. En algunas aplicaciones, establecemos el tiempo de espera de la sesi贸n , y a veces no lo hacemos, cuando el usuario marca la casilla de verificaci贸n que indica que quiere permanecer conectado en la p谩gina de inicio de sesi贸n.



Al mismo tiempo, la cookie AspNetCore.Session se agrega al navegador para realizar un seguimiento del usuario que inici贸 sesi贸n .







Por lo tanto, cuando cerramos la sesi贸n, tambi茅n debemos eliminar las cookies creadas por nuestra aplicaci贸n desde el navegador , ya que el hackerpuede utilizar esta informaci贸n para inicios de sesi贸n no autorizados. Esto tambi茅n se denomina ataque de fijaci贸n de sesi贸n .



4. Utilice siempre SSL



SSL son las siglas de Secure Socket Layer . Se encripta la comunicaci贸n entre cliente y servidor con una clave muy compleja.



Simplemente puede decirle al Starup.cs de su aplicaci贸n Asp.Net Core que siempre use una pol铆tica de cookies segura.





5. Nunca almacene datos sensibles en su base de datos de forma expl铆cita



Casi todas las aplicaciones web para almacenar datos de usuarios necesitan una base de datos , que los piratas inform谩ticos atacan en la mayor铆a de los casos precisamente para robar estos datos de usuario. Entonces, supongamos que almacena las credenciales de sus usuarios, como contrase帽as y especificaciones de facturaci贸n, en su base de datos con gran detalle y de forma limpia. Resulta que cualquiera que tenga acceso no autorizado a su base de datos puede utilizar estos datos para sus propios fines ego铆stas.



Por lo tanto, siempre almacene los datos confidenciales en su base de datos utilizando hash o cifrado .





6. Las pistas de auditor铆a y el registro son muy importantes



Las pistas de auditor铆a o los registros de actividad son muy importantes para mantenerse al tanto de lo que sucede en su aplicaci贸n. Si alguien genera una gran cantidad de intentos fallidos de inicio de sesi贸n , el administrador deber铆a recibir un correo electr贸nico inform谩ndole de esto.



Por ejemplo, si un usuario crea una nueva instancia de un usuario de aplicaci贸n o cambia los roles de uno existente, todas sus acciones deben reflejarse en los registros de su aplicaci贸n Asp.net Core .







7. Nunca exponga los errores t茅cnicos originales al usuario final.



Algunas excepciones pueden revelar informaci贸n importante sobre su aplicaci贸n, o incluso, a veces, mostrar algunas l铆neas de c贸digo al usuario final. Los atacantes son tipos inteligentes, pueden usar la informaci贸n proporcionada por su excepci贸n para piratear su aplicaci贸n.



Por lo tanto, antes de implementar la aplicaci贸n en producci贸n, aseg煤rese de haber creado una p谩gina para mostrar el error al usuario para todo tipo de excepciones y haber guardado correctamente los errores en el registro de su aplicaci贸n.







8. Secuencias de comandos entre sitios (XSS)



En los ataques XSS (Cross-Site Scripting) , los piratas inform谩ticos env铆an scripts maliciosos a trav茅s de los campos de entrada para robar las credenciales del usuario y otros datos confidenciales.



Digamos que tenemos un formulario para agregar un producto a una aplicaci贸n. El hacker agrega un nuevo producto y en el campo de descripci贸n del producto simplemente inserta un fragmento de c贸digo JavaScript . Cuando nuestra aplicaci贸n muestra este producto en la p谩gina del producto con una descripci贸n, el script malicioso del hacker tambi茅n se ejecutar谩 y recibir谩 los datos que necesita.



Encontr茅 la imagen a continuaci贸n en el art铆culo XSS sobre Cloudflare . Esto le ayudar谩 a enviar XSS m谩s f谩cilmente.







Entonces, 驴c贸mo proteger nuestra aplicaci贸n Asp.Net Core de los ataques de secuencias de comandos entre sitios?



Puede proteger su aplicaci贸n web siguiendo estos consejos:



  • Use expresiones regulares tanto del lado del cliente como del lado del servidor, y solo almacene datos validados en su base de datos .
  • El cifrado HTML con Razor ayuda a manejar dichos scripts.
  • XXS tambi茅n se puede hacer con cifrado de URL , as铆 que verifique los par谩metros de URL y cifrelos con UrlEncoder .


Este es un excelente art铆culo de Microsoft sobre c贸mo proteger su aplicaci贸n de XSS.



9. Intente ocultar su versi贸n de .Net Core



En cada respuesta HTTP del servidor que recibimos en respuesta a nuestra solicitud enviada desde el navegador, siempre hay informaci贸n sobre la versi贸n en la que se desarroll贸 la aplicaci贸n. Esta informaci贸n facilita el trabajo de un atacante , lo que le ahorra tiempo y le permite apuntar a una versi贸n espec铆fica de .Net .



Es necesario crear m谩s obst谩culos para los piratas inform谩ticos y dificultar su trabajo al ocultar informaci贸n sobre la versi贸n de .Net Framework .



A continuaci贸n, se explica c贸mo ocultar la versi贸n .Net Core :



  • Elimine X-Powered-By del encabezado de respuesta.
  • <a href="https://www.nuget.org/packages/NWebsec.AspNetCore.Middleware/">NWebsec.AspNetCore.Middleware


Instalar AddServerHeader = falsepara eliminar el encabezado Server: Kestrel.



Puede eliminar X-Powered-By mediante este sencillo fragmento de c贸digo en suweb.config



<httpProtocol>
 <customHeaders>
   <remove name="X-Powered-By" />
 </customHeaders>
</httpProtocol>


10. Falsificaci贸n de solicitudes entre sitios (CSRF)



驴Conoce el prop贸sito del atributo [ValidateAntiForgeryToken]en sus API web de .Net Core ? 驴Quiz谩s tambi茅n not贸 el c贸digo asp-antiforgery="true"en su cshtmlarchivo?



Primero, debemos comprender CSRF (Falsificaci贸n de solicitudes entre sitios o XSRF) , luego intentaremos comprender el prop贸sito de la etiqueta y el atributo anteriores.



Supongamos que est谩 utilizando la banca electr贸nica desde su cuenta bancaria para enviar dinero a su amigo y, de repente, obtiene un enlace de FaceBook de una mujer con un avatar bonito. Cuando abre este enlace, le pide que haga clic aqu铆 para ganar $ 1000... Simplemente haga clic y, dado que ha iniciado sesi贸n y est谩 autorizado para utilizar su banca electr贸nica, este enlace malicioso ejecuta un script y env铆a dinero desde su cuenta a la cuenta del pirata inform谩tico.



La imagen de abajo demuestra claramente CSRF.







驴C贸mo puede proteger su aplicaci贸n de CSRF?



asp-antiforgery="true"crea un token anti-falsificaci贸n y [ValidateAntiForgeryToken]verifica en el servidor si el token es v谩lido y lo protege de la falsificaci贸n de solicitudes entre sitios .



11. LINQ puede proteger contra la inyecci贸n de SQL



La inyecci贸n de SQL es una de las t茅cnicas m谩s utilizadas para da帽ar los datos del usuario durante muchos a帽os.



En este m茅todo, el pirata inform谩tico coloca algunos caracteres condicionales o especiales en el campo de entrada, lo que hace que toda la solicitud cambie la ejecuci贸n.



Este es un buen ejemplo de lo que es la inyecci贸n SQL .





驴C贸mo proteger su aplicaci贸n Asp.Net Core de la inyecci贸n SQL?



A continuaci贸n se ofrecen algunos consejos:



  • Usar Entity Framework Core
  • Utilice siempre consultas parametrizadas.
  • Valide siempre la entrada del lado del servidor.
  • Utilice procedimientos almacenados.


12. Agregar comprobaciones durante la deserializaci贸n



La deserializaci贸n es lo opuesto a la serializaci贸n, que es el proceso de convertir un objeto en flujos de bytes. La serializaci贸n siempre se realiza en el lado del servidor para transferir o almacenar objetos, y deserializamos los datos recibidos en nuestra aplicaci贸n de varias fuentes.





Por lo tanto, estamos abiertos a muchas corrientes da帽inas.



Para proteger su aplicaci贸n de los atacantes, necesitamos validar los datos antes y despu茅s de la deserializaci贸n.



13. Mantenga siempre actualizadas las versiones de sus marcos y bibliotecas.



Actualice siempre los marcos y las bibliotecas que se utilizan en su proyecto. Nunca use bibliotecas desactualizadas en su proyecto, porque los atacantes encuentran constantemente vulnerabilidades en ellas.



Busque actualizaciones para los paquetes de NuGet que se utilizan en su proyecto y actual铆celas peri贸dicamente.





CONCLUSI脫N



Nada es 100% seguro, pero debemos hacer que nuestra aplicaci贸n sea lo m谩s segura posible siguiendo las mejores pr谩cticas. Aunque .Net Core se considera una de las plataformas m谩s seguras, a煤n necesitamos monitorear la actividad en nuestra aplicaci贸n y tomar medidas r谩pidas en caso de cualquier actividad maliciosa.



Gracias por leer mi art铆culo, espero que te motive a pensar en hacer que tu aplicaci贸n Asp.Net Core sea m谩s segura .



Me alegrar铆a si quisiera dejar sus comentarios en la secci贸n de comentarios a continuaci贸n.



Aqu铆 hay algunos art铆culos m谩s que pueden interesarle:








M谩s informaci贸n sobre el curso






:






All Articles