phpBB3.1和3.2
闲逛看到一个帖子, phpBB3的论坛经常被机器人注册攻击, 要找人做拦截. 出于兴趣, 联系了一下.
论坛是一个做健康养老调查的社会机构的, 版本3.1, 十年前我还在更新phpbb中文包的时候, 版本3.0.8吧, 现在最新的是3.2.x, 下来看了一下代码, 代码结构没变, 还是那么大咧咧乱哄哄, 功能上变化还是挺大的, 原先饱受诟病的的MOD改为extension了, 像joomla那样, 安装扩展可以不用修改论坛代码, 这样版本升级会容易很多, 不需要再把所有安装了的MOD都再patch一遍(或者按升级的patch, 把论坛自己patch一遍).
这个论坛被机器人攻击的原因, 还是因为使用的是图形验证码, 这个对于现在的机器人来讲, 识别率已经很高了, 另外他们自己添加的email地址有效性验证没有加入到最终的注册提交环节, 对于机器人来说那就是畅通无阻了.
遇到的一个问题是对style里面template的修改一直无法生效, 清空cache里面的文件也没用, 后来发现是一个后台配置在控制的, 在load confirguration里面有recompile stable template的选项, 这个设置成enabled就好了. 这选项当年肯定是用过的, 时间太长, 完全不记得了 :(
升级至phpBB3.2的一些记录
首先是 install模块
执行URL和以前有很大变化, 不支持传统的 ?a=b 这样的参数格式了, 必须要用url rewrite的方式, 在phpBB3.2安装包的docs目录下, 有一个供参考的nginx配置文件 nginx.sample.conf , 但是这个只适用于安装在域名根目录下的phpBB, 如果你的phpBB是安装在子目录下, 那需要自己修改一下, 下面是我使用的conf供参考(里面混杂了两种wwwroot, 是因为我的php-fpm是从docker中启动的, 两边看到的wwwroot路径不一样.
#user nobody; worker_processes 1; error_log logs/error.log; pid logs/nginx.pid; events { worker_connections 1024; } http { include mime.types; index index.html index.htm index.php; default_type application/octet-stream; sendfile on; tcp_nopush on; keepalive_timeout 65; gzip on; server { listen 80; server_name localhost; #access_log logs/host.access.log main; location ~ \.php$ { root /home/milton/WorkPHP/wwwroot; #fastcgi_pass 127.0.0.1:9000; fastcgi_pass 172.17.0.2:9000; fastcgi_index index.php; #fastcgi_param SCRIPT_FILENAME /$document_root$fastcgi_script_name; fastcgi_param SCRIPT_FILENAME /var/www/html$fastcgi_script_name; include fastcgi_params; } location / { root /home/milton/WorkPHP/wwwroot; index index.html index.htm index.php; } # Correctly pass scripts for installer location /phpbb3.2/install/ { root /home/milton/WorkPHP/wwwroot; index index.html index.php; # phpBB uses index.htm try_files $uri $uri/ @rewrite_installapp; # Pass the php scripts to fastcgi server specified in upstream declaration. location ~ \.php(/|$) { # Unmodified fastcgi_params from nginx distribution. include fastcgi_params; # Necessary for php. fastcgi_split_path_info ^(.+\.php)(/.*)$; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_param SCRIPT_FILENAME /var/www/html$fastcgi_script_name; fastcgi_param DOCUMENT_ROOT /var/www/html; try_files $uri $uri/ /phpbb3.2/install/app.php$is_args$args; fastcgi_pass 172.17.0.2:9000; } } location @rewrite_installapp { rewrite ^/phpbb3.2/(.*)$ /phpbb3.2/install/app.php/$1 last; } } }
在执行 app.php/update 之后, 按提示进行升级.
Cron Task 和 Text Reparser
参考 https://www.phpbb.com/support/docs/en/3.2/kb/article/phpbb-32%2B-text-reparser/
在phpBB3.2之后, 使用了新的bbcode格式, 旧的内容中的bbcode并不会在升级时一并转换成新格式, 而是在升级之后的日常运行中, 通过phpBB自身的cron任务来进行Text Reparse. 如果你的文章数量很多, 那么这个进程是很漫长的, 在期间如果有用户访问这些旧格式的帖子, 就会抛出 bbcode.php on line 121 错误. 如果想手动加快这个过程, 可以通过命令行执行 bin/phpbbcli.php 来进行
$ php bin/phpbbcli.php reparser:reparse --ansi
.这个命令会将所有包含bbcode的内容: post text, user signature, poll title, poll option, pm text, forum description都转换一遍. 15K个帖子的转换时间大概是4分钟, 速度还可以.