2025最新:DVWA数据库配置避坑指南——MySQL/MariaDB兼容性问题全解析
【免费下载链接】DVWA Damn Vulnerable Web Application (DVWA) 项目地址: https://gitcode.com/gh_mirrors/dv/DVWA
你是否在搭建DVWA时遇到过数据库连接失败?配置文件改了十几次依然报错?本文将通过3个实战场景+4组对比配置,帮你彻底解决MySQL/MariaDB环境下的兼容性问题,让漏洞测试环境在10分钟内可用。
核心配置文件解析
DVWA的数据库配置集中在config/config.inc.php.dist文件中,这是系统启动时读取的核心配置模板。关键参数如下:
# 数据库管理系统选择
$DBMS = getenv('DBMS') ?: 'MySQL'; // 默认使用MySQL驱动
# 数据库连接参数
$_DVWA[ 'db_server' ] = getenv('DB_SERVER') ?: '127.0.0.1'; // 服务器地址
$_DVWA[ 'db_database' ] = getenv('DB_DATABASE') ?: 'dvwa'; // 数据库名
$_DVWA[ 'db_user' ] = getenv('DB_USER') ?: 'dvwa'; // 用户名
$_DVWA[ 'db_password' ] = getenv('DB_PASSWORD') ?: 'p@ssw0rd'; // 默认密码
$_DVWA[ 'db_port'] = getenv('DB_PORT') ?: '3306'; // 端口号
⚠️ 注意:文件第5行特别提示,如果使用localhost连接失败,请尝试改为127.0.0.1解决socket连接问题
MySQL vs MariaDB配置差异
用户权限配置对比
| 数据库类型 | 创建用户命令 | 权限授予方式 | 兼容性注意事项 |
|---|---|---|---|
| MySQL | CREATE USER 'dvwa'@'localhost' IDENTIFIED BY 'p@ssw0rd'; | GRANT ALL ON dvwa.* TO 'dvwa'@'localhost'; | 支持root用户直接连接 |
| MariaDB | CREATE USER 'dvwa'@'127.0.0.1' IDENTIFIED VIA mysql_native_password USING PASSWORD('p@ssw0rd'); | GRANT ALL PRIVILEGES ON dvwa.* TO 'dvwa'@'127.0.0.1'; | 必须创建专用用户,不允许root远程连接 |
配置文件修改示例
针对MariaDB环境,需要修改config/config.inc.php.dist的以下参数:
# MariaDB专用配置
$_DVWA[ 'db_server' ] = '127.0.0.1'; // 必须使用IP地址
$_DVWA[ 'db_user' ] = 'dvwa'; // 不能使用root用户
$_DVWA[ 'db_password' ] = 'SecurePass2025!'; // 使用强密码
数据库初始化实战
1. 创建数据库
虽然未找到MySQL专用的创建脚本,但可参考MSSQL版本的database/create_mssql_db.sql文件,手动执行以下命令:
CREATE DATABASE dvwa CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
2. 表结构初始化
执行database/bac_setup.sql文件创建基础表结构,关键表包括:
-- 访问日志表
CREATE TABLE IF NOT EXISTS access_log (
id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL,
target_id INT NOT NULL,
action VARCHAR(50) NOT NULL,
timestamp DATETIME NOT NULL,
FOREIGN KEY (user_id) REFERENCES users(user_id),
FOREIGN KEY (target_id) REFERENCES users(user_id)
) ENGINE=InnoDB;
3. 初始化界面操作
完成配置后访问setup.php页面,系统会自动检查数据库连接状态并创建必要的表结构:
图片展示了Docker环境下的数据库配置成功界面,本地安装时界面布局类似
常见错误解决方案
1. #1045 访问被拒绝错误
错误表现:Access denied for user 'dvwa'@'localhost' (using password: YES)
解决方案:
- 检查密码是否包含特殊字符(如$、!等),需要在配置文件中用单引号包裹
- MariaDB环境必须使用IP地址连接而非localhost
- 执行
FLUSH PRIVILEGES;刷新权限
2. #2002 连接失败错误
错误表现:Can't connect to MySQL server on 'localhost' (10061)
解决方案:
- 确认MySQL服务状态:
systemctl status mysql - 修改配置文件使用IP连接:
$_DVWA[ 'db_server' ] = '127.0.0.1'; - 检查防火墙设置:
ufw allow 3306/tcp
安全级别与数据库关系
DVWA的安全级别设置(config/config.inc.php.dist第33行)会影响数据库操作的安全性:
# 默认安全级别设置
$_DVWA[ 'default_security_level' ] = getenv('DEFAULT_SECURITY_LEVEL') ?: 'impossible';
不同级别下的SQLi模块使用的数据库后端由第52行控制:
# SQLi漏洞模块数据库选择
$_DVWA['SQLI_DB'] = getenv('SQLI_DB') ?: MYSQL; // 默认使用MySQL
# $_DVWA['SQLI_DB'] = SQLITE; // 可选SQLite
图片显示了安全级别设置界面的警告图标,提示用户当前配置状态
完整部署流程
- 克隆仓库:
git clone https://gitcode.com/gh_mirrors/dv/DVWA - 复制配置文件:
cp config/config.inc.php.dist config/config.inc.php - 编辑配置文件:根据数据库类型修改连接参数
- 创建数据库:执行
CREATE DATABASE dvwa; - 访问setup.php完成初始化
- 使用默认账号
admin/password登录系统
问题排查工具
- 数据库连接测试:phpinfo.php查看PHP环境配置
- 日志文件位置:
/var/log/mysql/error.log(MySQL)或/var/log/mariadb/mariadb.log(MariaDB) - 权限检测脚本:tests/test_url.py可测试数据库连接状态
通过本文的配置指南和问题解决方案,你应该能够顺利搭建起DVWA的数据库环境。如果遇到其他兼容性问题,可以查阅项目官方文档README.md或提交issue获取帮助。记住,安全测试环境的正确配置是学习Web安全的重要第一步。
【免费下载链接】DVWA Damn Vulnerable Web Application (DVWA) 项目地址: https://gitcode.com/gh_mirrors/dv/DVWA
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考





