logo

NPDS : Gestion de contenu et de communauté


Content & Community Management System (CCMS) robuste, sécurisé, complet, performant, parlant vraiment français, libre (Open-Source) et gratuit.
24 visiteur(s) et 0 membre(s) en ligne.
Activité du Site

Pages vues depuis 25/05/2001 : 104 890 428

  • Nb. de membres 8 691
  • Nb. d'articles 1 694
  • Nb. de forums 25
  • Nb. de sujets 8
  • Nb. de critiques 92

Top 10  Statistiques

Index du forum »»  Sécurité »» implémentation de plumpload dans NPDS

Nouveau sujet
 implémentation de plumpload dans NPDS#26205Répondre

4Contributeur(s)
AnonymeJireckvitruvejpb
3 Modérateur(s)
developpeurjpbJireck
Anonyme Anonymeicon_post
Que faire svp pour sécurisé le fichier upload.php

<?php
/**
* upload.php
*
* Copyright 2013, Moxiecode Systems AB
* Released under GPL License.
*
* License: http://www.plupload.com/license
* Contributing: http://www.plupload.com/contributing
*/

#!! IMPORTANT:
#!! this file is just an example, it doesn't incorporate any security checks and
#!! is not recommended to be used in production environment as it is. Be sure to
#!! revise it and customize to your needs.

// Make sure file is not cached (as it happens for example on iOS devices)
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");

/*
// Support CORS
header("Access-Control-Allow-Origin: *");
// other CORS headers if any...
if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {
exit; // finish preflight CORS requests here
}
*/


// 5 minutes execution time
@set_time_limit(5 * 60);

// Uncomment this one to fake upload time
// usleep(5000);

// Settings
$targetDir = ini_get("upload_tmp_dir") . DIRECTORY_SEPARATOR . "plupload";
$targetDir = 'import';
$cleanupTargetDir = true; // Remove old files
$maxFileAge = 5 * 3600; // Temp file age in seconds

// Create target dir
if (!file_exists($targetDir)) {
@mkdir($targetDir);
}

// Get a file name
if (isset($_REQUEST["name"])) {
$fileName = $_REQUEST["name"];
} elseif (!empty($_FILES)) {
$fileName = $_FILES["file"]["name"];
} else {
$fileName = uniqid("file_");
}

$filePath = $targetDir . DIRECTORY_SEPARATOR . $fileName;

// Chunking might be enabled
$chunk = isset($_REQUEST["chunk"]) ? intval($_REQUEST["chunk"]) : 0;
$chunks = isset($_REQUEST["chunks"]) ? intval($_REQUEST["chunks"]) : 0;


// Remove old temp files
if ($cleanupTargetDir) {
if (!is_dir($targetDir) || !$dir = opendir($targetDir)) {
die('{"jsonrpc" : "2.0", "error" : {"code": 100, "message": "Failed to open temp directory."}, "id" : "id"}');
}

while (($file = readdir($dir)) !== false) {
$tmpfilePath = $targetDir . DIRECTORY_SEPARATOR . $file;

// If temp file is current file proceed to the next
if ($tmpfilePath == "{$filePath}.part") {
continue;
}

// Remove temp file if it is older than the max age and is not the current file
if (preg_match('/\.part$/', $file) && (filemtime($tmpfilePath) < time() - $maxFileAge)) {
@unlink($tmpfilePath);
}
}
closedir($dir);
}


// Open temp file
if (!$out = @fopen("{$filePath}.part", $chunks ? "ab" : "wb")) {
die('{"jsonrpc" : "2.0", "error" : {"code": 102, "message": "Failed to open output stream."}, "id" : "id"}');
}

if (!empty($_FILES)) {
if ($_FILES["file"]["error"] || !is_uploaded_file($_FILES["file"]["tmp_name"])) {
die('{"jsonrpc" : "2.0", "error" : {"code": 103, "message": "Failed to move uploaded file."}, "id" : "id"}');
}

// Read binary input stream and append it to temp file
if (!$in = @fopen($_FILES["file"]["tmp_name"], "rb")) {
die('{"jsonrpc" : "2.0", "error" : {"code": 101, "message": "Failed to open input stream."}, "id" : "id"}');
}
} else {
if (!$in = @fopen("php://input", "rb")) {
die('{"jsonrpc" : "2.0", "error" : {"code": 101, "message": "Failed to open input stream."}, "id" : "id"}');
}
}

while ($buff = fread($in, 4096)) {
fwrite($out, $buff);
}

@fclose($out);
@fclose($in);

// Check if file has been uploaded
if (!$chunks || $chunk == $chunks - 1) {
// Strip the temp .part suffix off
rename("{$filePath}.part", $filePath);
}

// Return Success JSON-RPC response
die('{"jsonrpc" : "2.0", "result" : null, "id" : "id"}');

?>
Jireck Jireckicon_post
Je ne comprends pas la question. enfin si mais quel est le rapport avec npds
Anonyme Anonymeicon_post
Implémentation dans un module de NPDS, ce qui revient à la même problématique
Jireck Jireckicon_post
Cher Anonyme,

je te conseil alors de télécharger le module squelette "Exemple" et les documentations
http://modules.npds.org/download.php?dcategory=Documentations&sortby=

de les lire, d’implémenter ton module et quand tu en sera à la sécurité du module de reposter tes questions ici ...

Cordialement
Anonyme Anonymeicon_post
Pas attendu ce conseil !
Si un éclairage compétent pouvait être communiqué sur ce qui est demandé ce serait sympa.
Cordialement
Jireck Jireckicon_post
Avec les éléments que tu nous donnes, c'est le seul eclairage " compétent qu'on peut te donner.

Repose ta question autrement, met des sources et tu verra quelqu'un de "sympa" te repondra.

Pour l'instant, tu as le même niveau de réponse que le niveau de la question
Anonyme Anonymeicon_post
:paf :paf :paf
jpb jpbicon_post
POur répondre à la question il faut IMPERATIVEMENT mettre des filtres dans l'exemple qui est fourni !!! sinon c'est la porte ouverte ... Il existe quelques documentation sur le sujet sur le web ...
Avec un système de filtre efficace et cela peut être bien utile dans un module effectivement. Pour info la librairie YUi de NPDS te permet aussi de réaliser ce genre de chose ...
Anonyme Anonymeicon_post
Merci jpb pour tes conseils, je regarde du coté de yui