Overblog
Suivre ce blog Administration + Créer mon blog
10 janvier 2008 4 10 /01 /janvier /2008 19:55

Voici des méthodes qui permettent de manipuler les fichiers Web.config pour changer les autorisations d'accés des fichiers en se basant sur les rôles.

La méthode AddWebConfigAuthorization permet d'ajouter une node <location> dans le fichier Web.config.

Code :

Public Sub AddWebConfigAuthorization(ByVal webConfigFile As String, ByVal fileName As String, ByVal allowRoles As String, ByVal denyRoles As String, ByVal allowUsers As String, ByVal denyUsers As String)

        Dim myConfig As New XmlDocument
        Dim nodeConfiguration As XmlNode
        Dim nodeLocation As XmlNode
        Dim nodeSystemWeb As XmlNode
        Dim nodeAuthorization As XmlNode
        Dim nodeAllow As XmlNode
        Dim nodeDeny As XmlNode
        Dim attributePath As XmlAttribute
        Dim attributeUsers As XmlAttribute
        Dim attributeRoles As XmlAttribute

        myConfig.Load(webConfigFile)

        nodeConfiguration = myConfig.SelectSingleNode("/configuration")

        nodeLocation = myConfig.CreateNode(XmlNodeType.Element, "location", Nothing)
        nodeConfiguration.AppendChild(nodeLocation)

        nodeSystemWeb = myConfig.CreateNode(XmlNodeType.Element, "system.web", Nothing)
        nodeLocation.AppendChild(nodeSystemWeb)

        nodeAuthorization = myConfig.CreateNode(XmlNodeType.Element, "authorization", Nothing)
        nodeSystemWeb.AppendChild(nodeAuthorization)

        If allowUsers IsNot Nothing Then
            nodeAllow = myConfig.CreateNode(XmlNodeType.Element, "allow", Nothing)
            nodeAuthorization.AppendChild(nodeAllow)

            attributeUsers = myConfig.CreateAttribute("users")
            attributeUsers.Value = allowUsers
            nodeAllow.Attributes.Append(attributeUsers)
        End If

        If denyUsers IsNot Nothing Then
            nodeDeny = myConfig.CreateNode(XmlNodeType.Element, "deny", Nothing)
            nodeAuthorization.AppendChild(nodeDeny)

            attributeUsers = myConfig.CreateAttribute("users")
            attributeUsers.Value = denyUsers
            nodeDeny.Attributes.Append(attributeUsers)
        End If

        If allowRoles IsNot Nothing Then
            nodeAllow = myConfig.CreateNode(XmlNodeType.Element, "allow", Nothing)
            nodeAuthorization.AppendChild(nodeAllow)

            attributeRoles = myConfig.CreateAttribute("roles")
            attributeRoles.Value = allowRoles
            nodeAllow.Attributes.Append(attributeRoles)
        End If

        If denyRoles IsNot Nothing Then
            nodeDeny = myConfig.CreateNode(XmlNodeType.Element, "deny", Nothing)
            nodeAuthorization.AppendChild(nodeDeny)

            attributeRoles = myConfig.CreateAttribute("roles")
            attributeRoles.Value = denyRoles
            nodeDeny.Attributes.Append(attributeRoles)
        End If

        attributePath = myConfig.CreateAttribute("path")
        attributePath.Value = fileName
        nodeLocation.Attributes.Append(attributePath)

        myConfig.Save(webConfigFile)

    End Sub

 

Exemple d'utilisation :

Pour donner les droits d'accès à un fichier nommé "fleurs.jpg" uniquement aux rôles "Administrateur" et "Modérateur" il suffit de l'utiliser ainsi :

Code :

AddWebConfigAuthorization(Server.MapPath("~/public/documents/Web.config"), "fleurs.jpg", "Administrateur,Modérateur", Nothing, Nothing, "?")

 

 

La méthode RemoveWebConfigAuthorization permet de supprimer le node location correspondant à un fichier.

