【问题标题】:Is there a way to tell browsers to disable the "run" button when downloading an EXE?有没有办法告诉浏览器在下载 EXE 时禁用“运行”按钮?
【发布时间】:2011-04-07 10:26:37
【问题描述】:

对于某些无限带宽类型来说,让您的用户不断下载您的产品并不断忘记他们将产品放在哪里并重新下载可能会很方便。但是,对稀缺性的认识是智慧的开始,正如保释担保人对验尸官说的那样,他把一周的渔获装在一个两米长的麻袋里,我想为我们省去麻烦。

这是我在 PHP 中所做的事情

header("MIME-Version: 1.0");
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: post-check=0, pre-check=0");
header("Content-type: application/octet-stream");
header('Content-Length: ' . $filesize);
header('Content-Disposition: attachment; filename="' . basename($filename).'"');
header("Content-Transfer-Encoding: binary");
readfile($filename);

我是否可以添加另一行,它会神奇地混淆所有浏览器,让他们认为任何操作系统都不可能对这块字节做任何事情,除非将它放在某个安全的位置,让其主人在他或她的闲暇?

【问题讨论】:

    标签: php download mime-types content-disposition


    【解决方案1】:

    据我所知,不,没有。文件下载由浏览器处理,并提供它认为合适的选项。您也许可以使用 Java 或 Flash 中的自定义应用程序执行此操作,但我不是 100% 的,因为浏览器在提示下载时仍然可能胜过该应用程序。

    或者,您可以让用户通过匿名 FTP 帐户下载文件,但这需要用户了解如何使用 FTP 客户端,并且需要在他们的计算机上安装 FTP 客户端才能不显示弹出对话框。

    【讨论】:

    • 这就是我的想法,虽然 Flash 方法可能是一种新颖的解决方案。
    【解决方案2】:

    如果他们有用户帐户,一种解决方案是简单地限制每个帐户允许他们进行的下载次数。另一种选择可能是将 .exe 粘贴在 zip 文件中,这样它就不能简单地“运行”......尽管浏览器可能会尝试在临时文件中显示内容。如果您还没有安装程序,您也可以使用安装程序,并将应用程序配置为不能从浏览器“运行”,但必须正确安装。这样,图标/开始菜单条目就位以供下次使用。

    【讨论】:

      【解决方案3】:

      如果您指定文件的 mimetype,浏览器将显示它应该显示的内容。例如pdf会提示在pdf查看器中打开或保存,图片会用图片应用打开或另存为等。

      看看这个:

      $info = pathinfo($fileName); 
      header('Content-Description: File Transfer');
      header('Content-Type: '.Mimetypes::get($info['extension']));
      header('Content-Disposition: attachment; filename=' . basename($fileName));
      header('Content-Transfer-Encoding: binary');
      header('Expires: 0');
      header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
      header('Pragma: public');
      header('Content-Length: ' . filesize($fileName));
      
      class Mimetypes{
      /**
      *   static isAllowed returns true for allowed extensions and false otherwise.
      *   method is static thus allowing is to be called without construction/
      *   instantiation of the object.  
      *
      *   @param string ext the file extension 
      *   @return boolean true for allowed extension, false otherwise 
      *
      */
      public static function isAllowed($ext){
          $allowedFiletypes = array('jpg','gif','bmp','png', 'xls', 'doc', 'docx', 'txt', 'pdf'); // These will be the types of file that will pass the validation.
          if(in_array($ext, $allowedFiletypes)){
              return true;    
          }else{
              return false;
          }
      }//end isAllowed($ext) 
      
      /**
      *   method get accepts an extension string as argument
      *   and returns the mimetype for this given argument 
      *   if an entry exists in the map of extensions to
      *   mimetypes.  
      *   if the extension is not defined function will return
      *   empty string. 
      *
      *
      */
      public static function get($ext){
          $map = array(
              '323'=>'text/h323',
              'acx'=>'application/internet-property-stream',
              'ai application/postscript',
              'aif'=>'audio/x-aiff',
              'aifc'=>'audio/x-aiff',
              'aiff'=>'audio/x-aiff',
              'asf'=>'video/x-ms-asf',
              'asr'=>'video/x-ms-asf',
              'asx'=>'video/x-ms-asf',
              'au'=>'audio/basic',
              'avi'=>'video/x-msvideo',
              'axs'=>'application/olescript',
              'bas'=>'text/plain',
              'bcpio'=>'application/x-bcpio',
              'bin'=>'application/octet-stream',
              'bmp'=>'image/bmp',
              'c'=>'text/plain',
              'cat'=>'application/vnd.ms-pkiseccat',
              'cdf'=>'application/x-cdf',
              'cer'=>'application/x-x509-ca-cert',
              'class'=>'application/octet-stream',
              'clp'=>'application/x-msclip',
              'cmx'=>'image/x-cmx',
              'cod'=>'image/cis-cod',
              'cpio'=>'application/x-cpio',
              'crd'=>'application/x-mscardfile',
              'crl'=>'application/pkix-crl',
              'crt'=>'application/x-x509-ca-cert',
              'csh'=>'application/x-csh',
              'css'=>'text/css',
              'dcr'=>'application/x-director',
              'der'=>'application/x-x509-ca-cert',
              'dir'=>'application/x-director',
              'dll'=>'application/x-msdownload',
              'dms'=>'application/octet-stream',
              'doc'=>'application/msword',
              'dot'=>'application/msword',
              'dvi'=>'application/x-dvi',
              'dxr'=>'application/x-director',
              'eps'=>'application/postscript',
              'etx'=>'text/x-setext',
              'evy'=>'application/envoy',
              'exe'=>'application/octet-stream',
              'fif'=>'application/fractals',
              'flr'=>'x-world/x-vrml',
              'gif'=>'image/gif',
              'gtar'=>'application/x-gtar',
              'gz'=>'application/x-gzip',
              'h'=>'text/plain',
              'hdf'=>'application/x-hdf',
              'hlp'=>'application/winhlp',
              'hqx'=>'application/mac-binhex40',
              'hta'=>'application/hta',
              'htc'=>'text/x-component',
              'htm'=>'text/html',
              'html'=>'text/html',
              'htt'=>'text/webviewhtml',
              'ico'=>'image/x-icon',
              'ief'=>'image/ief',
              'iii'=>'application/x-iphone',
              'ins'=>'application/x-internet-signup',
              'isp'=>'application/x-internet-signup',
              'jfif'=>'image/pipeg',
              'jpe'=>'image/jpeg',
              'jpeg'=>'image/jpeg',
              'jpg'=>'image/jpeg',
              'js'=>'application/x-javascript',
              'latex'=>'application/x-latex',
              'lha'=>'application/octet-stream',
              'lsf'=>'/x-la-asf',
              'lsx'=>'video/x-la-asf',
              'lzh'=>'application/octet-stream',
              'm13'=>'application/x-msmediaview',
              'm14'=>'application/x-msmediaview',
              'm3u'=>'audio/x-mpegurl',
              'man'=>'application/x-troff-man',
              'mdb'=>'application/x-msaccess',
              'me'=>'application/x-troff-me',
              'mht'=>'message/rfc822',
              'mhtml'=>'message/rfc822',
              'mid'=>'audio/mid',
              'mny'=>'application/x-msmoney',
              'mov'=>'video/quicktime',
              'movie'=>'video/x-sgi-movie',
              'mp2'=>'video/mpeg',
              'mp3'=>'audio/mpeg',
              'mpa'=>'video/mpeg',
              'mpe'=>'video/mpeg',
              'mpeg'=>'video/mpeg',
              'mpg'=>'video/mpeg',
              'mpp'=>'application/vnd.ms-project',
              'mpv2'=>'video/mpeg',
              'ms'=>'application/x-troff-ms',
              'mvb'=>'application/x-msmediaview',
              'nws'=>'message/rfc822',
              'oda'=>'application/oda',
              'p10'=>'application/pkcs10',
              'p12'=>'application/x-pkcs12',
              'p7b'=>'application/x-pkcs7-certificates',
              'p7c'=>'application/x-pkcs7-mime',
              'p7m'=>'application/x-pkcs7-mime',
              'p7r'=>'application/x-pkcs7-certreqresp',
              'p7s'=>'application/x-pkcs7-signature',
              'pbm'=>'image/x-portable-bitmap',
              'pdf'=>'application/pdf',
              'pfx'=>'application/x-pkcs12',
              'pgm'=>'image/x-portable-graymap',
              'pko'=>'application/ynd.ms-pkipko',
              'pma'=>'application/x-perfmon',
              'pmc'=>'application/x-perfmon',
              'pml'=>'application/x-perfmon',
              'pmr'=>'application/x-perfmon',
              'pmw'=>'application/x-perfmon',
              'png'=>'image/png',
              'pnm'=>'image/x-portable-anymap',
              'pot'=>'application/vnd.ms-powerpoint',
              'ppm'=>'image/x-portable-pixmap',
              'pps'=>'application/vnd.ms-powerpoint',
              'ppt'=>'application/vnd.ms-powerpoint',
              'prf'=>'application/pics-rules',
              'ps'=>'application/postscript',
              'pub'=>'application/x-mspublisher',
              'qt'=>'video/quicktime',
              'ra'=>'audio/x-pn-realaudio',
              'ram'=>'audio/x-pn-realaudio',
              'ras'=>'image/x-cmu-raster',
              'rgb'=>'image/x-rgb',
              'rmi'=>'audio/mid',
              'roff'=>'application/x-troff',
              'rtf'=>'application/rtf',
              'rtx'=>'text/richtext',
              'scd'=>'application/x-msschedule',
              'sct'=>'text/scriptlet',
              'setpay'=>'application/set-payment-initiation',
              'setreg'=>'application/set-registration-initiation',
              'sh'=>'application/x-sh',
              'shar'=>'application/x-shar',
              'sit'=>'application/x-stuffit',
              'snd'=>'audio/basic',
              'spc'=>'application/x-pkcs7-certificates',
              'spl'=>'application/futuresplash',
              'src'=>'application/x-wais-source',
              'sst'=>'application/vnd.ms-pkicertstore',
              'stl'=>'application/vnd.ms-pkistl',
              'stm'=>'text/html',
              'svg'=>'image/svg+xml',
              'sv4cpio'=>'application/x-sv4cpio',
              'sv4crc'=>'application/x-sv4crc',
              'swf'=>'application/x-shockwave-flash',
              't'=>'application/x-troff',
              'tar'=>'application/x-tar',
              'tcl'=>'application/x-tcl',
              'tex'=>'application/x-tex',
              'texi'=>'application/x-texinfo',
              'texinfo'=>'application/x-texinfo',
              'tgz'=>'application/x-compressed',
              'tif'=>'image/tiff',
              'tiff'=>'image/tiff',
              'tr'=>'application/x-troff',
              'trm'=>'application/x-msterminal',
              'tsv'=>'text/tab-separated-values',
              'txt'=>'text/plain',
              'uls'=>'text/iuls',
              'ustar'=>'application/x-ustar',
              'vcf'=>'text/x-vcard',
              'vrml'=>'x-world/x-vrml',
              'wav'=>'audio/x-wav',
              'wcm'=>'application/vnd.ms-works',
              'wdb'=>'application/vnd.ms-works',
              'wks'=>'application/vnd.ms-works',
              'wmf'=>'application/x-msmetafile',
              'wps'=>'application/vnd.ms-works',
              'wri'=>'application/x-mswrite',
              'wrl'=>'x-world/x-vrml',
              'wrz'=>'x-world/x-vrml',
              'xaf'=>'x-world/x-vrml',
              'xbm'=>'image/x-xbitmap',
              'xla'=>'application/vnd.ms-excel',
              'xlc'=>'application/vnd.ms-excel',
              'xlm'=>'application/vnd.ms-excel',
              'xls'=>'application/vnd.ms-excel',
              'xlt'=>'application/vnd.ms-excel',
              'xlw'=>'application/vnd.ms-excel',
              'xof'=>'x-world/x-vrml',
              'xpm'=>'image/x-xpixmap',
              'xwd'=>'image/x-xwindowdump',
              'z'=>'application/x-compress',
              'zip'=>'application/zip'
          ); 
      
          if(array_key_exists($ext, $map)){
              return $map[$ext]; 
          }else{
              return "";
          }//end if(array_key_exists($ext, $map)) | else
      }//end get($ext) 
      }//end class Mimetypes 
      

      【讨论】:

        猜你喜欢
        • 2012-08-15
        • 2023-03-21
        • 1970-01-01
        • 1970-01-01
        • 2020-06-17
        • 2012-05-14
        • 2011-10-27
        • 2010-11-28
        • 2012-09-18
        相关资源
        最近更新 更多