Page 1 sur 1

upload des fichier simplement ( Fin normalement ... ^^ )

Posté : 07 juin 2019, 10:49
par Belta
Bonjour ,

Je suis nouvelle ici !
Je me débrouille pour adapter a ma sauce les codes deja existant mais me demander pas de créer un truc de A a Z je n'ai pas les connaissance suffisante pour ca ! #-o #-o #-o

J'aurais besoin de votre aide "

j'ai toucher un code pour un uploader en JAVA plutot bien SAUF QUE !

il a été proteger par un mot de passe . j'ai donc modifier le mot de passe dans l'index.php mais il ne prend pas en compte ma demande du coup au final c'est inutilisable :(

Meme avec le mot de passe d'origine qui a été mis '' coucou '' ca fonctionne meme pas j'ai toujours l'erreur mot de passe incorect ! :non:

si quelqu'un pourrais m'aider sur ce qui cloche

voici l'index avec le mot de passe a éditer !
<?php


session_start('UpData');

// -----------------------------------------------------------------------------
// VARIABLE UTILISATEUR

@ini_set('upload_max_filesize', '16M');               // Taille maximale d'un fichier à charger
@ini_set('memory_limit', '125M');                     // Mémoire limite qu'un script est autorisé à allouer
@ini_set('max_execution_time', 0);                    // Temps max pour l'exécution d'un script
define('PATH_UP', 'data/');                           // Path où se situe les fichiers uploadés
define('PLUPLOAD', 'inc/plupload/');                  // Path où se situe les fichiers de Plupload
define('INC', 'inc/');                                // Path où se situe les éléments nécessaire à l'app

include_once(INC . 'core/lang.updata.php');           // Fichier langue

$langue    = $lang['fr'];                             // Pour changer la langue : 'fr' ou 'en' -- To change the language, put $en
$pass      = 'coucou';                                // Mot de passe actuel. Sensible à la casse
$allow_ext = array(                                   // Les extensions des fichiers autorisés. Attention aux formats comme sh, exe ou encore php
                'accdb', 'java', 'docx', 'xlsx', 'html', 'pptx', 'sh', 'py', '7z', 'c',
                'zip', 'pdf', 'doc', 'xls', 'odt', 'txt', 'htm', 'css', 'sql', 'swf', 'cbl', 
                'cfg', 'dat', 'ind', 'ini', 'bat', 'cpp', 'txt', 'ppt', 'vpp', 'vsd', 'lun', 
                'mp3', 'mp4', 'flv', 'avi', 'ddl', 'jpg', 'png', 'gif', 'bmp', 'ico'
            );

// -----------------------------------------------------------------------------
// Configuration

// Config générale
header('Content-Type: text/html; charset=utf-8');     // Charset
@ini_set('magic_quotes_runtime', 0);                  // Désactive la fonction magic_quotes
@ini_set('magic_quotes_gpc', '0');                    // Désactive la fonction magic_quotes

// Version de l'app
define('VERSION',      'v1.Alpha');
define('NAME_VERSION', 'UpData');

// Si le sysadmin a activé les magic quotes, ceci aura pour effet de les désactiver
if (get_magic_quotes_gpc()) {
    function stripslashes_deep($value) { 
        $value = is_array($value) ? array_map('stripslashes_deep', $value) : stripslashes($value); 
        return $value; 
    }

    $_POST   = array_map('stripslashes_deep', $_POST);
    $_GET    = array_map('stripslashes_deep', $_GET);
    $_COOKIE = array_map('stripslashes_deep', $_COOKIE);
}

