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

时间:2013-12-03 17:41:53

标签: php security 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'])){//显示页面},但这不起作用。

2 个答案:

答案 0 :(得分:6)

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

// 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();
}

答案 1 :(得分:0)

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

但是,如果您希望curl对标题做出反应,请尝试以下操作:

curl_setopt($curl_handle, CURLOPT_FOLLOWLOCATION, 1);

来自文档:

  

TRUE以跟随服务器作为部分发送的任何“Location:”标头   HTTP标头(注意这是递归的,PHP将遵循尽可能多的   除非CURLOPT_MAXREDIRS是,否则“Location:”标题将被发送   设定)。

See the PHP doc for further details