Avec chaque mise à jour de .Net Core, Microsoft prouve que .Net Core est le framework le plus puissant, le plus polyvalent et le plus complet disponible pour développer de puissantes applications de bureau , mobiles , cloud et Web . Contrairement à une application de bureau ou mobile, une application Web s'exécute sur une adresse publique, ce qui est l'une des raisons pour lesquelles la sécurité d'une application Web est d'une grande importance. Bien qu'Asp.Net Core soit conçu avec les meilleures pratiques de sécurité à l'esprit , il y a encore quelques vulnérabilités que nous devons surveiller avant et après la sortie de notre Asp.Net Coreapplications.
Dans cet article, nous examinerons plusieurs failles de sécurité dans les applications Web Asp.Net Core et leurs solutions possibles. Commençons par énumérer certaines des considérations de sécurité importantes pour notre application .Net Core .
- Rendez votre connexion plus sécurisée
- Ne transmettez que des données sensibles cryptées
- N'oubliez pas d'effacer vos cookies à la sortie
- Utilisez toujours SSL
- Ne stockez jamais explicitement des données sensibles dans votre base de données
- Les pistes d'audit et la journalisation sont très importantes
- Ne jamais exposer les erreurs techniques d'origine à l'utilisateur final
- Scripts intersites (XSS)
- Essayez de masquer la version de votre .Net Core
- Falsification de requêtes intersites (CSRF)
- LINQ peut protéger contre l'injection SQL
- Ajouter des vérifications lors de la désérialisation
- Tenez toujours à jour les versions de vos frameworks et bibliothèques
1. Rendez votre connexion plus sécurisée
La page de connexion est la porte d'entrée de toute application. Considérez une application comme un panneau d'administration. Si une personne non autorisée accède à votre application, elle peut contrôler l'ensemble du système. Ainsi, votre première étape devrait toujours être de sécuriser votre connexion.
Voici quelques conseils pour sécuriser le point d'entrée de votre application.
UTILISEZ DES COMPTES COMPLEXES
N'utilisez jamais de noms d'utilisateur comme admin et des mots de passe comme 12345 , ou votre nom ou vos informations personnelles. Tout le monde peut profiter de cette faille et le bot pourra récupérer ces informations d'identification dans un temps incroyablement court. PROTÉGEZ
VOTRE CONNEXION CONTRE
BRUTFORS Brute Force est le type d'attaque le plus courant, qui utilise divers algorithmes pour forcer les combinaisons de nom d'utilisateur et de mot de passe.afin de deviner les informations de connexion. De plus, un grand nombre de tentatives de connexion peut surcharger votre serveur, ce qui peut entraîner un DoS (Denial of Service) et des temps d'arrêt pour les vrais utilisateurs de votre application.
Les attaques par force brute prennent moins de temps pour deviner des noms d'utilisateur et des mots de passe simples , mais elles peuvent également deviner des combinaisons complexes à l'aide d'attaques par force brute triviales.
Alors, comment protégez-vous votre application Asp.Net des attaques par force brute?
Voici quelques conseils pour éviter les attaques par force brute :
- Utilisez Captcha sur votre page de connexion, car les bots ne peuvent pas encore gérer les captchas.
- IP .
- , admin user, .
- , (A-Z a-z), (0-9) (!, @,., #, $,%, ^, &, * ..).
Comment mettre en œuvre les recommandations ci-dessus?
Les directives ci-dessus peuvent sembler difficiles à mettre en œuvre pour les développeurs Asp.Net Core débutants , mais ne vous inquiétez pas, il existe une excellente bibliothèque HackerSpray pour vous aider à protéger votre travail contre les attaques par force brute . Tout ce que vous avez à faire est de le configurer.
UTILISEZ TOUJOURS L'IDENTITÉ .NET CORE
Asp.Net Core dispose de nombreuses bibliothèques et outils intégrés pour sécuriser vos applications. L'autorisation a également une mise en œuvre merveilleuse de Microsoft qui nous donne une personnalisation complète de la connexion et de l'enregistrement selon les meilleures pratiques de sécurité.
2. Transférer les données sensibles uniquement sous forme cryptée
N'envoyez jamais explicitement vos informations sensibles, telles que le mot de passe ou les informations d'identification de carte de crédit , au serveur pour vérification. Les pirates peuvent voler ces données en les interceptant avant de les envoyer au serveur.
Utilisez toujours un algorithme de hachage comme md5 ou SHA256 pour les mots de passe et les algorithmes de chiffrement comme AES ou DES côté client, par exemple en utilisant jQuery .
3. N'oubliez pas d'effacer les cookies à la sortie
Lors de la connexion à l'application Asp.Net Core , nous sauvegardons certaines données nécessaires dans la session pour maintenir la connexion de l'utilisateur jusqu'à ce qu'il se déconnecte. Dans certaines applications, nous définissons le délai d'expiration de la session , et parfois nous ne le faisons pas, lorsque l'utilisateur coche la case indiquant qu'il souhaite rester connecté sur la page de connexion.
En même temps, le cookie AspNetCore.Session est ajouté au navigateur pour garder une trace de l' utilisateur connecté .
Par conséquent, lorsque nous nous déconnectons, nous devons également supprimer les cookies créés par notre application du navigateur , car le pirate informatiquepeut utiliser ces informations pour les connexions non autorisées. Ceci est également appelé une attaque de fixation de session .
4. Utilisez toujours SSL
SSL signifie Secure Socket Layer . Il crypte la communication entre le client et le serveur avec une clé très complexe.
Vous pouvez simplement dire à Starup.cs de votre application Asp.Net Core de toujours utiliser une politique de cookies sécurisée.
5. Ne stockez jamais explicitement des données sensibles dans votre base de données
Presque toutes les applications Web de stockage des données utilisateur ont besoin d' une base de données , que les pirates attaquent dans la plupart des cas précisément pour voler ces données utilisateur. Supposons donc que vous stockiez les informations d'identification de vos utilisateurs comme les mots de passe et les spécifications de facturation dans votre base de données de manière très détaillée et propre. Il s'avère que toute personne qui obtient un accès non autorisé à votre base de données peut utiliser ces données à ses propres fins égoïstes.
Par conséquent, stockez toujours les données sensibles dans votre base de données en utilisant le hachage ou le cryptage .
6. Les pistes d'audit et la journalisation sont très importantes
Les pistes d'audit ou les journaux d'activité sont très importants pour se tenir au courant de ce qui se passe dans votre application. Si quelqu'un génère un grand nombre de tentatives de connexion infructueuses , l'administrateur devrait recevoir un e-mail l' informant.
Par exemple, si un utilisateur crée une nouvelle instance d'un utilisateur d'application ou modifie les rôles d'un utilisateur existant, chacune de ses actions doit être reflétée dans les journaux de votre application Asp.net Core .
7. N'exposez jamais les erreurs techniques d'origine à l'utilisateur final.
Certaines exceptions peuvent révéler des informations importantes sur votre application, ou même parfois afficher quelques lignes de code à l' utilisateur final. Les attaquants sont des gars intelligents, ils peuvent utiliser les informations fournies par votre exception pour pirater votre application.
Par conséquent, avant de déployer l'application en production, assurez-vous d'avoir créé une page pour afficher l'erreur à l'utilisateur pour tous les types d' exceptions et correctement enregistré les erreurs dans le journal de votre application.
8. Cross Site Scripting (XSS)
Dans les attaques XSS (Cross-Site Scripting) , les pirates envoient des scripts malveillants via des champs d'entrée pour voler les informations d'identification des utilisateurs et d'autres données sensibles.
Disons que nous avons un formulaire pour ajouter un produit à une application. Le hacker ajoute un nouveau produit et dans le champ de description du produit, il insère simplement un extrait de code JavaScript . Lorsque notre application affiche ce produit sur la page du produit avec une description, le script malveillant du pirate s'exécute également et il reçoit les données dont il a besoin.
J'ai trouvé l'image ci-dessous dans l'article XSS sur Cloudflare . Cela vous aidera à soumettre XSS plus facilement.
Alors, comment protéger notre application Asp.Net Core contre les attaques de scripts intersites?
Vous pouvez sécuriser votre application Web en suivant ces conseils:
- Utilisez des expressions régulières à la fois côté client et côté serveur et ne stockez que les données validées dans votre base de données .
- Le cryptage HTML avec Razor permet de gérer ces scripts.
- XXS peut également être fait avec le cryptage d'url , alors vérifiez les paramètres d'url et cryptez-les avec UrlEncoder .
Voici un excellent article de Microsoft sur la protection de votre application contre XSS.
9. Essayez de masquer votre version .Net Core
Dans chaque réponse HTTP du serveur que nous recevons en réponse à notre demande envoyée par le navigateur, il y a toujours des informations sur la version sur laquelle l'application a été développée. Ces informations facilitent le travail d' un attaquant , lui font gagner du temps et lui permettent de cibler une version spécifique de .Net .
Il est nécessaire de créer plus d'obstacles pour les pirates et de rendre leur travail plus difficile en cachant des informations sur la version du .Net Framework .
Voici comment masquer la version .Net Core :
- Supprimez X-Powered-By de l'en-tête de réponse.
- <a
href="https://www.nuget.org/packages/NWebsec.AspNetCore.Middleware/">NWebsec.AspNetCore.Middleware
Installez
AddServerHeader = false
pour supprimer l'en-tête Server: Kestrel.
Vous pouvez supprimer X-Powered-By en utilisant cet extrait de code simple dans votre
web.config
<httpProtocol>
<customHeaders>
<remove name="X-Powered-By" />
</customHeaders>
</httpProtocol>
10. Falsification de demandes intersites (CSRF)
Connaissez-vous le but de l'attribut
[ValidateAntiForgeryToken]
dans vos API Web .Net Core ? Peut-être avez-vous également remarqué le code asp-antiforgery="true"
dans votre cshtml
fichier?
Nous devons d'abord comprendre CSRF (Cross-Site Request Forgery ou XSRF) , puis nous essaierons de comprendre le but de la balise et de l'attribut ci-dessus.
Disons que vous utilisez l'e-banking depuis votre compte bancaire pour envoyer de l'argent à votre ami, et que tout à coup, vous obtenez un lien FaceBook d'une femme avec un joli avatar. Lorsque vous ouvrez ce lien, il vous demande de cliquer ici pour gagner 1000 $... Il vous suffit de cliquer et, puisque vous êtes connecté et autorisé à utiliser votre e-banking, ce lien malveillant exécute un script et envoie de l'argent de votre compte vers le compte du pirate.
L'image ci-dessous montre clairement CSRF.
Comment pouvez-vous protéger votre application du CSRF?
asp-antiforgery="true"
crée un jeton anti-falsification et [ValidateAntiForgeryToken]
vérifie côté serveur si le jeton est valide et vous protège de la falsification des demandes intersites .
11. LINQ peut protéger contre l'injection SQL
L'injection SQL est l'une des techniques les plus couramment utilisées pour endommager les données des utilisateurs pendant de nombreuses années.
Dans cette méthode, le hacker place des caractères conditionnels ou spéciaux dans le champ de saisie, ce qui entraîne la modification de l'intégralité de la requête.
Voici un bon exemple de ce qu'est l' injection SQL .
Comment sécuriser votre application Asp.Net Core de l'injection SQL?
Voici quelques conseils:
- Utiliser Entity Framework Core
- Utilisez toujours des requêtes paramétrées.
- Validez toujours l'entrée côté serveur.
- Utilisez des procédures stockées.
12. Ajouter des vérifications lors de la désérialisation
La désérialisation est l'opposé de la sérialisation, qui est le processus de conversion d'un objet en flux d'octets. La sérialisation est toujours effectuée côté serveur pour transférer ou stocker des objets, et nous désérialisons les données reçues dans notre application à partir de diverses sources.
Ainsi, nous sommes ouverts à de nombreux flux nuisibles.
Pour protéger votre application des attaquants, nous devons valider les données avant et après la désérialisation.
13. Tenez toujours à jour les versions de vos frameworks et bibliothèques
Mettez toujours à jour les frameworks et bibliothèques utilisés dans votre projet. N'utilisez jamais de bibliothèques obsolètes dans votre projet, car les attaquants y trouvent constamment des vulnérabilités .
Recherchez les mises à jour des packages NuGet utilisés dans votre projet et mettez-les à jour régulièrement.
CONCLUSION
Rien n'est sécurisé à 100% , mais nous devons rendre notre application aussi sécurisée que possible en suivant les meilleures pratiques. Bien que .Net Core soit considéré comme l'une des plates-formes les plus sécurisées, nous devons toujours surveiller l'activité de notre application et prendre des mesures rapides en cas d'activité malveillante.
Merci d'avoir lu mon article, j'espère qu'il vous motivera à réfléchir à la sécurisation de votre application Asp.Net Core .
Je serais heureux si vous souhaitez laisser vos commentaires dans la section commentaires ci-dessous.
Voici quelques autres articles qui pourraient vous intéresser:
- SYSTÈME DE CONTENU ASP.NET CORE (CMS) TOP OPEN SOURCE
- CRÉATION DE TABLEAUX DE BORD DYNAMIQUES DÉFINIS PAR L'UTILISATEUR À L'AIDE D'ASP.NET CORE
- EXEMPLE D'UTILISATION DE LA BASE DE DONNÉES NOSQL AVEC DOTNET CORE
En savoir plus sur le cours