包含句点或点的URL在PHP中给出403禁止错误

时间:2015-03-15 07:33:37

标签: php apache url encoding query-string

我想在URL中传递查询字符串dir=../../files/,但我的服务器给了我403禁止错误:

  

禁止

     

您无权访问/example.php   在这台服务器上。

     

此外,尝试时遇到404 Not Found错误   使用ErrorDocument来处理请求。

我在SO上发现了一些问题,但我的问题似乎很奇怪。我使用urlencode()对其进行了编码,结果为example.php?dir=..%2F..%2Ffiles%2F。期间未编码。

我尝试使用str_replace().替换为%2E。浏览器自动转换为.。所以它没有改变结果。

当我从查询字符串中移除第二个../..%2F)时,即example.php?dir=..%2Ffiles%2F,这没关系。我不明白为什么。所以,我的快速解决方法是明确地用可识别的字符替换.,但它根本没有意义。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

试试这个:

<?php
echo $encode =  base64_encode ('../../files/');

echo '<br/>';

echo $decode = base64_decode ($encode);

//Results:

//    Li4vLi4vZmlsZXMv
//    ../../files/

?>

修改

dir=../../files/作为查询字符串无效,因为它违反了URL语法。有关详细信息See Here!