如何编写脚本防止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解析器:
- 打开Nginx站点配置文件(比如
/etc/nginx/sites-available/your-site.conf) - 在
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; }
- 重启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
相关产品推荐
相关产品推荐