Code :

Public Sub RemoveWebConfigAuthorization(ByVal webConfigFile As String, ByVal fileName As String)
        Dim myConfig As New XmlDocument
        Dim nodesLocation As XmlNodeList
        Dim nodeConfiguration As XmlNode
        Dim pathValue As String

        myConfig.Load(webConfigFile)

        nodeConfiguration = myConfig.SelectSingleNode("/configuration")
        nodesLocation = myConfig.GetElementsByTagName("location")

        For Each node As XmlNode In nodesLocation
            pathValue = node.Attributes("path").Value.ToString
            If pathValue = fileName Then
                node.RemoveAll()
                nodeConfiguration.RemoveChild(node)
                myConfig.Save(webConfigFile)
                Exit For
            End If
        Next

    End Sub

 

Exemple d'utilisation :

Code :

RemoveWebConfigAuthorization(Server.MapPath("~/public/documents/Web.config"), "fleurs.jpg")

 

 

La fonction IsFileAllowAnonymous permet de savoir si un utilisateur anonyme peut accéder au fichier.

Code :

Public Function IsFileAllowAnonymous(ByVal webConfigFile As String, ByVal fileName As String) As Boolean
        Dim myConfig As New XmlDocument
        Dim nodesLocation As XmlNodeList
        Dim nodeAuthorization As XmlNode
        Dim nodeConfiguration As XmlNode
        Dim pathValue As String

        myConfig.Load(webConfigFile)

        nodeConfiguration = myConfig.SelectSingleNode("/configuration")
        nodesLocation = myConfig.GetElementsByTagName("location")

        For Each node As XmlNode In nodesLocation
            pathValue = node.Attributes("path").Value.ToString
            If pathValue = fileName Then

                nodeAuthorization = node.SelectSingleNode("system.web/authorization")

                For Each childNode As XmlNode In nodeAuthorization.ChildNodes
                    If childNode.Name = "allow" Then
                        If childNode.Attributes("users") IsNot Nothing Then
                            If childNode.Attributes("users").Value = "?" Then
                                Return True
                            Else
                                Return False
                            End If
                        End If
                    End If
                Next

                Exit For
            End If
        Next

        Return False

    End Function

 

Exemple d'utilisation :

Code :

IsFileAllowAnonymous(Server.MapPath("~/public/documents/Web.config"), "fleurs.jpg")

 

La méthode GetFileAllowRoles permet d'obtenir les roles ayant les droits d'accés à un fichier

Code :

Public Function GetFileAllowRoles(ByVal webConfigFile As String, ByVal fileName As String) As String

        Dim myConfig As New XmlDocument
        Dim nodesLocation As XmlNodeList
        Dim nodeLocation As XmlNode
        Dim nodeAuthorization As XmlNode
        Dim nodeConfiguration As XmlNode
        Dim pathValue As String

        myConfig.Load(webConfigFile)

        nodeConfiguration = myConfig.SelectSingleNode("/configuration")
        nodesLocation = myConfig.GetElementsByTagName("location")

        For Each node As XmlNode In nodesLocation
            pathValue = node.Attributes("path").Value.ToString
            If pathValue = fileName Then

                nodeAuthorization = node.SelectSingleNode("system.web/authorization")

                For Each childNode As XmlNode In nodeAuthorization.ChildNodes
                    If childNode.Name = "allow" Then
                        If childNode.Attributes("roles") IsNot Nothing Then
                            Return childNode.Attributes("roles").Value.ToString
                        End If
                    End If
                Next

                Exit For
            End If
        Next

        Return ""
    End Function

 

Exemple d'utilisation :

Code :

GetFileAllowRoles(Server.MapPath("~/public/documents/Web.config"), "fleurs.jpg")

 

 

Sur le même principe, il est possible de créer des méthodes gérant les utilisateurs au lieu des rôles.

