Quelques trucs intéressants (19/09/2010)
Cette fois-ci :
- .NET
- Sécurité
- Visual Studio
.NET
- Using AppDomains to make Non-Threadsafe code Threadsafe (blog de Jeffrey Richter)
Cette stratégie se base sur le fait que la valeur d'un champ static est spécifique à un AppDomain particulier (en laissant de côté le cas où plusieurs AppDomain partageraient une instance d'un type héritant de MarshalByRefObject).
J'avais envisagé ce type de solution quand je m'étais retrouvé dans une situation similaire lors de l'utilisation de SMO (SQL Server Management Objects) dans un contexte multithreadé alors qu'une certaine partie de SMO souffre d'un bug dans le code de gestion d'un cache interne, implémenté avec un champ static.
Cependant j'avais aussi la possibilité de centraliser les accès à SMO (utilisation d'un petit nombre de fonctionnalités) et j'ai finalement opté pour une solution un peu moins complexe basée sur des verrous (par type d'objet SQL Server, et uniquement pour les requêtes démarrant pendant le premier accès à un type) et une stratégie de nouvelle tentative au premier échec pour les rares incidents restant.
En gros un compromis stabilité / concurrence misant sur le fait que le bug ne causait pas de corruption d'état en cas d'étouffement de l'erreur (c'est une stratégie risquée car vulnérable aux changements dans le code tiers).
Sécurité
- Understanding the ASP.NET Vulnerability (blog Security Research & Defense)
Le point sur la vulnérabilité ASP.NET qui serait causée par la divulgation par .NET de détails dans les messages d'erreur lors du décryptage, ouvrant la voie à des attaques de type "padding oracle".
A noter qu'à priori des détails d'erreur ne sont pas forcément nécessaires pour que ce type d'attaque fonctionne : un simple retour avec un code 500 au lieu de 200 serait suffisant.
A ce jour la solution de contournement proposée consiste à désactiver l'affichage des erreurs détaillées (configuration customErrors, que les applications en production sont censées avoir en mode "On" ou "RemoteOnly") avec redirection vers une page unique pour toutes les erreurs et à ajouter au code de cette page une temporisation à durée aléatoire (appel de Thread.Sleep avec timeout entre 0 et 255 ms).
Si ma compréhension du document Practical Padding Oracle Attacks est bonne (je ne suis pas spécialiste dans ce domaine donc mon avis est à prendre avec des pincettes), ça n'éliminera peut être pas complètement les risques mais ça devrait considérablement allonger les temps de traitement d'une attaque éventuelle.
Visual Studio
- Solution Explorer Tools (When to Sync to Current File) – Extension #11 (blog de Sara Ford)
Ceux qui ne supportent pas le comportement automatique de l'option "Track Active Item in Solution Explorer" ("Suivre un élément actif dans l'Explorateur de solutions" ?) apprécieront peut être l'extension Solution Explorer Tools (pour Visual Studio 2010) qui ajoute simplement 3 boutons dans l'explorateur de solution : "Select current item", "Collapse all" et "Collapse all except current item" (une combinaison des 2 premiers).
Il faudra bien sûr penser à désactiver l'option "Track Active Item in Solution Explorer" pour profiter pleinement des fonctionnalités de cette extension.
A priori ces fonctionnalités sont incluses dans d'autres extensions, mais si on veut juste celles-ci autant ne pas installer plus riche.
Divers
Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :