You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写脚本防止PHP文件被Request方法读取并记录访问尝试日志?

如何防护server_data.php被非法读取并记录访问尝试?

我看到你有一个Python脚本可以通过POST请求读取VPS上的server_data.php文件,现在需要实现防护机制来阻止这类读取操作,同时记录所有尝试访问的行为。下面给你几个实用的方案,覆盖不同场景:


方案1:直接在server_data.php中添加防护逻辑

如果没有修改Web服务器配置的权限,或者想针对这个文件做精细化控制,直接在PHP文件头部添加防护代码是最方便的。它会检查请求合法性,拒绝非法访问并记录日志:

<?php
// 定义允许访问的IP列表(比如只允许本地或信任的服务器IP)
$allowed_ips = ['127.0.0.1', '你的可信IP地址'];
$client_ip = $_SERVER['REMOTE_ADDR'];

// 日志文件路径,确保Web服务器有写入权限
$log_file = '/var/log/growtopia/server_access.log';

// 记录所有访问尝试(包括合法请求)
$log_entry = date('Y-m-d H:i:s') . " | 客户端IP: $client_ip | 请求方法: " . $_SERVER['REQUEST_METHOD'] . "\n";
file_put_contents($log_file, $log_entry, FILE_APPEND | LOCK_EX);

// 验证访问权限
if (!in_array($client_ip, $allowed_ips)) {
    // 返回403禁止访问状态码
    http_response_code(403);
    echo "Access Denied";
    exit;
}

// 下面是原来的server_data.php代码
// ... 你的原有业务逻辑 ...
?>

注意事项:

  • 确保$log_file指定的目录存在,并且Web服务器进程(如www-data、nginx)有写入权限
  • 可按需扩展验证规则:比如只允许GET请求、检查特定请求头标识等

方案2:通过Web服务器配置拦截(Nginx示例)

如果用Nginx作为Web服务器,直接在配置文件中添加规则拦截非法访问并记录日志,这种方式比PHP脚本更高效——请求不会到达PHP解析器:

  1. 打开Nginx站点配置文件(比如/etc/nginx/sites-available/your-site.conf)
  2. 在server块中添加以下配置:
location = /growtopia/server_data.php {
    # 允许信任的IP访问
    allow 127.0.0.1;
    allow 你的可信IP地址;
    deny all;

    # 自定义日志格式,记录详细访问信息
    log_format server_data_log '$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent';
    access_log /var/log/nginx/server_data_access.log server_data_log;
}
  1. 重启Nginx使配置生效:
sudo systemctl restart nginx

Apache用户对应配置

在Apache站点配置或.htaccess文件中添加:

<Files "server_data.php">
    Order Deny,Allow
    Deny from all
    Allow from 127.0.0.1
    Allow from 你的可信IP地址

    # 开启自定义访问日志
    CustomLog /var/log/apache2/server_data_access.log "%h %l %u %t \"%r\" %>s %b"
</Files>

方案3:Python脚本实时监控日志(可选)

如果想实时感知非法访问并触发告警,可以写一个简单的Python脚本,跟踪日志文件并推送通知:

import time
from tailer import follow

log_path = '/var/log/growtopia/server_access.log'

# 实时读取日志末尾的新内容
for line in follow(open(log_path)):
    print(f"新的访问尝试记录: {line.strip()}")
    # 这里可以扩展告警逻辑,比如发送邮件/企业微信通知
    # 示例邮件告警(需提前配置SMTP):
    # import smtplib
    # from email.mime.text import MIMEText
    # msg = MIMEText(f"检测到访问尝试:{line}")
    # 编写邮件发送代码...

这些方案可以组合使用,比如先用Web服务器拦截大部分非法请求,再在PHP脚本中做二次验证,实现双重保障。根据你的实际环境选择最合适的方式即可。

内容的提问来源于stack exchange,提问作者artemis1551

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 08:52:30