<input type="file"> ne fonctionne pas en https

Résolu

Bonjour j'essaye de créer un site web sur lequel j'aimerais envoyer des fichiers, quand j'avais mon site en http je pouvait envoyer mes fichiers et ils apparaissaient dans le fichier "upload" de mon serveur (je voyait le fichier de l'utilisateur apparaitre grace au client SFTP) mais depuis que j'ai activé le contrat ssl sur mon serveur (le site est donc maintenant en https) l'upload de fichiers ne fonctionne plus j'ai donc compris que le https bloquait les envois de fichiers par sécurité .

J'aimerais donc savoir si il n'y à pas un moyen de désactiver le blocage de l'upload (j'utilise le certbot de let's encrypt)

Ou

s'il est possible de par exemple changer le fichier (par exemple une image) et le changer en fichier texte puis récupérer le texte en $_POST[] dans du php puis via php re-changer le texte en image et finalement avoir l'image sur le serveur

je bloque car le php ne peut pas accéder a l'image je pense donc a du JS pour changer le fichier en texte puis php pour le re-changer en image (ou du node.js)

EN GROS : je veut upload un fichier vers un serveur a travers un protocole https

Merci d'avance pour toute aide donnée =)

9 réponses

  1. OK !

    au tant pour moi c'était bien une erreur de code !

    j'ai vérifié mon code avent avoir (mal)retiré une fonctionnalité 
    Au final c'était un vieux point d'exclamation qui était au mauvais endroit , merci à vous tous pour votre aide =) 

    1. le $_FILES['userfile']['error'] ne me retourne rien mais 

      var_dump($_FILES) me retourne :

      array(1) { ["fileToUpload"]=> array(5) { ["name"]=> string(13) "imagetest.png" ["type"]=> string(9) "image/png" ["tmp_name"]=> string(14) "/tmp/php0qwywX" ["error"]=> int(0) ["size"]=> int(26496) } }

      1. Désolé pour le temps de réponse je n'ai pas beaucoup de temps en ce moment mais voila :

        jordane45 :

        mon site n'est plus accessible en http (automatiquement redirigé vers https)

        Je n'ai pas fait de montée de version d'apache, elle à dus se faire seule quand j'ai fait un apt get upgrade/update j'imagine

        Merci d'avoir déplacé mon sujet =)

        NHenry :

        j'aimerais faire comme toi et changer les accès mais je ne sais pas où mettre ce texte 
        (dans le virtualhost sous le port 443 (https) ? dans le /etc/apache2/sites-available/monfichierdeconfiguration.conf ?)

        avion-f16 :

        mon fichier /etc/apache2/sites-available/monfichierdeconfiguration.conf en entier :

        <VirtualHost *:80>
                ServerName monsite.com

                ServerAdmin ***@***
                DocumentRoot /var/www/site-web-B

                LogLevel info
                ErrorLog ${APACHE_LOG_DIR}/monsite_error.log
                CustomLog ${APACHE_LOG_DIR}/monsite_access.log combined
        RewriteEngine on
        RewriteCond %{SERVER_NAME} =monsite.com
        RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
        </VirtualHost>

        <VirtualHost *:443>
                ServerName monsite.com

                ServerAdmin ***@***
                DocumentRoot /var/www/site-web-B
                SSLEngine on

                SSLcertificateFile /etc/letsencrypt/live/monsite.com/cert.pem
                SSLCertificateKeyFile /etc/letsencrypt/live/monsite.com/privkey.pem
                SSLCertificateChainFile /etc/letsencrypt/live/monsite.com/chain.pem


                LogLevel info
                ErrorLog ${APACHE_LOG_DIR}/monsite_error.log
                CustomLog ${APACHE_LOG_DIR}/monsite_access.log combined

        <Directory /var/www/site-web-B>
                Options Indexes FollowSymLinks
                AllowOverride All
                Require all granted
        </Directory>

        RewriteEngine on
        RewriteCond %{SERVER_NAME} =monsite.com
        RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
        </VirtualHost>


        + var_dump($_FILES)
        + $_FILES['userfile']['error']

        je teste ces codes dans le code php de mon upload ?
        je le testerais quand j'aurais le temps (dans le code php de mon upload)je te le redirais 

        1. Modérateur

          Sur un de mes fichiers (qui a subit plusieurs migrations) j'ai :

                         Options FollowSymLinks MultiViews
                          AllowOverride all
                          Order allow,deny
                          allow from all
                          deny from none
                          Require all granted
          

          1. Modérateur

            Ton site est-il toujours accessible en http (sans s ) ?

            SI oui, l'upload fonctionne t'il en http ?

            Et pourquoi ne pas "forcer" la redirection en https ?  ( configuration au niveau apache et/ou via fichier .htaccess )

            Tu sembles également nous indiquer que tu as fais une monté de version d'apache ?

            Et enfin, si tu penses que le souci ne vient pas du code .. ce n'est donc pas un problème de "programmation" et encore moins de php....

            A voir si une personne au niveau du forum Linux ou éventuellement webmaster peut t'aider avec la configuration de ton serveur. (je déplace ta question dans le forum webmaster pour l'instant )


            1. Ok parfait si le https ne bloque rien !
               

              Dans mes logs j'ai ces erreurs :

              "[Sun Sep 25 00:00:02.423371 2022] [mpm_prefork:notice] [pid 1058389] AH00163: Apache/2.4.41 (Ubuntu) Op>
              [Sun Sep 25 00:00:02.423396 2022] [core:notice] [pid 1058389] AH00094: Command line: '/usr/sbin/apache2'
              <630: client denied by server configuration: /var/www/html/server-status"

              je me suis un peut renseigné sur l'erreur : "AH01630: client denied by server configuration"

              j'ai vu que la cause de celle ci est probablement la mise a jour d'apache de 2.2 à 2.4 j'ai donc rajouté "<Directory /var/www/site-web-B>
                      Options Indexes FollowSymLinks
                      AllowOverride All
                      Require all granted
              </Directory>"

              dans le fichier etc/apache2/sites-available/monfichierdeconfiguration.conf

              mais rien n'y fait, de plus avant mon code marchait je ne pense pas que le problème vienne de celui-ci je pense que je ne sais pas quel fichier modifier pour changer les autorisations 

              De plus je n'ai pas crée de fichier .htaccess

              1. Modérateur

                Bonjour,

                mais depuis que j'ai activé le contrat ssl sur mon serveur (le site est donc maintenant en https) l'upload de fichiers ne fonctionne plus j'ai donc compris que le https bloquait les envois de fichiers par sécurité .

                Heuuu.. non. le https ne bloque rien !

                A mon avis, tu as mal configuré le fichier .htacess de ton site qui se charge de forcer la redirection en https.

                Et comme le dit Nhenry,  il faudrait commencer par : 

                1- nous montrer le code utilisé

                2 - Nous montrer le fichier htaccess

                3 - Vérifier et nous montrer) le contenu du fichier error.log du serveur apache


                1. Modérateur

                  As-tu un message d'erreur ?
                  Quels sont les logs (error.log) du serveur ?
                  Quel est le code HTML utilisé (avec les URLs dans le code) ?