// Vérification de la version de PHP. Si la version est inférieure à 5.1.0, l'installation ne pourra pas se faire !
function checkPHPVersion() {
    if (version_compare(PHP_VERSION, '5.1.0') < 0) {
        die('La version est obsolète ! Mettez à jour votre serveur avant de continuer. <br />
             This version of PHP is too old ! You have to upgrade your server before to continue.');
        exit();
    }
}

checkPHPVersion();

// -----------------------------------------------------------------------------
// Sécurité

// Création du token
if (!isset($_SESSION['tokens']))
    $_SESSION['tokens'] = array('key' => md5(time() . '-' . rand(0, 5000)));

// Vérification de la provenance du script. 
// S'il ne provient pas du serveur, on redirige l'internaute.
if ($_SERVER['PHP_SELF'] !== $_SERVER['SCRIPT_NAME']) {
    header('Location: index.php');
    exit();
}

// -----------------------------------------------------------------------------
// Divers

// Supprimer les accents de la chaîne passée en paramètre
function cleanAccent($str) {
    $str = strtr($str,"ÀÁÂÃÄÅàáâãäåÇçÒÓÔÕÖØòóôõöøÈÉÊËèéêëÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ,",
                      "AAAAAAaaaaaaCcOOOOOOooooooEEEEeeeeIIIIiiiiUUUUuuuuyNn_");
 
    $str = strtolower(trim($str)) ;
    $str = preg_replace('/[^a-z0-9\-\.,\*]/', '-', $str) ;
    $str = preg_replace('/([\-\.,\*]{2,})/ue', "substr('\\1', 0, 1)", $str) ;
    $str = preg_replace('/^[^a-z0-9]|[^a-z0-9]$/', '', $str ) ;
    $str = str_replace('.', '-', $str);

    return $str;
}

// -----------------------------------------------------------------------------
// TRAITEMENT

// --- VERIF PASS
// Vérification du mot de passe entré par l'utilisateur.
if(isset($_GET['action']) && $_GET['action'] == "verif") {
    if(isset($_GET['token']) && $_GET['token'] == $_SESSION['tokens']['key']) {
        if($_GET['password'] == $pass) {
            die('{"error":false, "message":"OK"}');
            exit();
        }
        die('{"error":true, "message":"pass"}');
        exit();
    } else {
        die('{"error":true, "message":"token"}');
        exit();
    }
}

// --- DELETE
// Suppression du fichier passé dans l'URL
if(isset($_GET['action']) && $_GET['action'] == "delete") {
    if(isset($_GET['token']) && $_GET['token'] == $_SESSION['tokens']['key']) {
        unlink(PATH_UP . $_GET['file']);
        die('{"error":false, "message":"OK"}');
        exit();
    } else {
        die('{"error":true, "message":"token"}');
        exit();
    }
}


// --- UPLOAD
// Méthode permettant d'uplader le fichier sur le serveur.
if(isset($_GET['action']) && $_GET['action'] == "upload") {
    if(empty($_FILES) || $_FILES['file']['error'] != 0) {
        die('{"error":true, "message":"<?php echo $langue[\'OP_FAILURE\']; ?>"}');
        exit();
    }

    $file = $_FILES['file'];
    $ext  = explode('.', $file['name']);
    $ext  = strtolower($ext[count($ext) - 1]);

    $name = substr($file['name'], 0, strlen($file['name']) - (strlen($ext)+1));
    $name = cleanAccent($name);
    $name .= '.' . $ext;

    if(in_array($ext, $allow_ext)){
        if(move_uploaded_file($_FILES['file']['tmp_name'], PATH_UP . $name)) {
            $link = PATH_UP . $name;
            $html = '<div class="file">' . basename($link) . '<div class="actions"><a href="'. $link . '" class="download">D</a> <a href="' . basename($link) . '" class="del">X</a></div></div>';
            $html = str_replace('"', '\\"', $html);

            die('{"error":false, "html":"' . $html . '"}');
            exit();
        }
        
        die('{"error":true, "message":"<?php echo $langue[\'OP_FAILURE\']; ?>"}');
        exit();
    }

    die('{"error":true, "message":"<?php echo $langue[\'OP_WARNING\']; ?>"}');
    exit();
}

?><!DOCTYPE html>
<html lang="fr-FR">
    <head>
        <meta charset="utf-8" />
        <title>UpData</title>
        <link rel="stylesheet" type="text/css" href="<?php echo INC; ?>tpl/style.css" />
    </head>
    <body>
        
        <div class="main">
            <h1><a href="">UpData</a></h1>
            <p><?php echo $langue['about']; ?></p>

            <div id="plupload">
                <div id="droparea">
                    <p><?php echo $langue['file']; ?></p>
                    <span class="or"><?php echo $langue['or']; ?></span>
                    <a href="#" id="browse" class="btn"><?php echo $langue['open']; ?></a>
                </div>

                <div id="filelist">
                    <?php foreach(glob(PATH_UP . '*.*') as $v): // Listing des fichiers ?>
                        <div class="file">
                            <?php echo basename($v); ?>
                            <div class="actions">
                                <a href="<?php echo  $v; ?>" class="download">D</a>
                                <a href="<?php echo basename($v); ?>" class="del">X</a>
                            </div>
                        </div>
                    <?php endforeach; ?>
                </div>
            </div>
            
            <div class="clear">
            </div>
        </div>

        <footer>
            <?php echo $langue['footer']; ?> - <?php echo NAME_VERSION; ?> <?php echo VERSION; ?>
        </footer>

        <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js" type="text/javascript"></script>
        <script type="text/javascript" src="<?php echo PLUPLOAD; ?>plupload.js"></script>
        <script type="text/javascript" src="<?php echo PLUPLOAD; ?>plupload.html5.js"></script>
        <script type="text/javascript" src="<?php echo PLUPLOAD; ?>plupload.flash.js"></script>
        <script type="text/javascript">
            var uploader = new plupload.Uploader({
                runtimes  : 'html5, flash',
                container : 'plupload',
                browse_button : 'browse',
                drop_element : 'droparea',
                url : '?action=upload',
                flash_swf_url : '<?php echo PLUPLOAD; ?>',
                multipart : true,
                urlstream_upload : true
            });

            uploader.bind('Init', function(up, params) {
                if(params.runtime != "html5") {
                    $('#droparea').find('p, span').remove();
                    $('#droparea').find('#browse').css('position', 'absolute').css('top', '90px').css('left', '45%');
                }
            });

            uploader.bind('UploadProgress', function(up, file) {
                $('#' + file.id).find('.progress').css('width', file.percent + '%');
            });

            uploader.init();

            uploader.bind('FilesAdded', function(up, files) {
                var filelist = $('#filelist');

                for(var i in files) {
                    var file = files[i];
                    filelist.prepend('<div id="' + file.id + '" class="file">' + file.name + ' (' + plupload.formatSize(file.size) + ')' + '<div class="progressbar"><div class="progress"></div></div></div>');
                }

                $('#droparea').removeClass('hover');

                var pass = prompt("<?php echo $langue['TXT_PASS']; ?>","");
                $.get(
                    '', 
                    {action: 'verif', password:pass, token:'<?php echo $_SESSION['tokens']['key']; ?>'},
                    function(data) {
                        var response = $.parseJSON(data);
                        if(response.message == "OK" && response.error == false) {
                            uploader.start();
                        } else {
                            alert("<?php echo $langue['WRONG_PASS']; ?>");
                            $('#' + file.id).remove();
                        }
                        uploader.refresh();
                    }
                );
            });

            uploader.bind('Error', function(up, error) {
                alert("<?php echo $langue['OP_FAILURE']; ?>" . error.message);

                $('#droparea').removeClass('hover');
                uploader.refresh();
            });

            uploader.bind('FileUploaded', function(up, file, response) {
                data = $.parseJSON(response.response);
                if(data.error == true) {
                    alert(data.message);
                    $('#' + file.id).remove();
                } else {
                    $('#' + file.id).replaceWith(data.html);
                }
            });

            jQuery(function($) {
                $('#droparea').bind({
                    dragover : function(e) {
                        $(this).addClass('hover');
                    },
                    dragleave : function(e) {
                        $(this).removeClass('hover');
                    }
                });
                $('.del').live('click', function(e) {
                    e.preventDefault();
                    var elem = $(this);

                    var pass = prompt("<?php echo $langue['OP_CONFIRM_DEL']; ?> <?php echo $langue['TXT_PASS']; ?>","");
                    $.get(
                        '', 
                        {action: 'verif', password:pass, token:'<?php echo $_SESSION['tokens']['key']; ?>'},
                        function(data) {
                            var response = $.parseJSON(data);
                            if(response.message == "OK" && response.error == false) {
                                $.get('', {action: 'delete', file:elem.attr('href'), token:'<?php echo $_SESSION['tokens']['key']; ?>'});
                                elem.parent().parent().slideUp();
                            }
                            return false;
                        }
                    );
                });
            })
        </script>
    </body>
</html>

Une grand merci pour les personnes qui prendrons de leurs temps pour résoudre mon probleme

Re: upload des fichier simplement ( Fin normalement ... ^^ )

Posté : 07 juin 2019, 11:23
par Saian
Salut, je vois ce test if ($_GET['password'] == $pass), donc si tu veux que la validation du mot de passe fonctionne il faut que $pass soit égal à $_GET['password']. Dans le code montré $_GET['password'] devrait contenir azazazazaz.

Re: upload des fichier simplement ( Fin normalement ... ^^ )

Posté : 07 juin 2019, 12:01
par Belta
Salut, je vois ce test if ($_GET['password'] == $pass), donc si tu veux que la validation du mot de passe fonctionne il faut que $pass soit égal à $_GET['password']. Dans le code montré $_GET['password'] devrait contenir azazazazaz.
Effectivement mais c'est pas l'erreur . c'est moi qui a fait un test avant de demander de l'aide j'ai rajouter la ligne : $password = 'coucou'; pour essayer mais ca n'a pas marcher

j'ai copier le mauvais code ici pour vous donnez l’exemple

Voici le code normalement ( je vais re modifie sur l'exemple pricipale plus haut merci de me l'avoir signaler )
$langue    = $lang['fr'];                             // Pour changer la langue : 'fr' ou 'en' -- To change the language, put $en
$pass      = 'coucou';                                // Mot de passe actuel. Sensible à la casse
$allow_ext = array( 

Re: upload des fichier simplement ( Fin normalement ... ^^ )

Posté : 07 juin 2019, 12:15
par Saian
Et bien c'est compliqué de debuguer un script comme ça juste à sa lecture (il fait pas 3 lignes). En tout cas déjà le session_start() n'est pas bon :
Warning: session_start() expects parameter 1 to be array
Ca peut prendre en paramètre un tableau d'options et non pas une chaîne de caractère.
https://www.php.net/manual/fr/function. ... -start.php

PS : la base quand même pour débuguer un script c'est d'en voir les erreurs.
Tu peux ajouter ces deux lignes au début du script : :)
ini_set('display_errors', 'On');
error_reporting(E_ALL);

PPS : c'est pas java mais javascript, deux langages bien différents.
Et concrètement c'est quoi le problème que tu as ? tu parles du mot de passe mais qu'à tu à l'écran ? que fais tu ? et que se passe-t-il ?

Re: upload des fichier simplement ( Fin normalement ... ^^ )

Posté : 07 juin 2019, 12:49
par Belta
Et bien c'est compliqué de debuguer un script comme ça juste à sa lecture (il fait pas 3 lignes). En tout cas déjà le session_start() n'est pas bon :
Warning: session_start() expects parameter 1 to be array
Ca peut prendre en paramètre un tableau d'options et non pas une chaîne de caractère.
https://www.php.net/manual/fr/function. ... -start.php

PS : la base quand même pour débuguer un script c'est d'en voir les erreurs.
Tu peux ajouter ces deux lignes au début du script : :)
ini_set('display_errors', 'On');
error_reporting(E_ALL);

