PHP检测连接是浏览器还是脚本

jhiyze9q  于 2023-11-16  发布在  PHP
关注(0)|答案(3)|浏览(129)

我试图阻止用户通过脚本连接到某些页面。因此,有没有什么方法可以用来检测连接到特定网页的是客户端浏览器还是自动脚本?
我知道某些头可以被欺骗,但是否有其他机制可以使用;比如如果无法设置sesseion_startsetCookie。如果可以或无法设置,这些返回true/false值?
比如说:

$sessionID = session_id() ;
$isSet = setCookie('cookieName',$sessionID, [ .... ]) ;
if ($isSet == false) {
   ... do something to kill the session
   ... or do something to redirect
}

字符串
这可能吗?即使可能,我知道这可能不可靠,但什么是更好或更可靠的方法?
为了澄清,检测它是否是一个脚本,如果是的话,在提供HTML页面的其余部分之前就杀死它。

vltsax25

vltsax251#

如果你试图阻止页面被完全调用,你可以通过使用一个.htaccess文件和一个php“检查”文件的组合来可靠地做到这一点。这将检查所请求的文件是来自你的脚本,还是外部源。创建一个目录,并将你的“隐藏”脚本文件与以下2个文件一起沿着放置:

.htaccess

php_value auto_prepend_file check.php

字符串

check.php

<?php
    if( !@$_SERVER["HTTP_X_REQUESTED_WITH"] ){
        header('/page_404.php'); // Or whatever you want it to do.
        exit;
    }


.htaccess指令所做的就是在每个脚本调用之前使check.php发生--所以从技术上讲,你可以在每个文件的顶部包含check.php.但我发现这是一个更完整、更优雅的解决方案。

sgtfey8w

sgtfey8w2#

如果您在CLI上运行,可以使用php_sapi_name()进行检查。
此示例仅允许来自CLI的脚本。

if (PHP_SAPI !== php_sapi_name()) {
    die('CLI only');
}

字符串
您可以反转条件,使其仅为Web服务器运行。

if (PHP_SAPI === php_sapi_name()) {
    die('Web Server only');
}

gywdnpxw

gywdnpxw3#

您可以使用UserAgent
(You可以在这里看到如何获得它:How to get user agent in PHP
这将让你知道用户的Web浏览器-我假设-将是不同的'脚本'

相关问题