【问题标题】:How to block curl or file_get_contents如何阻止 curl 或 file_get_contents
【发布时间】:2013-11-17 20:00:04
【问题描述】:

如何禁止某人使用 curlfile_get_contents 获取我的页面 HTML?

例如,我的域是www.example.com。如果有人有这样的 PHP 代码:

<?php
$info = file_get_contents('http://www.example.com/theinfo.php');
?>

我怎样才能阻止他们?

我可以尝试通过用户代理进行检查,但这不是正确的方法。

检查某人何时尝试获取页面内容的最佳方法是什么?

我构建的内容包含许多人会尝试将其复制到他们自己的网站的信息,这可能会使我的服务器过载。

【问题讨论】:

    标签: php .htaccess curl file-get-contents


    【解决方案1】:

    我可以尝试通过用户代理检查它,但它不是正确的方法。

    确实可以通过 curl 更改用户代理,但这几乎是您判断是否有人通过 curl 访问您的网站的唯一方法。请求中没有其他内容可以区分它们。

    话虽如此,您可以尝试查找一些缺失的字段,因为 file_get_contents() 默认会忽略其中的一些字段:

    RewriteEngine On
    RewriteCond %{HTTP_USER_AGENT} ^$ [OR]
    RewriteCond %{HTTP_ACCEPT} ^$
    RewriteRule ^ - [L,F]
    

    虽然您确实有遇到误报的风险。

    【讨论】:

    • 谢谢,我会寻找其他方法来检查用户何时不使用浏览器,如果我发现任何问题,我会用答案更新我的问题。
    【解决方案2】:

    将 .htaccess 与网站 (example.com) 的相应 IP 地址一起使用。 将此代码粘贴到您的 .htaccess 中:

    order allow,deny
    deny from 123.45.67.89
    allow from all
    

    【讨论】:

    • 谢谢,我检查了它(从其他服务器)并且 file_get_contents() 返回了我的 html 代码。
    • 这不会阻止托管该站点的服务器发送的请求吗?而不是来自互联网其他地方的所有卷曲东西?
    • @4sha 不,它没有阻止任何请求,我尝试通过免费托管服务获取我的页面内容,并且 file_get_contents 返回我的 html.note:我认为答案在客户端(curl 或get_file_contents 不是他们无法显示图像的浏览器 :) 现在我明白了;))。
    【解决方案3】:

    如果您担心任何人(而不是特定 IP 或域)获取您的内容,您应该为您的网站实施某种注册流程。使用 Apache 进行过滤可能会导致比其价值更多的问题。您应该问问自己,您在互联网上发布的内容是否实际上并不意味着每个人和机器都可以随心所欲地做,它应该受到登录保护或不在互联网上。

    这是一个非常简单易用的 PHP 库,用于实现登录和/或注册系统: https://github.com/panique/php-login

    【讨论】:

    • 谢谢,但任何人都可以创建新用户,然后使用 curl 登录:/
    猜你喜欢
    • 2013-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-11
    • 1970-01-01
    • 1970-01-01
    • 2012-12-18
    • 1970-01-01
    相关资源
    最近更新 更多