#> RESTKHZ _

休止千鹤 | 我依旧是一名平凡的学生

轻量博客系统:Ugly-PHP-Blog

  休止千鹤  |    10/01/2021

Ugly-PHP-Blog

(本文就是Github README.md)
Ugly-PHP-Blog

简介

也叫作UPB,这是我自己写的博客系统,也正运行于我的服务器之上,域名之下.

RESTKHZ | 休止千鹤

麻雀虽小,五脏俱全.

设计目标是轻量,简单,安全的php博客系统.

Markdown编辑, 文章分类管理, 支持评论, 计数器, 单用户, 具有简单SEO功能.

你可以克隆下来玩玩,看看怎么写的,目前功能有些粗糙,你未必会喜欢.(如果你有兴趣可以直接翻到 安装)

目前版本定在0.8,可能长期会在0.9.999

欢迎各位提出建议指正

如果能有 20 stars 我马上加班加点在能力范围之内添加功能修(写)BUG!

开发基于自写的玩具:Ugly-PHP-Framework.毕竟自己写的框架不做出一些东西是没有价值的.(尽管做出的东西价值也不大)

特性

Markdown文章编辑

我还是很喜欢Markdown写作的. 相信很多人也是. 有时候我会从一些Markdown笔记里直接复制笔记发出来,挺方便.(感谢Editor.md)后台写作的时候会自动存入localstorage备份防止丢失.

文章可以在首页,分类中隐藏.也可以设置拒绝访问.

评论功能

评论功能并非第三方提供. 如果是管理员的回复,会带有一个标记. 总体风格模仿Wordpress.简单的引用功能.

后台可以删除评论,但是目前没做审核功能是个缺陷. 防Spam方面我是用JS玩了一个小把戏,因为很多spam bot没有JS解析,所以加了一个简单的JS渲染了一个隐藏表单,后端会进行检查是否渲染判断是否是bot.

一定的SEO,LaTeX支持,简单的基于Session计数

SEO还是有一定重要性的,网站动态生成sitemap,也可以自己手写meta description.简单的路由让博客站极为扁平.keyword不太重要,不急,以后可以慢慢做个Tag当keyword. 网站使用Session计数,过滤了一部分的爬虫UA. 真的要统计还是用第三方平台更靠谱一些. 至于Latex用的MathJax,这个优点有点牵强,任何网站都可以轻松的自己加自己配置.

轻小

因为穷,租不起好的服务器,所以数据库使用了Sqlite.对于512M的内存绰绰有余.Sqlite不需要占用太大内存,我的博客站服务器没跑什么东西,内存占用日常80MB左右浮动,我相信256M的机器也能带的动这个博客系统. 另一方面, 博客站流量并不太大,数据量小的时候不同数据库性能其实没有明显差距.反而装Mysql在512M的机器上有时候会触发OOM, 租贵了没访客也浪费. 什么?小钱你不在乎?nevermind….

因为Ugly-PHP-Framework的设计,模型层仅使用PDO对象,不care是什么数据库,而对象的初始化封装在一个文件里,真的未来万一哪天做大了也可以换mysql.

UPB安全吗?

我只能说比较安全.我不能做出承诺,如果你了解信息安全,没有人能承诺100%的绝对安全.

  • SQLi: 框架使用pdo,几乎完全进行了预处理.就算是访客统计pid没有pdo,也强制把它转换成int进行消毒. 自己测试的时候没有发现SQL注入.
  • XSS: 前台评论交互没有发现XSS, 但是后台因为一些需要标签和特殊字符的问题,后台存在潜在XSS
  • 上传漏洞: 至于图片上传完全交给第三方图床.
  • 密码学: 密码使用Bcrypt进行Hash,即便你的备份被人偷了,密码hash也不容易被还原.
  • 数据安全: 后台有数据库备份功能, 用不用那真不是我的事了.
  • 危险函数: 没有使用一切命令执行函数.
  • 文件包含: 之前一个版本可能有潜在的文件包含问题,但是路径重写对攻击造成了阻碍. 无论如何,我在路由控制器周围还是移除了: ./和\0

缺陷

  1. 学了两个星期Vue.js做的后台, 非专业开发, 就那样吧.
  2. Categories管理不完善
  3. 轻量这点和Hexo,Ghost没有可比性.
  4. 你克隆下来的,Twig模板里页底依旧是我的信息,这边是写死的.目前你得自己动手改模板.
  5. 没有在windows平台下测试过,已知的,后台的系统负载在windows平台下肯定不会正常显示.
  6. 没有安装脚本,未来在我认为完成度足够的时候会加上.
  7. 没有生态.

未来

会缓慢更新的. 只要我自己网站没有放弃. 我这个域名下的博客诞生于2016年, 未来应该还会继续下去.

会优先完善基础功能.

安装试用

因为开发测试还在进行,所以并不打算在现阶段制作安装脚本,所以需要手动配置

另外后台管理项目(ugly-ap)由于使用Vue.js, ajax需要手动指定api域名,需要手动编译,并非开箱即用.

你应该先在环境中布置php环境, php尽可能安装7.x版本. 安装并且打开扩展:pdo,xml

系统记得装上sqlite3

目录结构:

  • ugpf 核心文件
  • data 数据库文件,sqlite.db,旁边的sql文件是数据库结构
  • public 这个目录是网站根目录,安全起见,必须是这个.

首先,你需要进入data目录编辑数据库sqlite.db,进入users表,name字段是显示名称,user是登录名称.

密码现在是空的,你需要自己生成Bcrypt hash.你可以打开终端如此操作,<passwod>是你的密码:

php -r 'echo password_hash("<password>",PASSWORD_BCRYPT);'

你会获得一个hash,将它复制出来,现在在终端输入sqlite3 ./sqlite.db导入数据库中:

$> sqlite3 ./sqlite.db
SQLite version 3.33.0 2020-08-14 13:23:32
Enter ".help" for usage hints.
sqlite>

输入SQL语句,<hash>是你的密码哈希:

UPDATE users SET password = '<hash>' WHERE id = 1;

然后你就可以把文档根指向public,启动web服务.如果只是本地测试的话,你也可以cd去public目录使用php内置web服务看看php -S 127.0.0.1:8000

如果可以访问,功能正常,那么一切都好.

接下来你可以前去./ugpf/view中修改html格式模板,DIY你自己的博客风格.


Views:

 Comments


Hu3:

Hi, Your blog doesn't seem to have an RSS feed? I sincerely hope you can add it and I will subscribe to your blog in RSS reader. If you add it, please let me know, I'd appreciate it ヽ(✿゚▽゚)ノ

 Reply