• 设为首页
  • 点击收藏
  • 手机APP
    手机扫一扫下载
    华域联盟APP
  • 关注官方公众号
    微信扫一扫关注
    华域联盟公众号
hot天融信关于ThinkPHP5.1框架分离RCE漏洞的深

[/backcolor] 0x00 前言在前几个月,Thinkphp连续迸发了多个严重漏洞。由于框架应用的普遍性,漏洞影响十分 详情

PHP完成文件下载

[复制链接]
sterben 发表于 2016-10-12 22:43:07 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
你一定会笑我“下载文件”如此简单都值得说?当然并不是想你想象的那么简单。例如你希望客户要填完一份表格,才能够下载某一文件,你第一个想法一定是用 “Redirect”的办法,先检查表格能否曾经填写终了和完好,然后就将网址指到该文件,这样客户才干下载,例如笔者编写的以下代码: ' W! R+ k- @: c& @
9 P, h' E1 ^& {
<? * D% n( ?8 L  g, n7 B0 c
// 检查 FORM 能否全部填写终了...   x, W8 a. `! B- u
if ($form_completed) { ( ]6 q% ], h) G1 `1 p
Header("Location: http://www.myweb.com/download/info_check.exe"); 8 v5 o: W# Q) `% f. r3 x
exit; ) L5 t8 k7 C7 b
} , f% n# h5 v' X- y7 ]. ^1 O
?> 6 ?2 |2 ?( o# @2 b$ q/ S3 t
" A/ x/ ~* @+ p1 p! ]& s( b2 ~! e0 x
或者是以下的状况: ! n$ F& T4 q1 f% A; d
) o% y% x# R9 w1 g
“ <a href="http://www.yourwebl.com/users/download.php?id=124524">开端下载文件</a> ” , y% S( r! ^' |. L

6 E0 H+ ]1 o, v) p4 ~! y这里应用了ID方式接纳要下载文件的编号,然后用“Redirect”的方式衔接到实践的网址。
9 ~+ z! f4 p) V
! u+ G" K! O  P9 v) t( g# `假如你想做一个关于“网上购物”的电子商务网站,思索安全问题,你不想用户直接复制网址下载该文件,笔者倡议你运用PHP直接读取该实践文件然后下载的办法去做。程序如下:
" C. `' C) ^) g) F& K: O/ y& \6 L5 A% I' A0 U6 m% c" m
<?
6 L- t4 d1 `* x" c7 e' g* V$file_name = "info_check.exe";
& o: W3 M& a: `  w- d- W$file_dir = "/public/www/download/";
2 z( L3 n1 B; ]. x9 n$ _2 o+ Yif (!file_exists($file_dir . $file_name)) { //检查文件能否存在
% Q' |/ e; I: r- V7 J* @echo "文件找不到";
" b% B/ F3 j3 ?! @0 k5 bexit; 7 Q# ?  V" {! x: K- R$ b7 l- Z4 i; A
} else {
/ K0 W  L  L5 H, p" @# `/ ~$file = fopen($file_dir . $file_name,"r"); // 翻开文件 3 W  W# ~. q) B# V* g: ^% v4 U9 [
// 输入文件标签 & {2 M  L+ ~" p/ X# a4 J
Header("Content-type: application/octet-stream");
* O4 m' X" X( b. y0 IHeader("Accept-Ranges: bytes");
; p" `+ V1 h4 l4 N) u. eHeader("Accept-Length: ".filesize($file_dir . $file_name)); 0 _: p$ F: w2 X( t: \: O, r
Header("Content-Disposition: attachment; filename=" . $file_name); ( N( G# @( i. Y* ]) u* X' U0 \
// 输出文件内容
' m: H0 d) R8 Q1 V  eecho fread($file,filesize($file_dir . $file_name)); # q8 b' K: a# a) R! x- D
fclose($file);
1 G' I4 S1 c! `; ]* y' yexit;} , T2 C" |' i8 O. W7 [( }
?>
9 B# M$ ?2 H8 B* g  B: x
+ g( a% b* K* d而假如文件途径是“http”或者“ftp” 网址的话,则源代码会有少许改动,程序如下:
! q- N5 @, u! ]' h3 ^! O! k* M2 K- A5 H, C' m( T; t  v' ^0 v! Y
<? $ m! W4 {, W/ }! h+ |
$file_name = "info_check.exe"; " G9 t/ k. f, s' z
$file_dir = "http://www.easycn.net/"; ) L) l9 b5 |$ {% ]
$file = @ fopen($file_dir . $file_name,"r");
" T4 o; P- r6 O+ A: h! L2 ]8 R% Iif (!$file) { ; }# {+ n6 T" j' p
echo "文件找不到";
7 o0 T$ h5 g% K# O} else {
& s( _' A4 f6 _' P/ }; bHeader("Content-type: application/octet-stream");
3 }+ Z" g' C- i* x2 ]  rHeader("Content-Disposition: attachment; filename=" . $file_name);
3 J& h; h2 ]1 w7 r6 z& b. I: X+ Twhile (!feof ($file)) {
; n) |, y' P7 E, oecho fread($file,50000);
4 F2 W( ~9 j, ~% d/ Z1 t! h} + m+ z. Z+ F7 B# ^' F
fclose ($file);
% \5 ]6 z9 N, \' l}
* U% R- W/ B  Y- j?> 4 ]+ }, E* S- @! `

1 V& [" W. T/ J/ p! L6 c' v这样就能够用PHP直接输出文件了。
* B2 A: o& f3 t: ]
You look down on me today, tomorrow I can't let you have been

关注0

粉丝6

帖子3328

发布主题
阅读排行 更多
广告位

扫描微信二维码

关注华域联盟公众号

随时了解更新最新资讯

admin@cnhackhy.com

在线客服(服务时间 9:00~18:00)

在线QQ客服

Powered by cnhackhy! © 2015-2019