我担心在PHP中从未知网址获取内容的安全性。
我们基本上会使用cURL从用户提供的网址中获取html内容,并查找Open Graph元标记,将链接显示为内容卡。
由于网址是由用户提供的,我担心在此过程中可能会收到恶意代码。
我有另一个问题:curl_exec实际上是将整个文件下载到服务器吗?如果是,则使用curl时可能会下载病毒或恶意软件吗?
答案 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_contents
或curl
。
使用: 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应该没有问题。这里的一些例子是:
即使没有使用特定网址验证您要求的内容的简单方法。有一些方法可以让您的生活更轻松,并防止一些潜在的问题。
例如,网址可能指向大型二进制,大图像文件或类似内容。
首先发出HEAD
请求以获取标头信息。然后查看Content-type
和Content-length
标头,看看内容是否为纯文本html文件
但是你应该不相信这些,因为它们可能是欺骗性的。这样做可以确保即使是非恶意的内容也不会使您的脚本崩溃。请求图像文件可能是您不希望用户做的事情。
我建议使用Guzzle来处理您的请求,因为我认为它提供了一些功能,可以让这更容易
答案 3 :(得分:0)
您可以使用 httpclient.class 而不是file_get_content或curl。因为它通过套接字连接页面。下载数据后,您可以使用 preg_match 获取元数据。
答案 4 :(得分:0)
这是安全的,但在使用之前需要进行适当的数据检查。正如您应该使用任何数据输入一样。