PPS : c'est pas java mais javascript, deux langages bien différents.
Et concrètement c'est quoi le problème que tu as ? tu parles du mot de passe mais qu'à tu à l'écran ? que fais tu ? et que se passe-t-il ?


Merci pour ton aide ( j'ai ajouter ton code au début )

Le problème parait simple a expliquer mais en gros la page n'arrive pas a trouver le mot de passe il me demande un login pour pouvoir upload une image je rentre le mot de passe coucou comme indiqué plus haut mais j'ai toujours la réponse mot de passe incorrect ... je comprend pas pk


Image

Image

Re: upload des fichier simplement ( Fin normalement ... ^^ )

Posté : 07 juin 2019, 13:00
par Saian
Étrange car quand je teste ton code, le mot passe est ok chez moi. J'ai bien un call XHR qui se fait sur lescript.php?action=verif&password=coucou&token=07e5aebf9a47e33bdffa745ab69a17fe et la réponse suivante {"error":false, "message":"OK"}.

EDIT : à la limite modifie le retour json de l'erreur du mauvais mot de passe.
die('{"error":true, "message":"pass"}');
die('{"error":true, "message":"pass", "extra": "get password = '.$_GET['password'].', pass = '.$pass.'"}');
Comme ça tu pourras voir la valeur reçue et la valeur attendue en regardant dans les outils de développement du navigateur.
Il faudra bien entendu remettre le retour original une fois que tu auras débugué.
Ou alors dans le javascript modifie aussi cette ligne :
alert("<?php echo $langue['WRONG_PASS']; ?>");
alert("<?php echo $langue['WRONG_PASS']; ?> | " + response.extra);
Ainsi ça s'affichera directement dans la fenêtre avec le message d'erreur.

EDIT 2 : en fait j'avais quand même corrigé le session_start donc à moins que tu l'ais corrigé, je pense que le problème vient tout simplement de la. J'ai testé de laisser le session_start en erreur et j'obtiens un retour {"error":true, "message":"token"} (forcément puisque le stockage du token passe par la session) mais le message d'erreur est celui du mauvais mot de passe au lieu d'être un message de mauvais token. pourquoi avoir mis cette chaîne 'UpData'...?
session_start();

Re: upload des fichier simplement ( Fin normalement ... ^^ )

Posté : 07 juin 2019, 18:12
par Belta
Étrange car quand je teste ton code, le mot passe est ok chez moi. J'ai bien un call XHR qui se fait sur lescript.php?action=verif&password=coucou&token=07e5aebf9a47e33bdffa745ab69a17fe et la réponse suivante {"error":false, "message":"OK"}.

EDIT : à la limite modifie le retour json de l'erreur du mauvais mot de passe.
die('{"error":true, "message":"pass"}');
die('{"error":true, "message":"pass", "extra": "get password = '.$_GET['password'].', pass = '.$pass.'"}');
Comme ça tu pourras voir la valeur reçue et la valeur attendue en regardant dans les outils de développement du navigateur.
Il faudra bien entendu remettre le retour original une fois que tu auras débugué.
Ou alors dans le javascript modifie aussi cette ligne :
alert("<?php echo $langue['WRONG_PASS']; ?>");
alert("<?php echo $langue['WRONG_PASS']; ?> | " + response.extra);
Ainsi ça s'affichera directement dans la fenêtre avec le message d'erreur.

EDIT 2 : en fait j'avais quand même corrigé le session_start donc à moins que tu l'ais corrigé, je pense que le problème vient tout simplement de la. J'ai testé de laisser le session_start en erreur et j'obtiens un retour {"error":true, "message":"token"} (forcément puisque le stockage du token passe par la session) mais le message d'erreur est celui du mauvais mot de passe au lieu d'être un message de mauvais token. pourquoi avoir mis cette chaîne 'UpData'...?
session_start();

Merci pour tes conseils je vais regarder a ca .

Si jamais tu veux la source complète que j'ai pris la voila : https://uptobox.com/svus09xe3fnq

ca sera plus simple pour toi aussi ^^

Re: upload des fichier simplement ( Fin normalement ... ^^ )

Posté : 07 juin 2019, 18:18
par Saian
Je suis à peu près sûr qu'avec ton script du premier message, juste en mettant session_start() sans la chaîne en paramètre, ça va passer. ^^

Re: upload des fichier simplement ( Fin normalement ... ^^ )

Posté : 07 juin 2019, 19:47
par Belta
Je suis à peu près sûr qu'avec ton script du premier message, juste en mettant session_start() sans la chaîne en paramètre, ça va passer. ^^
Effectivement ca marche :) FIN NORMALEMENT ..... ^^