Il n'est pas conseillé de modifier dynamiquement le fichier Web.config qui se trouve à la racine de votre site. Créer plutôt un sous dossier dans lequel vous mettrez vos fichiers et un fichier Web.config "vierge".

Partager cet article
Repost0
9 janvier 2008 3 09 /01 /janvier /2008 08:57

Lorsque l'utilisateur est déconnecté (logged out) du site, il est encore possible de voir les pages privés qui ont été visité en faisant un simple "page précédente" (backward).

Pour éviter cela il suffit d'empécher la mis en cache des pages privées.

Code :

Private Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        If Not Page.IsPostBack Then
            Response.ExpiresAbsolute = Now()
            Response.Expires = 0
            Response.CacheControl = "no-cache"
            Response.Buffer = True
        End If
End Sub

Le serveur sera plus souvent sollicité mais c'est toujours mieux que d'avoir une faille de sécurité. Vous pouvez également mettre ce code sur la MasterPage de vos pages privées. Évitez de mettre ce code sur vos pages publics car cela sollicitera le serveur inutilement.

Partager cet article
Repost0
3 décembre 2007 1 03 /12 /décembre /2007 07:42

La sécurité ne se limite pas à empêcher qu'un virus pénètre dans votre système informatique ou à fermer tous les ports d'un pare-feu pour empêcher une intrusion.

La sécurité s'applique aussi à l'espionnage industriel et la violation de vie privée.

Il faut partir du principe que, tôt ou tard, quelqu'un réussira à pénétrer dans votre système et à y dérober les informations qui s'y trouvent.

Cela peut être, un numéro de carte de crédit, un fichier client, votre comptabilité, vos e-mails, etc.

 

Il y a 4 choses dont il faut se souvenir concernant un pirate :

  • Il a généralement peu de temps pour agir car il sait qu'il peut être détecté à tous moment
  • Il ne sera pas surpris de pouvoir accéder facilement à vos données confidentielles parce qu'il pense qu'il est le meilleur
  • Il n'est pas forcément un étranger. Il peut être un ami, quelqu'un de la famille ou un employé de votre société.
  • C'est généralement un opportuniste qui ne recherche pas une information précise.

 

La solution est de donner au "pirate" ce qu'il cherche ou ce qui est susceptible de l'intérresser tout en lui donnant une fausse information.

Plus vite le "pirate" pensera qu'il a trouvé quelque chose d'interressant, plus vite il partira.

 

Exemple 1 : Vous êtes chimiste et vous avez sur votre ordinateur une base de données Microsoft Access contenant toutes vos formules.

Créez une nouvelle base de données dans laquelle vous mettrez des formules sans importances, voir même, de fausses formules qui ne fonctionnent pas. Mettez cette nouvelle base de données dans un dossier que vous nommerez tout naturellement "Formules chimiques". Biensur, vos véritables formules seront bien protégées dans un disque virtuel crypté par exemple.

 

Exemple 2 : Vous utilisez un compte e-mail pour vos relations professionnelles ou personnelles.

N'utilisez pas de logiciels pour consulter vos e-mails confidentiels, mais consultez les directement à partir d'un site internet (webmail). N'utilisez pas non plus les comptes e-mail de votre fournisseur d'accès à internet. Utilisez plutôt un compte de type Hotmail ou Gmail. Vous devez avoir 3 comptes d'e-mail. Le premier est votre leurre, le deuxième  sert à peupler d'e-mail votre compte leurre et le troisième est votre véritable compte e-mail qui n'apparait nul part sur votre ordinateur. Configurez votre logiciel d'e-mail (outlook ou autre) avec votre "compte leurre" et peuplez le avec des e-mails contenant de fausses informations à l'aide d'autres comptes e-mails que vous aurez créé sur Hotmail par exemple.

N'oubliez pas d'utiliser un utilitaire qui nettoie toutes les traces de navigation après avoir consulté vos e-mails sur votre site webmail.

Pour renforcer la confidentialité de vos e-emails, utilisez un logiciel de cryptage de type PGP.

 

 

