2015-10-07 243 views
0

我有我的下載文件中的問題,是由於在htaccess的一些錯誤的編碼,這裏是這個網址重寫規則

URL我的htaccess代碼:

https//www.example.com/download.php?fil=`<?php echo $nm ; ?>`&fpath=`<?php echo $fpath ; ?>`&ntid=`<?php echo $ntid ; ?>` 

$nm= b5fgh68dsk3nlxz.pdf , 
$fpath= ..uploads/45 , 
$ntid= 146 

現在htaccess的是

RewriteEngine ON 
RewriteRule ^n9/([[email protected]#$-_]*)/([[email protected]#$-_]*)/([0-9]+)$  download.php?fil=$1&fpath=$2&ntid=$3 

現在的問題通常不htaccess的文件可以輕鬆下載,但與htaccess的下載不能成立

URL看起來htaccess的後

https://www.example.com/n9/b5fgh68dsk3nlxz.pdf/..uploads/45/146 
+0

'$ -_]'會導致你的錯誤。使用'$ _-]'(末尾的連字符) – hjpotter92

回答

2

..uploads部分看起來也像是一個可能的漏洞,讓人們得到任何可能文件的源服務器上,如果你不小心。 但是,如果你的download.php文件在給他們文件內容之前採取預防措施,我會尋求一種解決方法來保存你的斜槓。從它生成的鏈接你的PHP文件,我會做:

<?php 
function base64url_encode($data) { 
return rtrim(strtr(base64_encode($data), '+/', '-_'), '='); 
} 
?> 
<a href="https://www.example.com/n9/<?php echo base64url_encode($nm) ; ?>/<?php echo base64url_encode($fpath); ?>/<?php echo base64url_encode($ntid); ?>">download</a> 

然後從你的download.php頂部我會使用:

<?php 
function base64url_decode($data) { 
return base64_decode(str_pad(strtr($data, '-_', '+/'), strlen($data) % 4, '=', STR_PAD_RIGHT)); 
} 
if(isset($_GET['fil']))$_GET['fil']=base64url_decode($_GET['fil']); 
if(isset($_GET['fpath']))$_GET['fpath']=base64url_decode($_GET['fpath']); 
if(isset($_GET['ntid']))$_GET['ntid']=base64url_decode($_GET['ntid']); 
?> 

最後,使用可以與以下度日clean .htaccess

RewriteRule ^n9/([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)$ download.php?fil=$1&fpath=$2&ntid=$3