onenav icon indicating copy to clipboard operation
onenav copied to clipboard

建议增强后台登陆的安全性

Open fyczx opened this issue 3 months ago • 2 comments

后台登陆既无时间限制也没有次数限制,可以利用脚本进行无限制登陆试错。

fyczx avatar Sep 18 '25 09:09 fyczx

以下是把项目喂给ai给出的建议:

根据项目结构和常见的 PHP 应用安全实践,以下是一些潜在的风险点和加固建议:

1. 数据库安全

  • 风险: SQLite 数据库文件 (db/onenav.simple.db3) 位于 Web 服务器的根目录下。如果 Web 服务器配置不当(例如,没有禁止对 .db3 文件的直接访问),攻击者可能直接下载整个数据库,导致所有书签和用户信息泄露。

  • 建议:

    1. 移动数据库目录: 将 db 目录移动到 Web 根目录之外,使其无法通过 URL 直接访问。然后在 config.php 中更新数据库文件路径。
    2. 访问控制: 如果无法移动目录,请通过 Web 服务器配置(如 Nginx 的 location 或 Apache 的 .htaccess 文件)禁止对 .db.db3 等数据库文件的直接访问。

    Apache .htaccess 示例 (放置于 db 目录下):

    # filepath: db/.htaccess
    <Files ~ "\.db3?$">
        Order allow,deny
        Deny from all
    </Files>
    

2. 跨站脚本攻击 (XSS)

  • 风险: 用户输入的书签标题、URL、描述等数据,如果在前端页面上显示时没有经过严格的 HTML 转义,攻击者可以注入恶意的 JavaScript 代码。当其他用户(包括管理员)浏览这些书签时,恶意脚本会执行,可能导致账户被盗用或浏览器被劫持。
  • 建议:
    • 在所有将数据显示到模板(templates 目录下的文件)的地方,都使用 htmlspecialchars() 函数进行转义。
    • 示例: 在模板文件中,将 <?php echo $variable; ?> 修改为 <?php echo htmlspecialchars($variable, ENT_QUOTES, 'UTF-8'); ?>

3. 跨站请求伪造 (CSRF)

  • 风险: 应用中所有执行状态更改的操作(如添加、修改、删除书签或用户设置)的表单,如果没有 CSRF 令牌保护,可能会被攻击。攻击者可以诱导已登录的管理员点击一个恶意链接,在管理员不知情的情况下执行非预期的操作。
  • 建议:
    1. 为每个用户会话生成一个随机的 CSRF 令牌。
    2. 在所有执行敏感操作的表单中,添加一个包含此令牌的隐藏字段。
    3. 在服务器端处理表单提交时,验证该令牌是否有效。

4. 配置文件泄露

  • 风险: 项目指导用户将 config.simple.php 复制为 config.php。如果用户不小心将 config.php 提交到公共代码仓库,或者服务器配置错误导致 PHP 文件以纯文本形式显示,会泄露数据库凭据和后台密码等敏感信息。
  • 建议:
    • 确保 .gitignore 文件中包含了 config.php,防止其被意外提交。
    • 定期审查服务器配置,确保 PHP 文件不会被当作文本文件提供给客户端。

5. 密码存储

  • 风险: 需要检查后台用户的密码是如何存储在数据库中的。如果使用了过时或不安全的哈希算法(如 MD5),密码将很容易被破解。
  • 建议:
    • 应使用 PHP 内置的 password_hash() 函数来创建密码哈希,并使用 password_verify() 函数来验证密码。这套函数使用了当前推荐的强哈希算法,并自动处理了加盐(salt)。

总结

OneNav 是一个功能简洁的个人书签管理器,其安全风险主要集中在常见的 Web 漏洞上。对于个人自用场景,风险相对可控。但若部署在公共服务器上或多人使用,强烈建议进行以下安全加固:

  1. 首要任务: 阻止对数据库文件的直接 Web 访问。
  2. 全面排查: 对所有输出到页面的用户数据进行 htmlspecialchars() 转义,防止 XSS。
  3. 增强防护: 为所有修改数据的表单添加 CSRF 令牌保护。
  4. 代码审计: 确认密码存储使用了 password_hash()

通过实施以上措施,可以显著提升 OneNav 项目的安全性。

fyczx avatar Sep 19 '25 10:09 fyczx

后台登陆既无时间限制也没有次数限制,可以利用脚本进行无限制登陆试错。

感谢关注,下个版本会加强登录验证。

helloxz avatar Sep 22 '25 00:09 helloxz