Je pense qu'avec ces 2 exemples, vous aurez compris que le principe est de mettre, en plus du pare-feu, un "rideau de fumée" !

Partager cet article
Repost0
19 novembre 2007 1 19 /11 /novembre /2007 16:39

Le BackGroundWorker est un composant très performant qui permet de créer des Thread très simplement. Grâce au BackGroundWorker, vous pouvez rendre votre application très "fluide" et garder une interface toujours disponible pour l'utilisateur.

Dans l'exemple suivant, nous allons utiliser un BackGroundWorker pour accomplir une tâche simple d'incrémentation d'un compteur avec une pause entre chaque incrémentation.

Nous allons également utiliser un Delegate pour appeler une fonction qui se trouve en dehors du Thread.

Voici les différents éléments que nous allons utiliser pour cet exemple.

 

Les controls de notre WinForm :

  • TextBox : tbCompteur
  • TextBox : tbPause
  • ProgressBar : pbBar
  • Button : btnStart
  • Label : lblCompte

 

Les classes :

  • bgwArguments : permet de passer des paramètres au Thread
  • bgwProgress : permet de passer des paramètres sur l'état de la progression du Thread

 

Les méthodes :

  • startBgwCompte : Initialise et démarre le Thread
  • bgwCompte_DoWork : Gère l'événement DoWork du BackGroundWorker. Cette méthode contient le code exécuté pendant le Thread.
  • bgwCompte_RunWorkerCompleted : Gére l'événement RunWorkerCompleted du BackGroundWorker qui indique la fin du Thread.
  • bgwCompte_ProgressChanged : Gère l'évènement ProgressChanged du BackGroundWorker. Cet événement se produit à chaque fois que l'on veut indiquer le changement d'état de la progression.
  • Increment : Fonction qui incrémente le compteur
  • btnStart_Click : Gère l'évènement Click du bouton btnStart
  • OnBgwTermine : Gère l'event bgwTermine

 

Pour commencer, nous devons faire un "imports" des classes d'objets nécessaires :

 

Code :

Imports System.ComponentModel
Imports System.Threading

 

Nous allons ensuite déclarer notre BackGroundWorker, un Delegate qui nous permettra d'appeller notre fonction Increment à l'intérieur du Thread et un Event que nous lèverons à la fin du Thread.

 

Code :

Private WithEvents bgwCompte As BackgroundWorker
Private Delegate Function dIncrement(ByVal nbr As Integer) As Integer
Private Event bgwTermine(ByVal nbr As Integer)

 

Voici la méthode qui permet de lancer le Thread . On passe à l'aide de l'objet bgwArguments les 2 paramètres des TextBox qui représentent respectivement le total du compteur et le temps de pause du Thread.

 

Code :

Private Sub startBgwCompte(Optional ByVal nbr As Integer = 1)
        ' On remet la ProgressBarre à zéro
        With Me.pbBar
            .Minimum = 0
            .Maximum = 100
            .Value = 0
        End With

        bgwCompte = New BackgroundWorker

        ' le BackGroundWorker doit indiquer sa progression et accepter une possible annulation
        bgwCompte.WorkerReportsProgress = True
        bgwCompte.WorkerSupportsCancellation = True

       ' on utilise l'objet bgwArgument pour passer des paramètres au Thread

       bgwCompte.RunWorkerAsync(New bgwArguments(CInt(Me.tbCompteur.Text), CInt(Me.tbPause.Text)))
End Sub

 

 

C'est dans la méthode DoWork que ce trouve le code qui sera exécuté en arrière plan.

 

Code :

