2025最新:Phishing.Database反钓鱼数据库完全指南 — 从威胁情报到实战防御
你是否还在为层出不穷的钓鱼攻击焦头烂额?作为企业安全团队,每天要处理超过2000个新出现的钓鱼域名却无从下手?作为开发者,想集成反钓鱼功能却找不到可靠的数据源?本文将带你全面掌握Phishing.Database这一全球领先的开源反钓鱼数据库,从数据结构到实战应用,一文解决你的反钓鱼威胁情报需求。
读完本文你将获得:
- 掌握4大类共18种反钓鱼数据文件的使用场景
- 学会3种主流集成方式(防火墙/浏览器插件/代码调用)
- 获取5个企业级实战案例及性能优化方案
- 了解数据库背后的自动化测试流程与数据验证机制
- 获得完整的API调用代码示例与定期更新脚本
项目概述:全球最活跃的开源反钓鱼数据库
Phishing.Database是一个综合性的开源钓鱼威胁情报库,致力于通过社区协作的方式收集、验证和分享钓鱼域名(Phishing Domains)、URL(统一资源定位符)和IP地址(互联网协议地址)信息。该项目采用PyFunceble测试工具自动化验证所有已知钓鱼实体的状态,并提供详细统计数据,揭示当前仍活跃的钓鱼威胁数量。
核心价值主张
与商业威胁情报系统不同,Phishing.Database坚持以下核心原则:
- 完全开源免费:所有数据无需付费订阅即可获取和使用
- 社区协作维护:全球安全研究者共同贡献和验证数据
- 高度自动化:每日自动更新并验证所有记录状态
- 透明可审计:完整的测试流程和验证标准公开可见
截至2025年9月,该数据库已累计捕获:
- 465,985个钓鱼域名(Domains)
- 736,074个钓鱼链接(Links)
- 日均新增威胁记录超过1,200条
项目架构与工作流程
数据库的核心优势在于其严格的自动化测试流程,通过PyFunceble工具对每个记录进行HTTP状态码检测、DNS解析验证和内容分析,确保数据的准确性和时效性。
数据文件详解:18种文件类型与应用场景
Phishing.Database项目提供了丰富的数据文件,按照威胁类型、活跃状态和使用场景进行分类。以下是主要文件类型及其应用场景的详细说明:
1. 按威胁类型分类
域名数据(Domains)
| 文件名 | 描述 | 典型内容 | 适用场景 |
|---|---|---|---|
| phishing-domains-ACTIVE.txt | 目前活跃的钓鱼域名 | 00000000000000000000000000000000000000dfjjjhv.000webhostapp.com 000000000000000000000000000000000000dbscrfg.000webhostapp.com | 防火墙拦截规则 域名黑名单过滤 |
| phishing-domains-INACTIVE.txt | 已确认非活跃的钓鱼域名 | example-phishing-domain.com old-phish-site.net | 历史威胁分析 安全研究 |
| phishing-domains-INVALID.txt | 无效或已被移除的域名 | expired-phish-domain.com taken-down-site.org | 误报分析 威胁趋势研究 |
| phishing-domains-NEW-last-hour.txt | 过去一小时新增域名 | newly-registered-phish[.]xyz just-created-scam[.]info | 实时威胁监控 应急响应 |
| phishing-domains-NEW-today.txt | 今日新增域名 | today-phish[.]club new-scam-site[.]top | 每日威胁简报 趋势分析 |
数据样例(phishing-domains-ACTIVE.txt):
00000000000000000000000000000000000000dfjjjhv.000webhostapp.com 000000000000000000000000000000000000dbscrfg.000webhostapp.com 000000000000000000000000000.vstarbet555.com 000000000000000000000000000yteyeuya.000webhostapp.com 0000000000000000000000000.findyourjacket.com
URL数据(Links)
| 文件名 | 描述 | 典型内容 | 适用场景 |
|---|---|---|---|
| phishing-links-ACTIVE.txt | 目前活跃的钓鱼链接 | http://example.com/login.php https://phish-site.com/verify | Web过滤 邮件安全网关 |
| phishing-links-INACTIVE.txt | 已失效的钓鱼链接 | http://old-phish.com/fake-login | 安全意识培训 历史案例分析 |
| phishing-links-INVALID.txt | 无效的钓鱼链接 | http://nonexistent-site.com/scam | 研究与统计分析 |
| phishing-links-NEW-last-hour.txt | 过去一小时新增链接 | http://new-phish[.]xyz/steal-creds | 实时监控 即时阻断 |
| phishing-links-NEW-today.txt | 今日新增链接 | http://today-scam[.]info/fake-bank | 日常安全运营 威胁情报报告 |
数据样例(phishing-links-ACTIVE.txt):
http://00000000000000000000000000000000000000dfjjjhv.000webhostapp.com/yahoo/yahooattt/global/attverzon/login.php?.intl=us&.lang=en-us&https://login.yahoo.com/?.src=ym http://000000000000000000000000000000000000dbscrfg.000webhostapp.com/yahoo/yahooattt/global/attverzon/login.php?https%3a//login.yahoo.com/?.src=ym&.intl=us&.lang=en-us ftp://me@createkindlebooks.org:noobasshole@createkindlebooks.org/index.html
IP地址数据(IPs)
| 文件名 | 描述 | 典型内容 | 适用场景 |
|---|---|---|---|
| phishing-IPs-ACTIVE.txt | 活跃的钓鱼服务器IP | 192.168.1.100 203.0.113.45 | 网络层阻断 入侵检测系统 |
| phishing-IPs-INACTIVE.txt | 非活跃的钓鱼IP | 198.51.100.200 | 历史数据分析 IP信誉评估 |
| phishing-IPs-INVALID.txt | 无效的钓鱼IP | 10.0.0.1(内网地址) | 研究用途 |
| phishing-ips-NEW-last-hour.txt | 过去一小时新增IP | 169.254.1.1 | 实时响应 动态阻断 |
| phishing-ips-NEW-today.txt | 今日新增IP | 172.16.0.2 | 日常安全运营 |
2. 特殊格式文件
AdBlock格式文件
phishing-domains-ACTIVE.adblock 文件采用AdBlock Plus过滤规则格式,适用于浏览器插件和支持该格式的内容过滤系统:
! Title: Phishing Domains - ACTIVE
! Updated: 2025-09-09 17:39:35
! Expires: 1 day (update frequency)
! Homepage: https://github.com/Phishing-Database/Phishing.Database
! License: MIT
! Total domains: 465985
||00000000000000000000000000000000000000dfjjjhv.000webhostapp.com^
||000000000000000000000000000000000000dbscrfg.000webhostapp.com^
||000000000000000000000000000.vstarbet555.com^
这种格式的优势在于可以直接导入AdBlock、uBlock Origin等浏览器插件,为普通用户提供即时保护。
自动化测试流程:确保数据准确性的核心机制
Phishing.Database的核心竞争力在于其严格的自动化测试流程,通过PyFunceble工具实现对每个威胁实体的持续验证。以下是该流程的详细解析:
1. 状态判定标准
系统根据HTTP响应状态码将钓鱼实体分为不同状态:
活跃状态(ACTIVE)
- 明确活跃:返回2xx系列状态码(200, 201, 202等)
- 潜在活跃:返回000、3xx重定向系列(301, 302等)、4xx客户端错误(403, 405等)和5xx服务器错误(500, 503等)
非活跃状态(INACTIVE)
- 返回404 Not Found或410 Gone状态码
- 持续多次测试均无法访问
无效状态(INVALID)
- DNS解析失败
- 域名已过期或被注册商收回
- IP地址被分配给非恶意实体
2. 测试频率与更新周期
- 新增实体:首次发现后每15分钟测试一次
- 活跃实体:每小时测试一次
- 非活跃实体:每24小时测试一次
- 无效实体:每周测试一次,持续4周无变化则从数据库移除
这种分层测试策略既保证了活跃威胁的时效性,又避免了不必要的资源消耗。
实战应用:从数据到防御的完整方案
1. 企业级防火墙集成
适用场景:企业网络边界防护,阻止内部用户访问钓鱼网站
实施步骤:
- 定期下载数据:
# 创建存放数据的目录
mkdir -p /etc/phishing-blocklists
# 下载活跃域名列表
curl -o /etc/phishing-blocklists/domains-active.txt https://phish.co.za/latest/phishing-domains-ACTIVE.txt
# 下载活跃IP列表
curl -o /etc/phishing-blocklists/ips-active.txt https://phish.co.za/latest/phishing-IPs-ACTIVE.txt
- 转换为防火墙规则:
# 为UFW防火墙生成规则
while IFS= read -r domain; do
echo "sudo ufw deny out to $domain" >> /etc/phishing-blocklists/ufw-rules.sh
done < /etc/phishing-blocklists/domains-active.txt
# 为IPTables生成规则
while IFS= read -r ip; do
echo "-A OUTPUT -d $ip -j DROP" >> /etc/phishing-blocklists/iptables-rules.txt
done < /etc/phishing-blocklists/ips-active.txt
- 设置定时更新任务:
# 添加到crontab,每天凌晨3点更新
echo "0 3 * * * /path/to/update-scripts/update-phishing-lists.sh" | crontab -
性能优化建议:
- 对于超过10万条记录的大型列表,建议使用ipset而非单独的iptables规则
- 实施分层过滤:先按IP段过滤,再检查域名
- 对高频访问的域名实施缓存机制,减少DNS查询压力
2. 浏览器插件开发
适用场景:终端用户保护,防止员工或个人用户访问钓鱼网站
核心代码示例(Chrome扩展):
// 后台服务 worker
chrome.runtime.onInstalled.addListener(() => {
// 初始化时加载钓鱼域名列表
loadPhishingDomains();
// 设置定时更新(每4小时)
chrome.alarms.create('updatePhishingLists', { periodInMinutes: 240 });
});
// 处理定时更新
chrome.alarms.onAlarm.addListener(alarm => {
if (alarm.name === 'updatePhishingLists') {
loadPhishingDomains();
}
});
// 加载并存储钓鱼域名
let phishingDomains = new Set();
async function loadPhishingDomains() {
try {
const response = await fetch('https://phish.co.za/latest/phishing-domains-ACTIVE.txt');
const text = await response.text();
const domains = text.split('\n').filter(d => d.trim() !== '');
// 更新Set集合
phishingDomains = new Set(domains);
// 存储到本地存储,供内容脚本访问
chrome.storage.local.set({ phishingDomains: Array.from(phishingDomains) });
console.log(`Updated phishing domains: ${domains.length} entries`);
} catch (error) {
console.error('Failed to update phishing domains:', error);
}
}
// 监听网页请求
chrome.webRequest.onBeforeRequest.addListener(
details => {
const url = new URL(details.url);
const hostname = url.hostname;
// 检查是否在钓鱼列表中
if (phishingDomains.has(hostname)) {
// 阻止请求并重定向到警告页面
return {
redirectUrl: chrome.runtime.getURL('warning.html?url=' + encodeURIComponent(details.url))
};
}
},
{ urls: ["<all_urls>"] },
["blocking"]
);
警告页面设计:
<!DOCTYPE html>
<html>
<head>
<title>钓鱼网站警告</title>
<style>
body { width: 100%; height: 100%; background: #dc3545; color: white; text-align: center; padding: 50px; }
.warning-container { max-width: 800px; margin: 0 auto; }
.warning-icon { font-size: 100px; margin-bottom: 20px; }
</style>
</head>
<body>
<div class="warning-container">
<div class="warning-icon">⚠️</div>
<h1>钓鱼网站警告</h1>
<p>您尝试访问的网站已被标记为钓鱼网站,可能会窃取您的个人信息。</p>
<p><strong>被阻止的URL:</strong> <span id="blocked-url"></span></p>
<button onclick="window.close()">关闭页面</button>
</div>
<script>
// 获取被阻止的URL并显示
const params = new URLSearchParams(window.location.search);
const blockedUrl = params.get('url');
document.getElementById('blocked-url').textContent = blockedUrl;
</script>
</body>
</html>
3. 邮件安全网关集成
适用场景:企业邮件系统防护,过滤包含钓鱼链接的邮件
Python代码示例:
import requests
import re
from datetime import datetime, timedelta
class PhishingEmailFilter:
def __init__(self):
self.phishing_domains = set()
self.phishing_ips = set()
self.last_updated = None
self.update_interval = timedelta(hours=1)
# 初始化时加载数据
self.update_lists()
def update_lists(self):
"""更新钓鱼域名和IP列表"""
# 检查是否需要更新
if self.last_updated and datetime.now() - self.last_updated < self.update_interval:
return False
try:
# 获取域名列表
domains_response = requests.get("https://phish.co.za/latest/phishing-domains-ACTIVE.txt")
self.phishing_domains = set(domains_response.text.splitlines())
# 获取IP列表
ips_response = requests.get("https://phish.co.za/latest/phishing-IPs-ACTIVE.txt")
self.phishing_ips = set(ips_response.text.splitlines())
self.last_updated = datetime.now()
print(f"Updated phishing lists at {self.last_updated}")
print(f"Loaded {len(self.phishing_domains)} domains and {len(self.phishing_ips)} IPs")
return True
except Exception as e:
print(f"Error updating phishing lists: {str(e)}")
return False
def extract_domains(self, text):
"""从文本中提取域名"""
domain_pattern = re.compile(r'([a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+)')
return set(domain_pattern.findall(text))
def extract_ips(self, text):
"""从文本中提取IP地址"""
ip_pattern = re.compile(r'\b(?:\d{1,3}\.){3}\d{1,3}\b')
return set(ip_pattern.findall(text))
def scan_email(self, subject, body):
"""扫描邮件内容,判断是否包含钓鱼链接"""
# 先更新列表
self.update_lists()
# 合并主题和正文进行扫描
full_text = subject + "\n" + body
# 提取所有域名和IP
domains = self.extract_domains(full_text)
ips = self.extract_ips(full_text)
# 检查是否有匹配的钓鱼域名或IP
malicious_domains = domains.intersection(self.phishing_domains)
malicious_ips = ips.intersection(self.phishing_ips)
if malicious_domains or malicious_ips:
return {
'is_phishing': True,
'malicious_domains': list(malicious_domains),
'malicious_ips': list(malicious_ips)
}
return {'is_phishing': False}
# 使用示例
if __name__ == "__main__":
filter = PhishingEmailFilter()
# 测试钓鱼邮件
test_subject = "您的账户需要紧急验证"
test_body = """
尊敬的用户,您的账户存在异常活动,请立即访问 http://00000000000000000000000000000000000000dfjjjhv.000webhostapp.com 进行验证。
如不及时处理,您的账户将被冻结。
此致,
客户服务团队
"""
result = filter.scan_email(test_subject, test_body)
print(result)
# 应输出: {'is_phishing': True, 'malicious_domains': ['00000000000000000000000000000000000000dfjjjhv.000webhostapp.com'], 'malicious_ips': []}
高级应用:自定义数据处理与扩展
1. 数据校验与完整性检查
Phishing.Database提供了完整的校验和文件,可用于验证下载数据的完整性:
# 下载数据文件
curl -o phishing-domains-ACTIVE.txt https://phish.co.za/latest/phishing-domains-ACTIVE.txt
# 下载校验和文件
curl -o phishing-domains-ACTIVE.txt.sha256 https://raw.githubusercontent.com/Phishing-Database/checksums/refs/heads/master/phishing-domains-ACTIVE.txt.sha256
# 验证文件完整性
sha256sum -c phishing-domains-ACTIVE.txt.sha256
如果验证失败,可能是文件在传输过程中损坏,或下载的不是最新版本,建议重新下载。
2. 私有数据库部署
对于有高可用性要求的企业,可以部署私有数据库实例:
# 克隆项目仓库(注意:项目不建议直接克隆,而是通过API获取数据)
git clone https://gitcode.com/gh_mirrors/ph/Phishing.Database.git
# 进入项目目录
cd Phishing.Database
# 运行数据更新脚本(如果有)
./update.sh
注意:官方不建议直接克隆仓库,因为项目每24小时会重置历史记录,可能会破坏你的本地设置。推荐使用直接下载数据文件的方式获取最新数据。
3. 数据贡献与社区参与
如果你发现了新的钓鱼威胁,可以通过以下方式贡献数据:
-
提交新增域名/IP:
- 访问项目的phishing仓库:https://github.com/Phishing-Database/phishing
- 编辑相应的列表文件(domains.list, ips.list等)
- 提交Pull Request
-
报告误报:
- 访问项目Issue页面:https://github.com/Phishing-Database/Phishing.Database/issues
- 选择"False Positive Report"模板
- 提供误报的域名/IP和相关证明材料
-
改进建议:
- 通过Issue提交功能改进建议
- 参与项目讨论和 roadmap 规划
常见问题与最佳实践
1. 数据更新与缓存策略
问题:如何平衡数据时效性和服务器负载?
解决方案:实施分层缓存策略
- 活跃域名列表:每1小时更新一次
- 非活跃域名列表:每24小时更新一次
- 完整历史数据:每周更新一次
# 推荐的wget/curl命令,添加缓存控制
curl -H "Cache-Control: max-age=3600" -o phishing-domains-ACTIVE.txt https://phish.co.za/latest/phishing-domains-ACTIVE.txt
2. 大规模部署性能优化
问题:数据库包含数十万个记录,如何在不影响网络性能的情况下实施过滤?
解决方案:
- 使用高效数据结构:将域名转换为哈希集合而非数组,提高查找速度
- 分层过滤:先按TLD(顶级域名)过滤,再检查二级域名
- 实施白名单机制:对内部可信域名设置白名单,跳过过滤检查
- 定期清理:移除超过90天未活跃的记录,减少列表大小
3. 误报处理流程
问题:误将合法网站标记为钓鱼网站怎么办?
处理流程:
- 记录误报的域名/IP和访问时间
- 收集该域名的WHOIS信息和网站内容证明其合法性
- 通过项目的False Positive Report模板提交误报报告
- 在本地过滤规则中临时添加该域名到白名单
- 监控项目响应,确认误报是否被处理
4. 数据存储与访问控制
安全最佳实践:
- 限制反钓鱼数据库访问权限,仅授权人员可查看完整列表
- 实施审计日志,记录所有数据访问和使用情况
- 定期轮换用于访问API的凭证
- 加密存储本地缓存的钓鱼数据文件
未来展望与发展趋势
Phishing.Database项目正朝着以下方向发展:
- 机器学习集成:开发基于AI的钓鱼检测模型,提高检测准确率
- 实时推送API:提供WebSocket接口,实现威胁实时推送
- 多语言支持:扩展项目文档和界面支持多种语言
- 移动应用集成:开发移动SDK,方便移动应用集成反钓鱼功能
- 威胁情报共享平台:建立更开放的威胁情报共享机制,连接不同安全产品
随着网络钓鱼技术的不断演进,开源威胁情报的重要性将愈发凸显。Phishing.Database通过社区协作的方式,正在构建一个更安全的网络环境,这种模式也为其他类型的威胁情报共享提供了可借鉴的范例。
总结与行动指南
通过本文的介绍,你已经全面了解了Phishing.Database这一强大的开源反钓鱼数据库。从数据结构到实战应用,从集成方案到性能优化,我们涵盖了从入门到精通所需的全部知识。
立即行动清单:
- 访问项目主页,下载最新的活跃域名列表
- 评估你的组织最需要的集成方式(防火墙/浏览器插件/邮件过滤)
- 实施本文提供的代码示例,建立初步的反钓鱼防护
- 制定数据更新计划,确保防护规则与时俱进
- 加入项目社区,贡献你的发现和改进建议
记住,反钓鱼是一场持久战,没有一劳永逸的解决方案。通过持续更新威胁情报、优化防护策略和提高用户安全意识,我们才能共同构建一个更安全的网络环境。
如果你觉得本文对你有帮助,请点赞、收藏并关注项目更新,以便获取最新的反钓鱼防御技巧和最佳实践。下期我们将深入探讨PyFunceble测试工具的高级使用方法,敬请期待!
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



