SubscribeMainTagsEditHistoryDiscussion

Hoy estaba mostrando un programa que valida archivos separados por comas, y sólo estaba considerando procesar el mime type text/csv. El demo falló, y al depurar, noté que el cliente estaba enviando 'text/x-comma-separated-values'.

Se espera que sólo se escriban correos con adjuntos en CSV, pero es posible que se cuele accidentalmente un adjunto diferente, como una VCard, y por esto hay que validar (no consideremos todavía un posible comportamiento malicioso).

Estoy validando así:

   import imaplib, smtplib, email
   
   ...

   self.csv_mime_types = ['text/x-comma-separated-values', 'application/csv', 'application/excel'\
                   , 'text/comma separated values', 'application/vnd.ms-excel', 'text/csv']
   self.csv_mime_types_guess = ['csv', 'comma', 'excel']

...


   for msg_part in self.msg.walk():

      es_adjunto_csv = False

      mime = msg_part['Content-Type'].split(';')[0].lower()

     if mime in self.prm.csv_mime_types:
        es_adjunto_csv = True
     else:
       for str in self.prm.csv_mime_types_guess:
         if mime.find(str) != -1:
           es_adjunto_csv = True
           log.verbose('We guessed the content/type! We guessed that "' + mime + '" is text/csv', FULogger.VERBOSE_INFO)
           break

Un validador luego verifica que el archivo en efecto sea un CSV. No me gusta mucho esta solución, pero creo que es lo más apropiado (no se me ocurre otra cosa).

Loading... Vote up! Vote down! Discussion

Last update: 2007-04-27 (Rev 11181)

svnwiki $Rev: 14721 $