Private Sub bgwCompte_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bgwCompte.DoWork
        ' on récupère les arguments
        Dim nbr As Integer = CType(e.Argument, bgwArguments).nbr
        Dim pause As Integer = CType(e.Argument, bgwArguments).pause

        Dim compteur As Integer = 0

        ' on utilise un Delegate pour faire appel à notre fonction Increment
        Dim delegateIncrement As dIncrement = AddressOf Increment

        Do
            ' on appelle notre Fonction à travers le Delegate
            compteur = delegateIncrement(compteur)

            ' on indique l'état de la progression
            bgwCompte.ReportProgress((compteur * 100) / nbr, New bgwProgress("Le compteur est à " & compteur.ToString))

            ' on vérifie si une demande d'annulation a été faite par l'utilisateur, si oui on sort de la boucle
            If Me.bgwCompte.CancellationPending = True Then
                e.Result = compteur
                Exit Do
            End If

           'on met le Thread en pause
            Thread.Sleep(pause)

        Loop Until compteur = nbr

        e.Result = compteur

    End Sub

 

Lorsque que le code de la méthode DoWork est terminé, l'évènement RunWorkerCompleted est géré par cette méthode.

 

Code :

Private Sub bgwCompte_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bgwCompte.RunWorkerCompleted

        ' on lève l'événement bgwTermine qui retourne la valeur du compteur
        RaiseEvent bgwTermine(CInt(e.Result))
End Sub

 

 

La méthode suivante gère le ReportProgress que l'on appelle dans la boucle de la méthode DoWork. Elle met à jour la valeur de la ProgressBar et le text du Label pour indiquer l'état de la progression.

 

Code :

Private Sub bgwCompte_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bgwCompte.ProgressChanged
        If e.ProgressPercentage <= 100 Then
            Me.pbBar.Value = e.ProgressPercentage
        Else
            Me.pbBar.Value = 100
        End If

        Me.lblCompte.Text = CType(e.UserState, bgwProgress).text
End Sub

 

La fonction suivante permet d'incrémenter le compteur. Biensur, le code de cette fonction aurait pu être mis directement dans la méthode DoWork, mais elle permet d'illustrer le faite que l'on peut appeller une méthode qui est en dehors du Thread en utilisant un Delegate.

Code :

Public Function Increment(ByVal nbr As Integer) As Integer
        nbr += 1
        Return nbr
End Function

 

L'événement Click du bouton btnStart est géré par cette méthode :

Code :

Private Sub btnStart_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnStart.Click
        If Me.btnStart.Text = "Stop" Then
           ' On vérifie que le Thread est bien en cours avant d'essayer de l'annuler
            If Me.bgwCompte.IsBusy Then
                Me.bgwCompte.CancelAsync()
            End If
            Me.btnStart.Text = "Start"
        Else
            If IsNumeric(Me.tbCompteur.Text) And IsNumeric(Me.tbPause.Text) Then
                'on vérifie que ce Thread n'est pas déjà en cours
                Me.startBgwCompte(CInt(Me.tbCompteur.Text))
                Me.btnStart.Text = "Stop"
            Else
                MsgBox("Les données saisies ne sont pas correctes.", MsgBoxStyle.Information)
        End If

        End If
    End Sub

 

Cette méthode gère l'évènement bgwTermine qui est levé à la fin du Thread :

Code :

Private Sub OnBgwTermine(ByVal compteur As Integer) Handles Me.bgwTermine
        MsgBox("Le compteur c'est arrêté à " & compteur)
        Me.pbBar.Value = 0
        Me.lblCompte.Text = "Compteur arrêté"
End Sub

 

Cette classe permet de passer plusieurs paramètres au BackGroundWorker. Etant donné que vous pouvez passer n'importe quel objet en paramètre à un BackGroundWorker, les possibilités sont quasis illimitées !

Code :

Public Class bgwArguments
    Private _nbr As Integer
    Private _pause As Integer

    Public Sub New(ByVal nbrCompteur As Integer, ByVal pauseCompteur As Integer)
        _nbr = nbrCompteur
        _pause = pauseCompteur
    End Sub

    Public Property nbr() As Integer
        Get
            Return _nbr
        End Get
        Set(ByVal value As Integer)
            _nbr = value
        End Set
    End Property

    Public Property pause() As Integer
        Get
            Return _pause
        End Get
        Set(ByVal value As Integer)
            _pause = value
        End Set
    End Property
