用于发布和使用REST的php file_get_contents

kal*_*ali 1 php rest web-services

在我为最近的一次访谈提供的示例代码中,我使用了file_get_contents来使用他们的Web服务(没有什么特别的,为POST请求发送一些自定义头文件).我发现其他方法如curl不必要地复杂和冗长,并且使用file_get_contents来处理我用PHP做的大多数"客户端"事情.

一位采访者认为,除了获取请求之外,不建议使用file_get_contents.我没有当场反对,但回去搜索了一下.他对这个"众所周知的事实"的断言找不到任何可靠的答案

任何人都可以指出在这种情况下使用file_get_contents的一些缺点吗?任何人都可以指向一个他们消除file_get_contents作为一个好习惯的资源?

谢谢.

Jas*_*wer 6

从安全角度来看,使用file_get_contents()通常不是一个好主意.

于allow_url_fopen

为了file_get_contents()能够使用远程源,allow_url_fopen必须启用该设置.但是当启用此设置时,PHP中的所有其他流相关功能(如includerequire)也允许使用远程源.这可能允许远程文件执行等攻击.

使用其他工具(如cURL)时,可以禁用allow_url_fopen(默认情况下启用).

SSL/TLS

默认情况下,PHP流对SSL/TLS不安全.幸运的是,这可以纠正,但在安全使用HTTPS/FTPS源之前确实需要注意.

剩下的问题是PHP无法匹配证书中的主题备用名称(许多证书使用).这意味着(当安全配置时)PHP可以拒绝有效的证书.为了避免这种情况,您需要禁用CN匹配,这样就可以打开Man In The Middle攻击.

另一方面,cURL在默认情况下是完全安全的,并且支持SAN匹配.

生存深层:PHP安全

PádraicBrady正在写一本关于PHP安全性的书,本章有你可能想要阅读的内容.

喝酒失控

你可能想看看Guzzle:

Guzzle是一个PHP HTTP客户端,可以轻松使用HTTP/1.1,并消除了使用Web服务的痛苦.它默认使用cURL.