由于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
答案 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