在php中获取url内容的安全性

时间:2016-12-12 21:26:46

标签: php security url curl fetch

我担心在PHP中从未知网址获取内容的安全性。

我们基本上会使用cURL从用户提供的网址中获取html内容,并查找Open Graph元标记,将链接显示为内容卡。

由于网址是由用户提供的,我担心在此过程中可能会收到恶意代码。

我有另一个问题:curl_exec实际上是将整个文件下载到服务器吗?如果是,则使用curl时可能会下载病毒或恶意软件吗?

5 个答案:

答案 0 :(得分:9)

使用cURL类似于使用fopen()fread()从文件中获取内容。 安全与否,取决于您对所提取内容的处理方式。

根据您的描述,您的服务器可以作为某种中介,从提取的HTML内容中提取特定的子内容。 即使提取的内容包含恶意代码,您的服务器也不会执行它,因此您的服务器不会受到任何伤害。

此外,因为您的服务器只提取特定的子内容(如您所说,Open Graph元标记), 所有其他不是您在提取的内容中寻找的东西都会被忽略, 这意味着您的用户将受到自动保护。

因此,在我看来,没有必要担心。 当然,这依赖于内容提取过程是健全的假设。 有人应该看一看并确认。

  

curl_exec实际上是将整个文件下载到服务器吗?

这取决于你的意思"完整档案"。 如果您的意思是"整个HTML内容",那么是。 如果你的意思是"包括feched HTML内容可能引用的所有CSS和JS文件",那么没有。

  

使用curl时可能会下载病毒或恶意软件吗?

答案是肯定的。 获取的HTML内容可能包含恶意代码,但是,如果您不执行该代码,则不会对您造成任何伤害。

同样,我假设您的内容提取过程合理。

答案 1 :(得分:1)

简短回答file_get_contents您可以安全地检索数据,即使是 curl 也是如此。这取决于您对该数据的处理方式 几个指南:
1.永远不要对该数据运行eval 2.不要在没有过滤的情况下将其保存到数据库中 3.甚至不要使用file_get_contentscurl

使用: get_meta_tags

array get_meta_tags ( string $filename [, bool $use_include_path = false ] )
// Example
$tags = get_meta_tags('http://www.example.com/');

您将解析所有元标记,并在数组中进行过滤。

答案 2 :(得分:1)

扩展Ray Radin的答案。

预防措施提示

他是正确的,如果你使用声音一个声音过程来搜索获取的资源,那么获取任何提供的url应该没有问题。这里的一些例子是:

  • 不要将文件存储在网络服务器上的面向公众的目录中。然后你将自己暴露给这个被执行的人。
  • 不要将其存储在数据库中,这可能会导致二次sql注入攻击
  • 一般情况下,如果您必须使用您要搜索的特定白名单,请不要存储您请求的资源中的任何内容。

检查标题信息

即使没有使用特定网址验证您要求的内容的简单方法。有一些方法可以让您的生活更轻松,并防止一些潜在的问题。

例如,网址可能指向大型二进制,大图像文件或类似内容。

首先发出HEAD请求以获取标头信息。然后查看Content-typeContent-length标头,看看内容是否为纯文本html文件

但是你应该不相信这些,因为它们可能是欺骗性的。这样做可以确保即使是非恶意的内容也不会使您的脚本崩溃。请求图像文件可能是您不希望用户做的事情。

狂饮

我建议使用Guzzle来处理您的请求,因为我认为它提供了一些功能,可以让这更容易

答案 3 :(得分:0)

您可以使用 httpclient.class 而不是file_get_content或curl。因为它通过套接字连接页面。下载数据后,您可以使用 preg_match 获取元数据。

答案 4 :(得分:0)

这是安全的,但在使用之前需要进行适当的数据检查。正如您应该使用任何数据输入一样。