End Class

 

Cette classe permet de passer des paramètres sur l'état de la progression. Là aussi, n'importe quel objet peut être utilisé pour indiquer l'état de la progression.

Code :

Public Class bgwProgress
    Private _text As String

    Public Sub New(ByVal txt As String)
        _text = txt
    End Sub

    Public Property text() As String
        Get
            Return _text
        End Get
        Set(ByVal value As String)
            _text = value
        End Set
    End Property

End Class

 

Testons maintenant notre application. Dans le tbCompteur saisissez le chiffre 60 et dans le tbPause le chiffre 1000 (le temps de pause est en millisecondes) . Cliquez sur le bouton btnStart. Le texte du bouton va passer de "Start" à "Stop" et vous allez commencer à voir votre ProgressBar afficher la progression pendant que votre lblCompte vous indique la valeur du Compteur. Vous remarquerez que vous pouvez toujours agir sur les controls de votre WinForm et sur la fenêtre elle même. Lorsque vous cliquez sur "Stop", le thread s'arrête, et un message vous indique la valeur du compteur au moment de l'annulation du Thread.

Les règles à se rappeler sont les suivantes :

  • Ne jamais faire appelle à une méthode directement dans le Thread. Utiliser un Delegate.
  • Ne jamais agir sur l'interface de l'utilisateur depuis unThread. Par exemple, ne pas mettre dans le DoWork un tbMonText.Text="Hello".
Partager cet article
Repost0
15 novembre 2007 4 15 /11 /novembre /2007 10:41

Faire des sauvegardes est une partie très importante dans le domaine de la sécurité informatique.

Voici quelques logiciels permettant de faire des sauvegardes :

NovaBackup

SecuraBackup

Handy Backup

 

Pour exemple, nous allons imaginer que vous avez un ordinateur sur votre lieu de travail et que vous voulez utiliser votre graveur DVD pour sauvegarder vos données.

Préparez 3 DVD que vous allez numéroté de 1 à 3. Mettez le premier dans le graveur DVD de votre ordinateur, le deuxième dans un lieu protégé sur votre lieu de travail (un coffre ou autre) et le troisième vous le gardez avec vous car vous allez l'enmener chez vous.

La sauvegarde s' effectuera pendant la nuit. Chaque matin, vous prendrez le DVD qui est dans l'ordinateur pour l'enmener chez vous, celui qui est dans le coffre sera mis dans le graveur DVD et celui qui était avec vous ira dans le coffre. Chaque jour vous ferez tourner les DVD d'une place à l'autre : vous > coffre > ordinateur

Pourquoi emmener un DVD chez soi ? Imaginez qu'il y ait un incendie sur votre lieu de travail et que vos sauvegardes brûlent, à quoi auront-elles servi ?!

Vous gardez toujours avec vous la sauvegarde la plus récente.

Avec cette méthode, vous avez un historique sur 3 jours, mais rien ne vous empêche de prendre 30 DVD pour avoir un historique sur 30 jours et ainsi augmenter considérablement le niveau de sécurité.

N'oubliez pas également de vérifier que le logiciel de sauvegarde fasse bien son travail tous les jours en vérifiant la date de la dernière sauvegarde.

N'oubliez pas que si vos sauvegardes contiennent des données confidentielles il faudra les crypter.

Partager cet article
Repost0
14 novembre 2007 3 14 /11 /novembre /2007 14:41

Vous avez créé une base de donnée et vous voulez y créer des tables permettant la gestion des utilisateurs et des rôles.

Etape 1 :

  • Utilisez l'utilitaire aspnet_regsql.exe pour créer les tables, les relations et les procédures stockées dans votre base de données.

Cet utilitaire se trouve généralement içi : C:\Windows\Microsoft.NET\Framework\v2.0.50727\aspnet_regsql.exe

