如果您不希望在外部网站上被选中,我建议您根本不要使用 iframe。可以让 php 将外部站点的内容直接放入当前页面,例如使用 file_get_contents()
这也允许一种简单的安全形式,因为您可以将身份验证详细信息从现有服务器发布到远程服务器:
$opts = array('http' =>
array(
'method' => 'POST',
'header' => "Content-Type: text/xml\r\n".
"Authorization: Basic ".base64_encode("$https_user:$https_password")."\r\n",
'content' => $body,
'timeout' => 60
)
);
$context = stream_context_create($opts);
$url = 'https://'.$https_server;
$result = file_get_contents($url, false, $context, -1, 40000);
(示例来自 php curl 手册中关于 file_get_contents1 的 cmets 部分)
一种更复杂的方法(如果您有时间弄清楚,从长远来看也更好)
是使用 curl,您可以查看如何使用以下问题的代码获取 POST 的结果:PHP + curl, HTTP POST sample code?
编辑:刚刚看到你的评论:
这种方法的问题在于,在 iframe 中加载的外部站点会对驻留在同一服务器上的页面执行大量 ajax 请求。
没有什么可以阻止您在页面内执行 ajax 请求。
当然,默认情况下请求必须来自同一个域,但有一些方法可以解决这个问题:
在你自己的页面上有一个 php 脚本充当中介:基本上它会将 ajax 传递给外部服务器,然后将响应发送回来
(优点,简单,缺点,由于请求被处理两次而产生的额外流量)
跨域资源共享https://developer.mozilla.org/en/docs/HTTP/Access_control_CORS)基本上,您告诉客户您将使用来自另一个站点的资源。这样浏览器就不会将其作为潜在的劫持来阻止。
(见http://css.dzone.com/articles/ajax-requests-other-domains)
这样做的好处是它隐藏了 iframe 的来源,并允许您在两个域之间使用身份验证。与 .htaccess 结合使用会非常安全,因为您可以使用 .htaccess,这样只有运行代码的域才能访问该页面。
如果您必须使用 iframe,那么您当然应该进行身份验证,否则它将向全世界开放,因为客户端需要直接访问该网站。您可以将数据 POST 到 iframe(参见 Sending data through post method to an iframe 或 How do you post to an iframe?),这涉及将 iframe 设置为表单,然后提交表单(您可以通过 javascript 自动完成)以获取 POST 结果。
由于这必须在客户端完成,它不仅公开了要访问的页面,还公开了要发送的请求类型。这是否是一个问题取决于您以及您希望什么样的用户使用您的程序。
至于 curl,curl 本身并不能解决 iframe 和 ajax 调用的问题,但它是一个比 file_get_contents 更有效和灵活的 url/webpage-getting 命令/framework。