【问题标题】:Solution for invalid REQUEST_URI sent using CURL使用 CURL 发送的 REQUEST_URI 无效的解决方案
【发布时间】:2011-07-22 16:59:25
【问题描述】:

使用这个 php 脚本,我可以调用 web 服务。文件名将记录在数据库中。它们被请求但不存在。

$url = "http://test.com/test.php?request=文件名.jpg"; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); $data = curl_exec($ch); 打印($数据); curl_close($ch);

问题是“文件名.jpg”。它没有编码。 当它到达网络服务时,请求 URI 看起来像这样

["REQUEST_URI"]=> 字符串(28) "/test/test.php?filename=file"

它在第一个空格字符的开头截断 url。

我的问题是我无法控制人们如何发送此请求。当然它们应该是 urlencode 函数,但我不能强迫它们。

所以我需要一个解决方案来获取完整的 REQUEST URI,或者将此视为错误。

【问题讨论】:

  • 正如你所说,你无法控制你会得到什么样的请求。你可以得到任何东西。所以我想唯一的方法是确保你有一个正确的 filename 参数,其中包含一个有效的文件名(例如对扩展名的限制)。
  • 不能那样做。有些文件真的没有扩展名。
  • 如果人们发送 错误的 url - 那是他们的问题。
  • 这是我的网络服务。我将存储此信息,因此它成为我的问题。作为任何无效的用户输入,必须有一种方法来检测问题。

标签: php apache url


【解决方案1】:

如果人们正在发送无效请求,除了检测$_GET['filename'] 无效(我想在你的服务器上不存在文件?),你无能为力,然后返回他们是一个404,可能是?)错误。

是的,一个空格应该被转义——参见RFC 23962.4.3. Excluded US-ASCII Characters部分。

【讨论】:

  • 文件不退出。文件名是请求。我更新了问题。
  • 哦;太糟糕了。如果您无法检查(针对文件或数据库) filename 是否正确,您无能为力:使用您发布的代码,就像用户发送 @ 987654326@,因为这就是他们实际在做的事情——而且你无法知道这不是他们想要做的事情。
  • 有趣的是apache日志显示了完整的url "GET /test/test.php?filename=file name.jpg HTTP/1.1" 所以只有php不能处理这个?跨度>
猜你喜欢
  • 2015-09-12
  • 2012-10-20
  • 1970-01-01
  • 2021-05-06
  • 2013-11-28
  • 2022-07-08
  • 1970-01-01
  • 2017-12-16
  • 2017-04-07
相关资源
最近更新 更多