IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP.NET Discussion :

L'accès au chemin d'accès est refusé


Sujet :

ASP.NET

  1. #1
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2010
    Messages
    25
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2010
    Messages : 25
    Par défaut L'accès au chemin d'accès est refusé
    Bonjour,

    J'essaye d'uploader un fichier dans un répertoire (pour l'instant mon site est en local).

    J'obtiens cette erreur :

    L'accès au chemin d'accès 'C:\inetpub\wwwroot\LocalIISCera\Documents\docs' est refusé.
    Description : Une exception non gérée s'est produite au moment de l'exécution de la demande Web actuelle. Contrôlez la trace de la pile pour plus d'informations sur l'erreur et son origine dans le code.

    Détails de l'exception: System.UnauthorizedAccessException: L'accès au chemin d'accès 'C:\inetpub\wwwroot\LocalIISCera\Documents\docs' est refusé.

    ASP.NET n'est pas autorisé à accéder à la ressource demandée. Accordez des droits d'accès à la ressource pour l'identité de la demande ASP.NET. ASP.NET a une identité de processus de base (en règle générale {MACHINE}\ASPNET sur IIS 5 ou Network Service sur IIS 6) qui est utilisée si l'application n'emprunte pas d'identité. Si l'application emprunte une identité via <identity impersonate="true"/>, l'identité sera l'utilisateur anonyme (en règle générale IUSR_MACHINENAME) ou l'utilisateur de la demande authentifié.

    Pour accorder un accès ASP.NET à un fichier, cliquez avec le bouton droit sur le fichier dans l'Explorateur, choisissez "Propriétés" et sélectionnez l'onglet Sécurité. Cliquez sur "Ajouter" pour ajouter l'utilisateur ou le groupe approprié. Sélectionnez le compte ASP.NET et activez les cases à cocher correspondant à l'accès souhaité.
    Erreur source:

    Ligne 285 : string file = filename + "." + file_ext;
    Ligne 286 : //save the file to the server
    Ligne 287 : FileUpload1.PostedFile.SaveAs(Server.MapPath("..\\Documents\\docs\\") + file);
    Ligne 288 :
    Ligne 289 : //Enregistrement du nouveau document dans la base de données


    Fichier source : c:\inetpub\wwwroot\LocalIISCera\Backend\Doc_Upload.aspx.cs Ligne : 287
    Trace de la pile:

    [UnauthorizedAccessException: L'accès au chemin d'accès 'C:\inetpub\wwwroot\LocalIISCera\Documents\docs' est refusé.]
    System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) +7716447
    System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy) +1162
    System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, String msgPath, Boolean bFromProxy) +61
    System.IO.FileStream..ctor(String path, FileMode mode) +55
    System.Web.HttpPostedFile.SaveAs(String filename) +99
    Backend_Default.EnregistrerDoc() in c:\inetpub\wwwroot\LocalIISCera\Backend\Doc_Upload.aspx.cs:287
    Backend_Default.ButtonValider_Click(Object sender, EventArgs e) in c:\inetpub\wwwroot\LocalIISCera\Backend\Doc_Upload.aspx.cs:161
    System.Web.UI.WebControls.Button.OnClick(EventArgs e) +111
    System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +110
    System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +10
    System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +13
    System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +36
    System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1565
    Pouvez-vous m'aider ?

    Merci beaucoup

  2. #2
    Membre éclairé Avatar de SonnyFab
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    498
    Détails du profil
    Informations personnelles :
    Âge : 34

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2010
    Messages : 498
    Par défaut
    C'est un problème de droits!

  3. #3
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2010
    Messages
    25
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2010
    Messages : 25
    Par défaut
    Oui je m'en doute bien !

    Mais quels droits dois-je mettre, et à quel utilisateur ?

  4. #4
    Membre éclairé Avatar de SonnyFab
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    498
    Détails du profil
    Informations personnelles :
    Âge : 34

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2010
    Messages : 498
    Par défaut
    Hum je sais pas trop désolé juste que quand j'avais eu ce problème l'administrateur m'avis expliqué que c'est un problème de droits et il avait cocher pas mal de trucs!
    Encore désolé de pas pouvoir faire d'avantage

  5. #5
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 103
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 103
    Par défaut
    il faut voir dans ta configuration ASP.NET en plus des droits d'accès physiques.

  6. #6
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2010
    Messages
    25
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2010
    Messages : 25
    Par défaut
    À quel endroit de la configuration ?

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 6

  8. #8
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2010
    Messages
    25
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2010
    Messages : 25
    Par défaut
    Bonjour,

    Je n'ai toujours pas réussi à résoudre mon problème, quand je cherche des infos sur l'upload de fichiers et sur les droits qui vont avec, je ne trouve rien de plus que ce que j'ai déjà posté dans mon premier message.

    Cinemania, tu parles de modifier quelque chose dans la configuration asp .net, peux-tu m'en dire plus ?


    @alexba : peux-tu m'expliquer un peu de quoi il s'agit (pour ton lien) ? Je suis allée dessus et j'avoue que je ne comprends pas trop ce que c'est, ni quel rapport ça a avec mon problème

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Février 2007
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 11
    Par défaut Problème
    Bonjour,

    As-tu réussi à résoudre ton problème ? Si oui, quelle solution as-tu apporté ?

    j'ai moi même le même souci d'écriture dans un répertoire en local ( accès refusé sur un répertoire). J'ai pourtant donné les autorisations en écriture sur le répertoire mais rien n'y fait ?

    Contexte d'utilisation IIS 6.0 et ASP.NET 3.5

    Merci d'avance

  10. #10
    Membre éprouvé Avatar de megamario
    Homme Profil pro
    VB6/VB.net/C/C++/C#
    Inscrit en
    Septembre 2008
    Messages
    931
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : VB6/VB.net/C/C++/C#
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2008
    Messages : 931
    Par défaut
    Bonjour à tous,

    Le post est ancien désolé, mais il apparaît toujours dans les 1er post lors de la recherche google et j'ai le même souci.


    J'essaie d'envoyer en FTP des fichiers sur un serveur embarqué local qui est sous linux depuis mon PC qui est sous Windows 7 x64.

    J'ai plusieurs fichiers qui passe sans souci mais d'autre ne passe pas avec le fameux message " L'accès au chemin d'accès xxxx est refusé"

    A la suite de cela j'ai ajouté un contrôle complet avant la tentative d'envoie.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
         Public Function testOpenFile(ByVal ch As String, ByRef oError As Integer) As Boolean
            Dim sr As StreamReader = Nothing
            Dim txt As String
            Try
                If File.Exists(ch) Then
                    sr = New StreamReader(ch)
                    txt = sr.ReadLine()
                    sr.Close()
                    sr = Nothing
                    testOpenFile = True
                    oError = 0
                Else
                    testOpenFile = False
                    oError = -1
                End If
            Catch ex As Exception
                If Not sr Is Nothing Then
                    sr.Close()
                    sr = Nothing
                End If
                testOpenFile = False
                oError = -2
            End Try
     
        End Function
    Donc ici c'est tout bête je teste si le fichier est présent, puis je tente de l'ouvrir et même de lire la 1ere ligne.

    Sur mes 25 fichiers tous passent ce test sans souci, mais lors de l'ouverture pour l'envoie j'ai environ la moitié qui ne passe pas avec ce message.

    Voici la méthode ou il plante (repris d'un exemple trouvé sur le net pour envoyer des fichiers en ftp)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
        Public Sub CreateDataFile()
            Dim oError As Integer
            If m_Filename = "" Then
                m_DownloadToFile = False
            ElseIf m_DownloadToFile Then
                Try
                    If Main.testOpenFile(m_Filename, oError) Then
                        If m_StreamDirection = StreamDirections.Download Then
                            m_FileStream = New FileStream(m_Filename, System.IO.FileMode.OpenOrCreate)
                        Else
                            m_FileStream = New FileStream(m_Filename, System.IO.FileMode.Open) ' Il plante ICI <<<------
                        End If
                        If (m_FileMode = FileModes.Append) AndAlso (m_AppendFrom > 0) Then
                            m_FileStream.Seek(m_AppendFrom, SeekOrigin.Begin)
                            m_TransferredBytes = m_FileStream.Position()
                        End If
                    Else
                        If oError = -1 Then
                            Debug.Print("Fichier non accessible")
                        End If
                        If oError = -2 Then
                            Debug.Print("Fichier non ouvrable")
                        End If
                    End If
     
                Catch
                    Throw New IOException()
                End Try
            End If
        End Sub
    J'ai tenté de lancer Visual Studio 2010 en mode admin, mais rien n'y fait. Apparemment ce n'est pas un problème de droit d'ouverture du fichier car je les ouvrent tous sans souci à l'aide de mon pré-test.

    Merci de votre aide

  11. #11
    Membre éprouvé Avatar de megamario
    Homme Profil pro
    VB6/VB.net/C/C++/C#
    Inscrit en
    Septembre 2008
    Messages
    931
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : VB6/VB.net/C/C++/C#
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2008
    Messages : 931
    Par défaut
    Bonjour à tous,
    Malgré mes nombreuses recherches je n'est pas trouvé grand chose, beaucoup de rapport indiquant un problème de droits sur le PC.
    J'ai tenté aussi de copier sous la racine de mon soft les fichiers avant de les envoyer mais c'etait pareil.

    Je n'avais donc aucun souci de manipulation des fichiers en dehors de ce fileStream.
    Aucun rapport avec la tailles des fichiers et tous mes fichiers ont les mêmes droits.
    Et puis j'ai regardé les prototypes de fileStream et j'ai ajouté simplement le FileAccess.Read et cela fonctionne maintenant.
    Donc:
    m_FileStream = New FileStream(m_Filename, System.IO.FileMode.Open)Deviens:
    m_FileStream = New FileStream(m_Filename, System.IO.FileMode.Open, FileAccess.Read)Si cela peut aider.

  12. #12
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2017
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2017
    Messages : 29
    Par défaut
    Oui, bien sûr. Tu as raison, megamario.

    Lorsque le message ci-dessous s'affiche :
    "System.UnauthorizedAccessException : l'accès au chemin d'accès C: est refusé."

    FileAccess.Read ou FileAccess.ReadWrite remplissent parfaitement leur rôle.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    m_FileStream = New FileStream(m_Filename, System.IO.FileMode.Open, FileAccess.Read)

  13. #13
    Membre éclairé

    Profil pro
    Chef de Projet / Développeur
    Inscrit en
    Juin 2002
    Messages
    617
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de Projet / Développeur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2002
    Messages : 617
    Par défaut
    C'est une erreur de sécurité gravissime que de permettre l'écriture dans le dossier C:\inetpub\wwwroot\.... à un utilisateur connecté à IIS.
    Ce n'est pas pour rien que cela est fermé par défaut.

    Un utilisateur pourrait, par exemple y uploader un fichier aspx avec du code exécutable, puis appeler cette page avec son navigateur, ce qui, via C#, va s'exécuter en donnant accès à toute la machine.

    Dans votre exemple, une fois déployé, il suffira d'appeler
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    www.mon_site.com/Documents/docs/le_aspx_que_je_viens_d_uploader.aspx
    pour exécuter n'importe quel code C# ou VB à même le serveur.

    Certes, on peut se protéger de CE scénario, mais il en existe tout un tas et la moindre faille, ou oubli dans un test, donnera des droits important à n'importe quel utilisateur distant.
    Le plus simple et que wwwroot reste read-only

    On défini un chemin ailleurs sur la machine (paramétré dans web.config) ou vont être écrit et lu les fichiers utilisateurs.
    Généralement cela oblige à un index en base de données.
    Tous les accès se font ainsi à travers notre code qui est le seul à savoir où se trouve les fichiers.
    Ainsi, les fichiers n'ont pas d'URL d'accès direct et ne peuvent pas être appelé directement depuis un navigateur, ce qui protège de l'exécution d'un document 'actif'.


    Pour accéder à un fichier uploadé, cela se fait à travers une page du type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    www.monsite.com/mes_documents.aspx?doc_id=12345
    qui va va lire le fichier et renvoyer le flux et le type mime correspondant dans la réponse.
    Ainsi, quels que soient leurs types, les fichiers ne sont jamais que des flux d'octets et rien d'autres.

    Mais si tenez à faire une bêtise il faut effectivement donner des droits à des comptes comme IUSR, IIS_IUSRS, LOCAL SERVICE ou NETWORK SERVICE.
    Mais j'insiste : c'est une très mauvaise idée.

    (IUSR_machine_name n'existe plus sur les versions récente d'IIS)

Discussions similaires

  1. Réponses: 3
    Dernier message: 30/01/2013, 17h51
  2. [PowerShell] Copy-Item : L'accès au chemin d'accès est refusé.
    Par torrgovin dans le forum Scripts/Batch
    Réponses: 6
    Dernier message: 27/03/2012, 18h05
  3. Réponses: 4
    Dernier message: 13/01/2011, 10h10
  4. XMLWriter : L'accès au chemin d'accès est refusé
    Par Invité dans le forum Windows Forms
    Réponses: 4
    Dernier message: 07/07/2009, 10h10
  5. L'accès au chemin d'accès est refusé
    Par amirad dans le forum Windows Forms
    Réponses: 1
    Dernier message: 23/05/2009, 10h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo