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

AJAX Discussion :

[AJAX] Requete Ajax retournant un 403


Sujet :

AJAX

  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 15
    Par défaut [AJAX] Requete Ajax retournant un 403
    Bonjour à tous,

    Voilà ce que je souhaite faire :
    Je souhaite réaliser un page web de recherche à partir d'une BDD. J'ai donc un formulaire de recherche comportant des filtres sous forme de liste déroulante.

    Pour info cette page permet de rechercher des salariés et afficher ceux correspondant aux critères (agence de travail, travaux réalisés, etc.)

    Ce que j'aimerais faire, c'est que, dynamiquement, lorsque j'utilise mon select contenant la liste des salariés (récupérée via une requête sur table) et que je sélectionne une valeur, un petit cadre en dessous apparaît m'affichant des infos comme par exemple une date et un autre champs (la requete pour ce faire est déjà prête).

    Donc j'ai choisis pour ce faire d'utiliser l'objet javascript XMLHttpRequest pour éxécuter ma requete via Javascript sans avoir à recharger ma page.

    QUESTION 1 : XMLHttpRequest est il la meilleure solution pour effectuer une requete dynamique sans recharger une page complète ?

    Pour l'instant j'essaie en affichant qu'un simple fichier texte (test.txt) contenant une phrase et qui seras affichée au onhange de mon select (ce fichier est dans le même répertoire que le fichier appelant)
    Voilà le code de la fonction lancée à l'appel du onchange en HTML

    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
     
    function transmission()
    {
     
    		var xhr_object = getXMLHttpRequest(); /* Renvoie un objet XMLHttpRequest ou ActiveX en fonction du navigateur */
     
    		xhr_object.onreadystatechange = function() 
    		{
    				alert("OK");
    				alert('Status : ' + xhr_object.status);
    				alert('Réponse : ' + xhr_object.responseText);
    		};
     
    		xhr_object.open("POST", "test.txt", true);
     
    		xhr_object.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
     
     
    		xhr_object.send(null);

    Le message 'OK' est affiché 5 fois avant de me faire apparaitre une fenetre avec écrit 403 dedans.
    La réponse est le code HTML suivant :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
    <html><head>
    <title>403 Forbidden</title>
    </head><body>
    <h1>Forbidden</h1>
    <p>You don't have permission to access '...'</p>
    </body></html>

    Où '...' est le chemin relatif du repertoire FTP sur le serveur où se trouve le fichier.

    J'ai fais des recherche sur l'Internet et apparrement ce refus d'accès serait peut être due du à une politique de sécurité avec des fichiers .htaccess J'ai trouvé ce fichier sur le serveur qui est lié à un fichier passwd contenant un mot de passe crypté mais je nais pas comment autoriser l'accès au fichier.

    QUESTION 2 : Comment contourner un accès forbidden 403 ? Sachant que j'ai accès à ce serveur via FTP et une BDD via PHPMyAdmin.

    Je précise que je suis complètement débutant en Ajax (j'en ai jamais entendu parler jusqu'à ce jour) et même en développement web en général, donc si j'ai commis des erreurs/confusions, je serai ravis de l'apprendre

    Merci d'avance

  2. #2
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    mais je nais pas comment autoriser l'accès au fichier.
    C'est probablement parce que tu n'as pas été regarder du coté de la
    Comment accéder à une page nécessitant une athentification ?
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 15
    Par défaut
    Merci, effectivement je n'ai pas vu cette partie de la FAQ, merci ^^

    Ok, donc en gros je met le contenu de mon fichier passwd.txt (fichier lié à .htaccess) dans l'url de la fonction open ?

    Le mot de passe du fichier passwd est crypté mais je connais la version décryptée. J'essaie avec quelle version (cryptée ou décryptée ?)?

  4. #4
    Membre averti
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 15
    Par défaut
    Re je viens d'essayer.

    Vu que le fichier est dans le même dossier, je vais donc me retrouver avec un code du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    xhr_object.open("POST", "monlogin:monmdp@test.txt", true);
    Où monmdp est mon mot de passe (version cryptée présente dans mon fichier passw.txt qui est appelé par .htaccess)
    J'ai essayé avec le mot de passe "décrypté" aussi mais ça ne marche pas.

    Idem sous cette forme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    xhr_object.open("POST", "test.txt", true, 'monlogin', 'monmdp');
    FireBug me rends cette erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    403 Forbidden
    		65ms	
    "NetworkError: 403 Forbidden - http://monlogin:monmdp@adresseIP/mondossier/test.txt"
    "adresseIP" est l'adresse du site (utilisée en tant qu'URL pour accéder au site).
    J'ai également essayé en créer un fichier .htaccess dans le même répertoire que ma page appelante et mon "test.txt". ce fichier contient le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    order deny,allow
    deny from all
    <Files adresseIP/mondossier/test.txt>
    allow from all
    </Files>
    Mais sans succès, toujours le même problème...



    Pour indication, le fichier .htaccess dont je parlais dans le tous premier post est dans un répertoire parent à celui dans lequel je travail.

    Voici son contenu actuel :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    AuthName "Accès réservé"
    AuthType Basic
    AuthUserFile "repertoirecourant/img/passw.txt"
    Require valid-user

    Où "repertoirecourant" est l'URL absolue du dossier où se trouve mon .htacces (donc "passw.txt" est dans le dossier enfant "img").

  5. #5
    Membre averti
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 15
    Par défaut
    Personne d'autre ne peux m'aider ?

    J'ai plusieurs tests, et j'ai toujours cette erreur "403 Forbidden".

    Sachant que j'ai accès au FTP (comprenant le dossier d'installation d'Apache et de MySQL, avec tous les autres fichiers du site), quel moyens me restent ils pour autoriser ce typed e reuqete Ajax ?

    Se pourrait-il qu'il s'agisse d'une limitation/sécurité volontaire au niveau du serveur que je ne puisse pas changer ?

  6. #6
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    AuthUserFile correspond au chemin du fichier contenant les utilisateurs autorisés (ton .htpasswd), pas le fichier que tu veux autoriser.
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  7. #7
    Membre averti
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 15
    Par défaut
    Citation Envoyé par Bovino Voir le message
    AuthUserFile correspond au chemin du fichier contenant les utilisateurs autorisés (ton .htpasswd), pas le fichier que tu veux autoriser.

    Oui mais ici j'ai justement mis le fichier qui contient login:motdepassecrypté

    Faut-il qu'il soit obligatoirement nommé ".htpasswd" ? (ici il s'appelle passw.txt)

  8. #8
    Expert confirmé
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 094
    Par défaut
    Citation Envoyé par Jim_Crayon Voir le message
    J'ai plusieurs tests, et j'ai toujours cette erreur "403 Forbidden".
    Quand tu accèdes à cette page avec ton navigateur, de façon classique, as-tu toujours l'erreur ?
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  9. #9
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Par défaut
    Bonjour,

    Perso, je n'appelle pas directement la page cible avec AJAX dans ton cas. Je vais passer par une page intermédiaire qui va appeler la page cible. C'est plus sécurisé que de passer le mot de passe dans une fonction javascript.

    A+.

  10. #10
    Membre averti
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 15
    Par défaut
    Citation Envoyé par Watilin Voir le message
    Quand tu accèdes à cette page avec ton navigateur, de façon classique, as-tu toujours l'erreur ?

    Oui.
    J'ai la page HTML 403 Forbiden qui s'affuiche (elle correspond au code source que je reçois en résultat de alert('Réponse : ' + xhr_object.responseText); )


    Perso, je n'appelle pas directement la page cible avec AJAX dans ton cas. Je vais passer par une page intermédiaire qui va appeler la page cible. C'est plus sécurisé que de passer le mot de passe dans une fonction javascript.
    Que met-tu dans cette page intermédiaire ?
    Je ne sais pas si ça peux résoudre mon problème.
    Mon ressentis (partagé avec un collègue stagiaire) est que l'Ajax est désactivé sur notre Intranet...

    Il y aurait-il une routine (script Javascript, fonction, bout de code, etc.) assez sûre pour tester si Ajax est autorisé sur un serveur ?

    Et si il est désactivé, il y a t-il possibilité de le ré-activer ?

  11. #11
    Expert confirmé
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 094
    Par défaut
    Citation Envoyé par Jim_Crayon Voir le message
    Mon ressentis (partagé avec un collègue stagiaire) est que l'Ajax est désactivé sur notre Intranet...
    Non, car justement une requête normale produit le même résultat. De plus, 403 correspond à une interdiction permanente. Si c'était un refus d'authentification, tu aurais une 401.

    À mon avis, le problème vient du .htaccess. Vérifie auprès de ton hébergeur, il est possible que tu ne puisses pas utiliser toutes les fonctionnalités que tu voudrais. En l'occurence, la structure <File>...</File> est peut-être ignorée silencieusement.
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  12. #12
    Membre averti
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 15
    Par défaut
    Citation Envoyé par Watilin Voir le message
    Non, car justement une requête normale produit le même résultat. De plus, 403 correspond à une interdiction permanente. Si c'était un refus d'authentification, tu aurais une 401.

    À mon avis, le problème vient du .htaccess. Vérifie auprès de ton hébergeur, il est possible que tu ne puisses pas utiliser toutes les fonctionnalités que tu voudrais. En l’occurrence, la structure <File>...</File> est peut-être ignorée silencieusement.
    Merci, par contre les requêtes "normales" fonctionnent très bien. J'en ai fait plusieurs et aucun soucis (en méthode POST et GET).
    Par requêtes normales, j'entends soumission d'un formulaire à un code PHP dans la page ou dans une autre page, en cliquant sur un bouton et en rechargeant la page actuelle/en chargeant une autre.

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    255
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 255
    Par défaut
    Il me semble bien qu'une requête AJAX est une requête HTTP standard en GET ou POST (voire HEAD) selon la méthode configurée, mais qui retourne simplement un résultat par callback et pas directement à l'affichage.

    Donc si ta requête fonctionne en mode navigation, elle doit aboutir en mode AJAX.

    J'ai bon ?

  14. #14
    Membre averti
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 15
    Par défaut
    Je ne sais pas ce qu'est une requête en mode navigation.

    Ce que je veux faire dans un premier temps (à des fins de tests, je ferai pointer ma fonction Ajax sur un fichier PHP après), c'est juste afficher un bête fichier texte dans une boite d'alerte.

    J'ai également vérifié les droits d'accès au niveaud e FileZilla. J'ai mis 777 aussi bien pour le fichier appelant (contenant ma fonction Ajax) que pour le fichier de destination (test.txt) et pour le fichier .htaccess du répertoire courant.

  15. #15
    Expert confirmé
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 094
    Par défaut
    Une requête en mode navigation c'est une requête envoyée simplement par ton navigateur, lorsque tu visites la page. C'est la question que je t'ai posée plus haut, et tu m'as répondu que ça fonctionnait.

    Techniquement, la forme de la requête est exactement la même, qu'elle soit envoyée en « mode navigation » ou en mode AJAX. Le serveur ne peut pas faire la différence, sauf si le développeur a choisi de rajouter des en-têtes dans sa requête AJAX (avec setRequestHeader) pour signaler qu'il s'agit d'AJAX. C'est, par exemple, ce que fait jQuery avec l'en-tête X-Requested-With.
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

Discussions similaires

  1. [AJAX] requete ajax imbriquée
    Par affreuxzozo dans le forum AJAX
    Réponses: 9
    Dernier message: 14/05/2009, 14h44
  2. [AJAX] Requete Ajax : accents
    Par Romalafrite dans le forum AJAX
    Réponses: 2
    Dernier message: 11/05/2009, 11h35
  3. [AJAX] Requete Ajax
    Par Carb0 dans le forum Général JavaScript
    Réponses: 12
    Dernier message: 19/01/2009, 16h42
  4. [AJAX] requete ajax à partir de deux champ de mon form
    Par ineskh dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 30/04/2008, 14h39
  5. [AJAX] Requete ajax sur une meme page php
    Par Bownobo dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 22/06/2007, 11h25

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