用多参数重写htaccess中的规则

时间:2015-10-07 04:44:21

标签: apache .htaccess mod-rewrite url-rewriting

由于htaccess中的编码错误,我的下载文件出现问题,这是我的htaccess代码,用于此网址

URL:

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/([a-zA-Z0-9!@#$-_]*)/([a-zA-Z0-9!@#$-_]*)/([0-9]+)$     download.php?fil=$1&fpath=$2&ntid=$3

现在问题通常没有htaccess文件可以轻松下载但是htaccess下载无法建立

url关注htaccess

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

1 个答案:

答案 0 :(得分: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']);
?>

最后,使用可以使用以下干净.htaccess

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