bcjd.net front page

caesar 6ee52dc2d1 docs: update README with comprehensive project documentation 2 mesiacov pred
public 6ee52dc2d1 docs: update README with comprehensive project documentation 2 mesiacov pred
src 6ee52dc2d1 docs: update README with comprehensive project documentation 2 mesiacov pred
.htaccess 6ee52dc2d1 docs: update README with comprehensive project documentation 2 mesiacov pred
LICENSE af81380dc2 Initial commit 2 mesiacov pred
README.md 6ee52dc2d1 docs: update README with comprehensive project documentation 2 mesiacov pred
config.php 6ee52dc2d1 docs: update README with comprehensive project documentation 2 mesiacov pred
db_init.php 6ee52dc2d1 docs: update README with comprehensive project documentation 2 mesiacov pred
init.php 6ee52dc2d1 docs: update README with comprehensive project documentation 2 mesiacov pred

README.md

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. 克隆项目并配置

git clone https://github.com/你的用户名/bcjd-html.git /var/www/html
# 或上传至服务器后解压

项目根目录不应作为 Web 入口。必须将 public/ 目录设为服务器 DocumentRoot。

2. 配置 DocumentRoot

编辑 Apache 站点配置(如 /etc/apache2/sites-available/bcjd.conf):

<VirtualHost *:80>
    ServerName bcjd.net
    DocumentRoot /var/www/html/bcjd-html/public

    <Directory /var/www/html/bcjd-html/public>
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>

或者使用符号链接:

# ln -s /var/www/html/bcjd-html/public /var/www/html/你的Web目录

3. 配置数据库

编辑 config.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 根目录之外,无法直接访问