Nous partirons du principe que votre base de donnée à une ConnectionString dans le Web.config se nommant "dbConStr".

 

Etape 2 :

  • Insérez le code suivant dans votre Web.config pour le MemberShipProvider

Code :

<membership>
      <providers>
        <remove name ="AspNetSqlMembershipProvider" />
        <add name="AspNetSqlMembershipProvider"
                  type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
                  connectionStringName="dbConStr"
                  enablePasswordRetrieval="false"
                  enablePasswordReset="true"
                  requiresQuestionAndAnswer="false"
                  applicationName="/"
                  requiresUniqueEmail="true"
                  minRequiredPasswordLength="6"
                  minRequiredNonalphanumericCharacters="0"
                  passwordFormat="Hashed"
                  maxInvalidPasswordAttempts="5"
                  passwordAttemptWindow="10"
                  passwordStrengthRegularExpression=""
              />
      </providers>
    </membership>

Vous pouvez biensur changer les paramètres.

 

 

  • Insérez le code suivant dans votre Web.config pour le RoleProvider

Code :

<roleManager enabled="true" defaultProvider ="AspNetSqlRoleProvider" >
      <providers>
        <remove name="AspNetSqlRoleProvider" />
        <remove name="AspNetWindowsTokenRoleProvider" />
        <add name="AspNetSqlRoleProvider"
             type="System.Web.Security.SqlRoleProvider"
             connectionStringName="dbConStr"
             applicationName="/" />
      </providers>
    </roleManager>

Vous n'avez plus qu'à ajouter les rôles et les utilisateurs en utilisant l'outils "Configuration ASP.NET" qui est intégré au volet "Explorateur de solution" de Visual studio 2005.

Partager cet article
Repost0
31 octobre 2007 3 31 /10 /octobre /2007 11:48

Si nous prenons l'exemple du logiciel "MSN Messenger", vous remarquerez que lorsque vous cliquez sur la croix pour fermer la fenêtre ceci ne ferme pas l'application.

Pour obtenir le même résultat, il faut gérer l'événement FormClosing du WindowsForm principal de votre application.

 

Code :

Private Sub FormMain_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
        e.Cancel = True
        Me.Hide()
End Sub

 

Dans cette exemple, la fenêtre est cachée lorsque l'on clique sur la croix. Un icône dans la barre de notification permettra de la réouvrir par exemple.

Partager cet article
Repost0
25 octobre 2007 4 25 /10 /octobre /2007 18:12

Ce comportement est un bug du Framework qu'il est facile de contourner. Voici comment procéder.

Tout d'abord nous allons ajouter une variable private de type control et une propriété public pour en changer la valeur.

 

Code :

Private _cmsSourceControl As System.Windows.Forms.Control

Public Property cmsSourceControl() As System.Windows.Forms.Control
        Get
            Return _cmsSourceControl
        End Get
        Set(ByVal value As System.Windows.Forms.Control)
            _cmsSourceControl = value
        End Set
End Property

 

Ensuite nous allons gérer l'événement Opened du ContextMenuStrip pour récupérer la valeur du SourceControl

Code :

Private Sub cms_Opened(ByVal sender As Object, ByVal e As System.EventArgs) Handles cms.Opened
        Me.cmsSourceControl = Me.cms.SourceControl

End Sub

 

Maintenant, quelque soit les circonstances, vous êtes sur de pouvoir connaitre le SourceControl du ContextMenuStrip en appellant la propriétée cmsSourceControl.

Partager cet article
Repost0
22 octobre 2007 1 22 /10 /octobre /2007 18:29

Dans cet exemple, nous allons insérer dans une page ASP.NET une bannière faite en Flash 9. Le nom de notre fichier sera "banniere.swf".

 

Etape 1 : Créer les dossiers

  • Créez un dossier "images" dans lequel vous allez copier votre fichier "banniere.swf".
  • Créez un dossier "Scripts" dans lequel vous allez mettre un fichier "AC_RunActiveContent.js" que vous pouvez télécharger içi

 

