【问题标题】:URL containing periods or dots gives 403 forbidden error in PHP包含句点或点的 URL 在 PHP 中给出 403 禁止错误
【发布时间】:2015-05-17 11:24:25
【问题描述】:

我想在 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,没关系。我不明白为什么。因此,我的快速解决方法是将. 明确替换为可识别的字符,但这根本没有意义。

有什么想法吗?

【问题讨论】:

  • 只要在 url 中添加斜线,它将被视为路径分隔符而不是查询数据。
  • 嗯.. 斜线转换为%2F。我认为这应该不是问题。
  • 你试过base64_encode 吗?

标签: php apache url encoding query-string


【解决方案1】:

试试这个:

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

echo '<br/>';

echo $decode = base64_decode ($encode);

//Results:

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

?>

编辑

这个dir=../../files/ 作为查询字符串不起作用,因为它违反了 URL 语法。欲了解更多信息See Here!

【讨论】:

  • 它似乎工作。谢谢你。你能否改进你的答案,为什么../../ 不工作而../ 工作?
  • “看这里!”链接现已损坏
猜你喜欢
  • 1970-01-01
  • 2013-08-29
  • 1970-01-01
  • 1970-01-01
  • 2014-03-05
  • 2021-09-04
  • 2022-07-08
  • 2015-01-21
  • 2014-09-29
相关资源
最近更新 更多