# BCJD 导航 bcjd.net 服务导航页面(PHP + MariaDB 版) ## 功能特性 - **链接分类**:链接按「应用」「运维/管理」「站点」等分组展示 - **权限控制**:支持公开/私有两种权限,私有链接需要登录后才能看到 - **单用户密码登录**:仅需输入密码,无需用户名(基于 PHP Session + bcrypt) - **链接管理**:支持在管理面板中自行添加、编辑、删除链接 - **暗色/浅色主题**:跟随系统或手动切换 - **实时搜索**:按 `/` 聚焦搜索框,回车打开第一个结果 ## 部署步骤 ### 0. 服务器要求 - PHP 8.0+ - MariaDB 10.3+ / MySQL 5.7+ - Apache(mod_rewrite + mod_headers) - PDO 扩展(php-mysql) ### 1. 克隆项目并配置 ```bash git clone https://github.com/你的用户名/bcjd-html.git /var/www/html # 或上传至服务器后解压 ``` 项目根目录不应作为 Web 入口。**必须将 `public/` 目录设为服务器 DocumentRoot。** ### 2. 配置 DocumentRoot 编辑 Apache 站点配置(如 `/etc/apache2/sites-available/bcjd.conf`): ```apache ServerName bcjd.net DocumentRoot /var/www/html/bcjd-html/public AllowOverride All Require all granted ``` 或者使用符号链接: ```bash # ln -s /var/www/html/bcjd-html/public /var/www/html/你的Web目录 ``` ### 3. 配置数据库 编辑 [`config.php`](config.php),修改以下参数: ```php define('DB_HOST', 'localhost'); define('DB_NAME', 'bcjd_nav'); define('DB_USER', '你的数据库用户名'); define('DB_PASS', '你的数据库密码'); ``` ### 4. 初始化数据库 在浏览器访问 `http://你的域名/db_init.php` 脚本会自动创建数据库和表结构,并导入默认链接数据。 **⚠️ 初始化完成后,请删除或重命名 `db_init.php` 文件以保证安全。** **⚠️ `.htaccess` 已自动禁止通过 Web 访问 `db_init.php`,如需使用请临时修改规则。** ### 5. 修改默认密码 默认密码为 `bcjd2025`。 登录后访问 `http://你的域名/admin.php` →「修改密码」选项卡修改。 ## 项目结构 ``` bcjd-html/ # 项目根目录(不对外暴露) ├── .htaccess # 顶层安全防护(禁止访问敏感文件/目录) ├── config.php # 数据库 & 密码配置 ├── db_init.php # 数据库初始化脚本(用完删除) ├── init.php # 系统引导(自动加载 + 安全头 + 时区) ├── src/ # OOP 类库(命名空间:BCJD\) │ ├── AutoLoader.php # PSR-4 自动加载器 │ ├── Auth.php # 认证类(CSRF Token + Session 安全 + bcrypt) │ ├── Database.php # PDO 单例管理器(预处理语句 + 严格模式) │ ├── LinkManager.php # 链接 CRUD(参数绑定 + XSS 过滤) │ ├── Response.php # 统一 JSON 响应 │ └── Validator.php # 输入验证净化 ├── public/ # 🎯 Web 入口(服务器 DocumentRoot 指向此目录) │ ├── .htaccess # Apache 安全规则(安全头 + 防目录浏览) │ ├── index.php # 前台首页 │ ├── admin.php # 管理面板(需登录) │ └── api.php # RESTful API 接口 ├── README.md └── LICENSE ``` ## 权限说明 在管理面板添加/编辑链接时,可以设置「私有链接」开关: - **公开**(默认):所有访客可见 - **私有**:仅在登录后可见 登录按钮在首页右上角,点击后弹出密码输入框。 ## 安全架构 | 防护维度 | 实现方式 | |---------|---------| | **SQL 注入** | 全部 PDO 预处理语句 + 参数绑定 | | **XSS 攻击** | htmlspecialchars(ENT_QUOTES) + SVG 白名单过滤 | | **CSRF 跨站请求伪造** | 64 位随机 Token + hash_equals 验证 | | **Session 劫持** | 登录后 regenerate_id + 30 分钟超时 + HttpOnly | | **密码暴力破解** | bcrypt cost=12 + 500ms 登录延迟 | | **信息泄露** | PDO 异常记录日志,用户仅见通用错误提示 | | **HTTP 安全头** | X-Frame-Options / X-Content-Type-Options / X-XSS-Protection / Referrer-Policy | | **目录隔离** | 敏感代码在 Web 根目录之外,无法直接访问 |