On Tue, Sep 16, 2014 at 01:41:36PM -0500, Noel Jones wrote:

> I've used the below for a few years with good results.  It's better,
> but surely not perfect.
> 
> 
> # block windows executables PCRE
> /^\s*Content-(Disposition|Type).*name\s*=\s*"?(.*(\.|=2E)(
>  ade|adp|bas|bat|chm|cmd|com|cpl|crt|dll|exe|hlp|hta|
>  inf|ins|isp|js|jse|lnk|mdb|mde|mdt|mdw|msc|msi|msp|mst|nws|
>  ops|pcd|pif|prf|reg|scf|scr|sct|shb|shs|shm|swf|
>  vb|vbe|vbs|vbx|vxd|wsc|wsf|wsh))(\?=)?"?\s*$/x

This assumes that "name" or "filename" is the last attribute in
the header.  It might instead be followed by a ";" and more
attributes.  So for a bit more generality, try the below:

    # block windows executables PCRE
    /^\s*Content-(?:Disposition|Type):  # Header label
      (?:.*?;)? \s*                     # Any prior attributes
      (?:file)?name\s*=\s*"?            # name or filename
       (                                # Capture name for response
         .*?(\.|=2E)                    # File basename and "."
         (ade|adp|bas|bat|chm|cmd|com|cpl|crt|dll|exe|hlp|hta|
          inf|ins|isp|js|jse|lnk|mdb|mde|mdt|mdw|msc|msi|msp|mst|nws|
          ops|pcd|pif|prf|reg|scf|scr|sct|shb|shs|shm|swf|
          vb|vbe|vbs|vbx|vxd|wsc|wsf|wsh)       # Capture risky extensions
       )                                # Close capture
       (?:\?=)?                         # Trailer of ad-hoc RFC 2047 encoding
       "?                               # Optional close quote
       \s*(;|$)                         # End of attribute or header
     /x

[ untested ]

-- 
        Viktor.

Reply via email to