Etape 2 : Insérer le code dans la page ASP.NET

  • Insérez juste avant la balise </head> le code suivant

Code :

<script src="Scripts/AC_RunActiveContent.js" type="text/javascript"></script>

 

  • Insérez entre les balises <body> et </body> à l'emplacement où vous voulez qu'apparaisse votre animation flash le code suivant

 Code :

<script type="text/javascript">

AC_FL_RunContent('codebase','http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,28,0','width','1000','height','142','src','images/banniere','quality','high','pluginspage','http://www.adobe.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash','movie','images/banniere' ); //end AC code

</script><noscript><object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,28,0" width="1000" height="142">

<param name="movie" value="images/banniere.swf" />
  <param name="quality" value="high" />
</object></noscript>

Remarque : Les paramètres en rouge sont ceux que vous devrez changer si le nom, la taille, ou l'emplacement de votre fichier Flash est différent.

 

Etape 3 : Donner les droits d'accès aux dossiers dans le fichier Web.config

  • Dans votre fichier Web.config insérez le code suivant juste avant la balise </configuration>

 

Code :

<location path="Scripts">
    <system.web>
      <authorization>
        <allow users="?"/>
      </authorization>
    </system.web>
  </location>

<location path="images">
    <system.web>
      <authorization>
        <allow users="?"/>
      </authorization>
    </system.web>
  </location>

Partager cet article
Repost0
21 octobre 2007 7 21 /10 /octobre /2007 11:45

Lorsque l'on achète un ordinateur et qu'on l'allume pour la première fois, on se retrouve généralement sur une session utilisateur de type "Administrateur". La majorité des utilisateurs ne voit pas le besoin de créer un autre compte que celui par défaut.

Il n'est pas conseillé d'utiliser pour un usage courant un compte "Administrateur". De plus, ce compte n'a pas de mot de passe par défaut, ce qui rend l'ordinateur très vulnérable à des accès non autorisés.

Il est donc préférable de créer un autre compte de type "Standard" que l'utilisateur pourra utiliser pour le travail de tous les jours, et n'utiliser le compte "Administrateur" que pour installer un logiciel ou modifier certains paramètres de Windows.

Voici les étapes à suivre pour résoudre ce problème de sécurité.

 

Etape 1 : Mettre un mot de passe sur le compte "Administrateur"

  • Allez dans le Panneau de configuration de Windows.
  • Ouvrez Comptes d'utilisateurs
  • Cliquez sur Changer votre mot de passe
  • Saisissez les informations demandées et cliquez sur le bouton de confirmation

Je vous rappelle qu'un bon mot de passe doit êtres d'au moins 8 caractères et comporter au moins des chiffres et des lettres (exemple d'un très bon mot de passe : [(@.Le lièvre et la tortue.@)]639761).

A ce stade, le compte "Administrateur" que vous utilisez est maintenant protégé par un mot de passe. Il ne nous reste plus qu'à créer un nouveau compte de type "Standard" .

 

Etape 2 : Créer un nouveau compte "Standard"

  • Allez dans le Panneau de configuration de Windows
  • Ouvrez Comptes d'utilisateurs
  • Cliquez sur Gérer un autre compte
  • Cliquez sur Créer un nouveau compte
  • Saisissez le nom que vous voulez pour ce compte
  • Prenez soin de vérifier que Utilisateur standard est coché.
  • Cliquez sur le bouton de confirmation pour créer le compte

Je vous conseille de mettre également un mot de passe sur le compte que vous venez de créer.

 

Remarque :

Lorsque l'on utilise un compte "Standard" sous Windows Vista et que l'on essaye d'accéder à des fonctionnalités qui sont réservées au compte "Administrateur", celui-ci nous demande le mot de passe du compte "Administrateur" pour y accéder. Il est donc tout à fait possible d'administrer Windows Vista à partir d'un compte utilisateur "Standard".

Partager cet article
Repost0