import os
import shutil
# 定义WAF相关代码字符串
waf_code = """
require_once('CTF_WAF.php');
"""
# 定义目标目录,可根据实际情况修改
target_directory = r'D:\awdworkspace\web'
# 检查并创建备份目录
backup_dir = os.path.join(target_directory, 'backup')
if not os.path.exists(backup_dir):
os.makedirs(backup_dir)
# 常见编码列表,可根据实际情况增加更多编码尝试
common_encodings = ['utf-8', 'gbk', 'latin1', 'utf-16']
# 遍历目标目录及其子目录下的所有文件
for root, dirs, files in os.walk(target_directory):
for file in files:
if file.endswith('.php'):
file_path = os.path.join(root, file)
backup_file_path = os.path.join(backup_dir, file)
# 判断源文件和目标文件路径是否相同,相同则跳过备份操作
if file_path == backup_file_path:
continue
# 备份文件
shutil.copy2(file_path, backup_file_path)
content = None
for encoding in common_encodings:
try:
with open(file_path, 'r', encoding=encoding) as php_file:
content = php_file.readlines()
break
except UnicodeDecodeError:
continue
if content is None:
print(f"无法以常见编码解析文件 {file_path},跳过该文件")
continue
new_content = []
inserted_waf = False
for line in content:
new_content.append(line)
if '<?php' in line:
new_content.append(waf_code + '\n')
inserted_waf = True
if inserted_waf:
with open(file_path, 'w', encoding=encoding) as php_file:
php_file.writelines(new_content)
else:
# 文件中不存在<?php,直接将原内容写回文件
with open(file_path, 'w', encoding=encoding) as php_file:
php_file.writelines(content)
一键添加waf
于 2024-12-02 15:29:48 首次发布