个人博客系统
基于 ThinkPHP 8.0 和 PHP 8.4 的现代化个人博客系统,采用 MVC 架构,支持静态页面生成、富文本编辑、完整的权限管理和安全防护。
项目地址:https://gitee.com/nick_qin/nick-blog
功能特性
后台管理
文章管理:文章的创建、编辑、发布、删除、草稿管理、回收站恢复 分类管理:文章分类的增删改查,支持文章数量统计 标签管理:标签的增删改查,支持标签云展示 链接管理:友情链接的增删改查,支持显示/隐藏状态 用户管理:后台用户的增删改查,支持超级管理员和普通作者角色 系统设置:网站基本信息、SEO配置、邮件配置等全局设置 页面管理:关于页面、版权声明页面的内容管理 静态页面重建:一键重建首页、文章列表、详情页等静态HTML
前台展示
响应式设计:完美适配 PC 和移动端设备 文章列表:支持按分类、标签筛选,分页展示 文章详情:支持代码高亮、图片展示、点赞功能 搜索功能:支持按关键词搜索文章 热门推荐:热门文章排行、相关文章推荐 标签云:动态标签云,按文章数量显示热度 友情链接:底部友情链接展示
安全防护
CSRF 防护:表单提交 CSRF 令牌验证,AJAX 请求自动携带令牌 XSS 过滤:后端白名单过滤(DOMDocument),前端输出转义处理 账号锁定:登录失败5次后锁定30分钟 权限控制:超级管理员与普通作者权限区分 密码安全:bcrypt 加密存储,防止重复加密 会话安全:登录成功后重新生成 Session ID,防止会话固定攻击 安全响应头:X-Frame-Options、X-XSS-Protection、X-Content-Type-Options、Referrer-Policy、Permissions-Policy Cookie 安全:HttpOnly、Secure(生产环境)、SameSite=Strict(生产环境)
性能优化
静态化引擎:自动生成静态 HTML,提升 SEO 和访问速度 图片处理:自动压缩、水印添加 缓存机制:文件缓存与 Redis 缓存支持
开发特性
RESTful API:完整的 API 接口,支持文章统计、点赞、搜索等 日志系统:按日期和大小自动分割日志,分类存储 邮件服务:SMTP 邮件发送,支持异常告警
技术栈
环境要求
PHP 8.4+ MySQL 5.7.25+ (50M+ 可用空间) Apache 2.4+ (支持 .htaccess和mod_rewrite)PHP 扩展:PDO、GD、MBstring、fileinfo
目录结构
nick-blog/
├── app/ # 应用目录
│ ├── admin/ # 后台应用
│ │ ├── controller/ # 后台控制器(Article、Category、Tag、User等)
│ │ ├── middleware/ # 后台中间件(Auth、Csrf)
│ │ └── view/ # 后台视图模板
│ ├── api/ # API 接口
│ │ └── controller/ # API控制器(Article、Category、Search等)
│ ├── index/ # 前台应用
│ │ ├── controller/ # 前台控制器(Index、Article、Search等)
│ │ └── view/ # 前台视图模板
│ ├── Base/ # 核心类库
│ │ ├── Enums/ # 枚举类(ArticleStatus、UserRole等)
│ │ ├── Services/ # 服务类(HtmlService、MailService等)
│ │ └── Functions/ # 公共函数(CustomLog、helpers等)
│ ├── model/ # 数据模型(Article、User、Category等)
│ ├── exception/ # 异常处理器(Handler)
│ ├── Request.php # 自定义请求类
│ ├── helper.php # 应用助手函数入口
│ ├── middleware.php # 应用中间件配置
│ └── provider.php # 应用服务提供器配置
├── config/ # 配置文件(app、database、cache、session等)
├── route/ # 路由配置(route.php、app.php)
├── public/ # Web 根目录
│ ├── index.php # 应用入口文件
│ ├── router.php # 路由入口文件
│ ├── install.locked.php # 安装程序(已锁定)
│ ├── .htaccess # Apache 重写规则
│ └── static/ # 静态资源
│ ├── admin/ # 后台静态资源(css、js)
│ ├── index/ # 前台静态资源(css、js、fontawesome)
│ ├── sysimg/ # 系统图片(logo、默认封面)
│ └── vendor/ # 第三方库(jQuery、LayUI、wangEditor)
├── runtime/ # 运行时目录(缓存、日志)
├── logs/ # 日志目录(按应用分类)
├── doc/ # 项目文档(需求文档、日志管理文档)
├── database.sql # 数据库建表 SQL
├── composer.json # Composer 依赖配置
├── composer.lock # Composer 依赖锁定
├── think # ThinkPHP 命令行工具
├── .env # 环境变量配置
├── .gitignore # Git 忽略规则
└── README.md # 项目说明文档
安装步骤
1. 上传文件
将所有文件上传到服务器的网站根目录。
2. 安装依赖
composer install
3. 设置目录权限
以下目录需要可写权限 (755 或 775):
chmod -R 755 runtime/
chmod -R 755 public/
chmod -R 755 logs/
4. 配置环境变量
复制 .env.example 为 .env(如果存在),或直接修改 .env 文件。
开发环境配置
APP_ENV = development
APP_DEBUG = true
APP_TRACE = false
[DATABASE]
TYPE = mysql
HOSTNAME = 127.0.0.1
DATABASE = nick_blog
USERNAME = root
PASSWORD =
HOSTPORT = 3306
CHARSET = utf8mb4
PREFIX = bk_
[LANG]
default_lang = zh-cn
[ADMIN]
ADMIN_ROUTE_PREFIX = sysman
生产环境配置
APP_ENV = production
APP_DEBUG = false
APP_TRACE = false
[DATABASE]
TYPE = mysql
HOSTNAME = 127.0.0.1
DATABASE = your_database
USERNAME = your_username
PASSWORD = your_secure_password
HOSTPORT = 3306
CHARSET = utf8mb4
PREFIX = bk_
[LANG]
default_lang = zh-cn
[ADMIN]
ADMIN_ROUTE_PREFIX = sysman
环境变量说明
生产环境自动生效的安全配置
当 APP_ENV = production 时,系统自动启用以下安全配置:
调试模式:关闭( APP_DEBUG = false)错误显示:隐藏详细错误信息( show_error_msg = false)Session Cookie:仅 HTTPS 传输( secure = true)普通 Cookie:仅 HTTPS 传输( secure = true)Cookie SameSite:Strict 模式(更强的 CSRF 防护)
5. 导入数据库
执行 database.sql 文件导入数据库表结构:
mysql -u your_username -p your_database < database.sql
6. 配置 Web 服务器
确保 Apache 或 Nginx 正确配置,指向 public/ 目录。
Apache 配置
确保启用 mod_rewrite,并配置 .htaccess 文件。
Nginx 配置
server {
listen 80;
server_name yourdomain.com;
root /path/to/public;
index index.php;
location / {
if (!-e $request_filename) {
rewrite ^(.*)$ /index.php/$1 last;
}
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
7. 访问后台
访问后台地址:http://yourdomain.com/sysman/login
默认账号(安装时设置):
用户名: admin密码: admin123
注意:后台路由前缀由 .env 文件中的 ADMIN.ADMIN_ROUTE_PREFIX 配置,默认为 sysman。
目录访问权限说明
命令行工具
# 清除缓存
php think clear
# 生成静态页面
php think html:build
# 查看路由列表
php think route:list
# 运行单元测试
php vendor/bin/phpunit
API 接口
文章相关
GET /api/article/recommend/:id- 获取推荐文章POST /api/article/like- 文章点赞GET /api/article/statistics- 获取文章统计数据
搜索
GET /api/search- 文章搜索
分类与标签
GET /api/category/all- 获取所有分类GET /api/tag/all- 获取所有标签
安全建议
安装后处理:删除或重命名 public/install.locked.php密码管理:定期修改后台密码,使用强密码 权限设置:最小化数据库用户权限 日志监控:定期检查日志文件,发现异常及时处理 备份数据:定期备份数据库和重要文件
常见问题
1. 安装页面打不开
检查 public/ 目录是否有 .htaccess 文件,确保 Apache 开启了 mod_rewrite。
2. 静态页面不更新
手动重建:在后台"系统设置"页面保存设置,或访问 /admin/html/rebuild 接口。
3. 图片上传失败
检查 public/static/ 目录是否有写权限,确认 PHP upload_max_filesize 设置。
4. 邮件发送失败
检查"系统设置"中的 SMTP 配置是否正确,确保服务器支持邮件发送。
5. 页面显示异常
清除缓存:运行 php think clear 命令清除运行时缓存。
开发说明
代码规范
严格类型声明:使用 declare(strict_types=1)注释规范:类、方法、关键代码均需添加详细注释 异常处理:统一使用异常处理器处理应用异常
扩展开发
新控制器继承对应基类( BaseAdmin或BaseController)使用服务类处理复杂业务逻辑 配置文件修改后需清除缓存
更新记录
2026-07-09 - 安全漏洞修复与上线配置
安全修复:
修复后台表格 templet 函数 XSS 漏洞(文章列表、用户列表、分类列表、标签列表、链接列表) 增强后端 XSS 过滤函数,使用 DOMDocument 白名单过滤危险标签和属性 修复用户模型密码重复加密问题 添加登录成功后重新生成 Session ID(防止会话固定攻击) 增强 CSRF 防护,全局 AJAX 请求自动携带 CSRF 令牌 添加安全 HTTP 响应头中间件(X-Frame-Options、X-XSS-Protection、X-Content-Type-Options、Referrer-Policy、Permissions-Policy) 清理页面注释中的敏感信息
配置优化:
数据库配置支持环境变量( .env文件分组格式)Session 和 Cookie 安全配置根据环境自动切换 生产环境自动开启 Secure Cookie 和 SameSite=Strict 更新 .env.example模板文件
404 页面功能:
添加 3 秒倒计时自动返回首页功能 同时支持手动点击"返回首页"按钮
2026-07-01 - 项目初始化
项目创建,基于 ThinkPHP 8.0 + PHP 8.4 实现文章管理、分类管理、标签管理、链接管理、用户管理等核心功能 实现静态页面生成、富文本编辑、搜索功能 实现基本的 CSRF 防护和账号锁定机制
感谢大家阅读,个人观点仅供参考,欢迎在评论区发表不同观点。