Caricamento di File: Come escludere un tipo MIME utilizzando afferma?

In Symfony posso accettare MIME tipi di utilizzo:

/**
  * @Assert\File( maxSize="10M", mimeTypes={"application/pdf", "image/png"} )
  */
public $file;

Ma come faccio a escludere qualcosa da quella lista? Diciamo, voglio per consentire a tutti i caricamenti, tranne per i file PHP?

  • Ho paura che avete bisogno per creare il proprio vincolo…
  • Hm, che è quello che ho pensato. Molte grazie per il chiarimento.
  • Si dovrebbe sempre whitelist, piuttosto che blacklist, è sufficiente elencare i mimeTypes che si consente, piuttosto che non consentono
  • si sono del tutto corretti. ma a volte è necessario caricare qualsiasi tipo di file, tranne il più pericoloso. Per esempio, se si sta creando un file-manager per amministratore
  • Vorrei ancora sostengono che si dovrebbe whitelist, potrebbe richiedere più tempo per compilare una whitelist di una blacklist, ma vi ritroverete con una più sicura del prodotto
  • come si crea ftp online-manager? o qualcosa di simile CPanel file manager ha. Quando admin desidera caricare sul proprio file di estensione sconosciuta. C’è solo white list su Google Drive?
  • Sono sicuro che si può trovare un elenco di “sicuro” tipi di file online da qualche parte, ma di utilizzare a proprio attenzione. Vorrei utilizzare una funzione di callback validatore come lifo suggerito e convalidare il tipo mime contro una whitelist.



2 Replies
  1. 6

    Si potrebbe implementare un Richiamata vincolo tramite un’asserzione. Un vantaggio di questo metodo è che si può applicare il messaggio di errore di qualsiasi campo (o i campi) nel modulo.

    use Symfony\Component\Validator\ExecutionContext;
    
    /**
     * @ORM\Entity()
     * @Assert\Callback(methods={"validateFile"})
     */
    class MyEntity
    {
    
        public function validateFile(ExecutionContext $context)
        {
            $path = $context->getPropertyPath();
            if (/* $this->file is not in allowed mimeTypes ... */) {
                $context->setPropertyPath($path . '.file');
                $context->addViolation("Invalid file mimetype", array(), null);
            }
        }
    }
  2. 5

    Non c’è bisogno di creare qualsiasi richiamata per fare questo. Basta assicurarsi che:

    1) Impostare enable_annotations parametro come true in vostro app/config/config.yml:

    # app/config/config.yml
    framework:
        validation:      { enable_annotations: true }

    2) Includere correttamente i vincoli di validazione sull’entità file.

    //YourEntity.php
    use Symfony\Component\Validator\Constraints as Assert;

    3) Usare l’annotazione correttamente. Esempio:

    //YourEntity.php
    /**
     * @Assert\File(
     *      maxSize="5242880",
     *      mimeTypes = {
     *          "image/png",
     *          "image/jpeg",
     *          "image/jpg",
     *          "image/gif",
     *          "application/pdf",
     *          "application/x-pdf"
     *      }
     * )
     */
     private $arquivo;

    Il codice sopra funziona bene sul mio Symfony 2.3.9.

    []s

    • Penso che hai frainteso la domanda. OP deve Accettare di qualsiasi mimeTypes MA alcuni.
    • Hai ragione! Scusate, ero in un’altra domanda e la risposta è sbagliata. Il mio male! =)
    • Questa non è la risposta alla domanda.

Lascia un commento