不用框架、只用 PDO 和一点点路由,也能把一个博客跑起来;难的是那些不起眼的细节。

坑一:把用户输入直接拼进 SQL

最典型的错误。解决方式只有一个:所有查询都用预处理语句,包括 LIKE 查询的参数。

坑二:忘记转义输出

数据库里存的富文本,直接 echo 出去,就等于把 XSS 的钥匙交给了访客。稳妥的做法是:入库前不做 HTML 处理,出库时统一转义;需要排版就用受控的标记语法渲染。

坑三:CSRF 只做了一半

只在登录表单里加 token 是不够的,发布文章、删除评论、改密码,每一个写操作都要校验。

```php
if (!hash_equals($_SESSION['csrf_token'], $_POST['_token'] ?? '')) {
http_response_code(419);
exit('表单已过期');
}
```

坑四:上传只看扩展名

cover.php.jpg 这种文件名能骗过很多实现。用 getimagesize() 判断真实的 MIME 类型,再决定存不存。

坑五:忘记给列表页分页

数据少的时候一切正常,写到第 200 篇时首页开始变慢。分页要一开始就做,LIMIT ... OFFSET 配合索引足够用了。

小结

  1. 预处理语句
  2. 输出转义
  3. 全站 CSRF
  4. 校验真实文件类型
  5. 一开始就分页

这五件事做到,一个个人博客基本就站得住了。