j’obtiens cette fois comme message d'erreur : <?php echo $langue['OP_FAILURE']; ?>

et les fichier upload exemple je vais upload '' test.png '' ils vont se retrouver dans le serveur '' .png '' le nom disparaît

Re: upload des fichier simplement ( Fin normalement ... ^^ )

Posté : 07 juin 2019, 19:59
par Saian
Ouep tes lignes comme ça ne sont pas bonnes et y en a plusieurs :
die('{"error":true, "message":"<?php echo $langue[\'OP_FAILURE\']; ?>"}');// pas bon
die('{"error":true, "message":"'.$langue['OP_FAILURE'].'"}');// bon

Pour le nom de fichier qui disparaît, tu as un problème avec la fonction cleanAccent me semble que c'est le bordel.

Tu dois aussi encore avoir des erreurs dans le script, mais comme le display_errors semble être à Off tu ne les vois pas.
Normalement avec ces deux lignes en début de script tu devrais les voir sauf si le serveur interdit le ini_set :
ini_set('display_errors', 'On');
error_reporting(E_ALL);

Et vu que l'upload se fait via XHR, pour débuguer les retours du serveur il faut absolument que tu utilises les outils de développement de ton navigateur.

Bon courage pour la suite. :P

Re: upload des fichier simplement ( Fin normalement ... ^^ )

Posté : 07 juin 2019, 20:12
par Belta
Ouep tes lignes comme ça ne sont pas bonnes et y en a plusieurs :
die('{"error":true, "message":"<?php echo $langue[\'OP_FAILURE\']; ?>"}');// pas bon
die('{"error":true, "message":"'.$langue['OP_FAILURE'].'"}');// bon

Pour le nom de fichier qui disparaît, tu as un problème avec la fonction cleanAccent me semble que c'est le bordel.

Tu dois aussi encore avoir des erreurs dans le script, mais comme le display_errors semble être à Off tu ne les vois pas.
Normalement avec ces deux lignes en début de script tu devrais les voir sauf si le serveur interdit le ini_set :
ini_set('display_errors', 'On');
error_reporting(E_ALL);

Et vu que l'upload se fait via XHR, pour débuguer les retours du serveur il faut absolument que tu utilises les outils de développement de ton navigateur.

Bon courage pour la suite. :P
Merci beaucoup pour ton aide en tout cas !

tu as une idée avec le " cleanAccent " ?