如何保护我的网站内容不被cURL访问


How can I protect my website content from being accessed by cURL?

我有一个网站,要求用户在访问内容之前登录。在每个受保护的页面上,我都使用以下代码,当从浏览器访问时,它运行良好:

// check if they are logged in
if (!isset($_SESSION['valid_user'])) {
    header('Location: ./login.php');
}
// functions to display the page
display_page();

问题是,如果我使用cURL访问页面,则不会发生重定向,并且会返回内容。这关系到我…我该怎么办?

我尝试添加else if(isset($_SESSION['valid_user'])){//display page},但没有成功。

在当前状态下,您发送一个标头将用户重定向到登录页面,但您仍然提供页面内容。停止这样做,就像这样:

// check if they are logged in
if (!isset($_SESSION['valid_user'])) {
    header('Location: ./login.php');
    // and get out of here if they aren't
    exit();
}
// OK, they're logged in, let them see some content
// functions to display the page
display_page();

// check if they are logged in
if (!isset($_SESSION['valid_user'])) {
    header('Location: ./login.php');
    // and get out of here if they aren't
} else {
   // OK, they're logged in, let them see some content
   // functions to display the page
   display_page();
}

据我所知,保护您的网站不被curl访问是不可能的。curl可以想出任何一种伪造的浏览器标识。除此之外,没有服务器能够安全地知道请求是否不是来自浏览器。

然而,如果你想让curl对标题做出反应,可以试试这个:

curl_setopt($curl_handle, CURLOPT_FOLLOWLOCATION, 1);

来自文档:

TRUE表示在服务器作为一部分发送的任何"Location:"标头后面HTTP头(注意这是递归的,PHP将跟随发送的"位置:"标头,除非CURLOPT_MAXREDIRS设置)。

有关更多详细信息,请参阅PHP文档