Implémentation sécurisée de transferts massifs en ASP.NET avec reprise sur interruption

Défis techniques des transferts volumineux

La gestion de fichiers de grande taille (jusqu'à 20 Go) nécessite une approche spécialisée pour garantir stabilité et sécurité :

Compatibilité multi-navigateurs

// Détection des capacités navigateur
public bool SupportsModernUpload(HttpRequest request)
{
    return request.Browser.IsBrowser("Chrome") || 
           request.Browser.IsBrowser("Firefox") || 
           request.Browser.MajorVersion > 8;
}

Conservation des hiérarchies de dossiers

// Reconstruction des structures de répertoires
public void SauvegarderFichier(HttpPostedFile fichier, string cheminRelatif)
{
    string cheminComplet = Path.Combine(Config.DossierStockage, cheminRelatif);
    Directory.CreateDirectory(Path.GetDirectoryName(cheminComplet));
    fichier.SaveAs(cheminComplet);
}

Mécanisme de reprise sur enterruption

  1. Découpage du fichier en segments de 10 Mo
  2. Génération d'empreinte numérique unique
  3. Suivi des segments transférés
// Vérification de la progression
public JsonResult GetProgressionTransfert(string empreinte)
{
    var segmentsTransferes = _service.GetSegmentsComplets(empreinte);
    return Json(segmentsTransferes, JsonRequestBehavior.AllowGet);
}

Chiffrement de bout en bout

// Implémentation du chiffrement SM4
public byte[] ChiffrerSM4(byte[] donnees, byte[] cle)
{
    using (var cipher = new SM4Engine())
    {
        cipher.Init(true, new KeyParameter(cle));
        byte[] sortie = new byte[donnees.Length];
        cipher.ProcessBlock(donnees, 0, sortie, 0);
        return sortie;
    }
}

Optimisasions serveur

  • Configuration IIS pour requêtes étendues
  • Augmentation de executionTimeout dans web.config
  • Activation du cache de sortie pour fragments

Configuration web.config critique

<system.web>
  <httpRuntime maxRequestLength="2147483647" />
</system.web>
<system.webServer>
  <security>
    <requestFiltering>
      <requestLimits maxAllowedContentLength="4294967295" />
    </requestFiltering>
  </security>
</system.webServer>

Flux de récupération après interruption

// Reprise du transfert
public ActionResult ReprendreTransfert(string empreinte)
{
    EtatTransfert etat = _service.ObtenirEtatTransfert(empreinte);
    if (etat == null) return HttpNotFound();
    
    ViewBag.SegmentsTransferes = etat.SegmentsComplets;
    ViewBag.TailleSegment = etat.TailleSegment;
    return View("Reprise");
}

Considérations de sécurité avancées

  • Validation des empreintes côté serveur
  • Chiffrement TLS obligatoire
  • Contrôle d'accès basé sur les rôles
  • Audit des opérations de transfert

Étiquettes: ASP.NET Transfert-Fichiers Securite-Donnees Chiffrement SM4

Publié le 12 juillet à 21h07