Skip to content

Instantly share code, notes, and snippets.

@chzyer
Last active August 17, 2018 02:21
Show Gist options
  • Save chzyer/4508150 to your computer and use it in GitHub Desktop.
Save chzyer/4508150 to your computer and use it in GitHub Desktop.
防止垃圾留言的思路

应该很多人遇到过鸟文的垃圾评论吧~ 先说发垃圾留言的方法吧:

  1. 手动发送.自己手动到N个博客上发..顺便脚本精灵录制,下次就用脚本精灵自动做. 有效地解决方法是验证码!内容过滤,这两个不矛盾可以叠加起来.但是用户体验伤不起啊~~这里便不多说.而且WP对垃圾留言内容的检测还是有的
  2. 上网上下载发帖机(留言机),输入内容和网址s然后让程序自动发送.一般是通过直接POST到wp-comments-post.php,也可以自己写一个网页端(一般会写这个就不会干这种事啦~~),利用ajax实现 嗯~这就好办多了,除非他专门针对你网站定制一个自动留言软件,不然一般可以躲避90%的攻击(根据你用的方法的非主流程度)

本文主要讲得是应对第二种手法.. 简单来说,我们只需修改发表评论的机制,就可以 我是听说过有小墙这一说法的,原理是在提交的from里面添加一个空白的且不可见的文本框,听说机器是会填上所有空白的文本框的,检测到这个空白的文本框有内容就直接~杀! 不足:如果留言机没有天上所有空白的文本框这个机制(多少种类就不清楚了,没用过),无效.. 我自己也有几种思路:

  1. 修改wp-comments-post.php这个文件名字为其他,同时更新那些包含这个名字的其他文件,这个能摆脱那些所谓的针对WP的留言软件(应该有吧~)
  2. 服务器在检测到有评论的页面时,会生成一个token,存入session.并且放入form里面,让他和评论一起post到wp-comments-post.php,当wp-comments-post.php接受到post过来的内容时,检查session中是否存在这个token,然后吧session中得token和post过来的token进行比较.相同则过,不同则杀.
  3. 这是我现在主题的做法.在用户填好资料之后,自动把资料发送到后台并存为COOKIE,wp-comments-post.php中则改为不接受POST过来的姓名邮箱网站,改为从COOKIE中读取,如果读取不到则~而我保存COOKIE的触发点就在用户填写email后,发送email到后台查询用户名和网址后,顺便写入COOKIE中.这也是我采用这种方法的原因.而且我重写了wp-comments-post.php并改名字了.原来的wp-comments-post.php也被我删除.这个方法还是挺有用的.从换主题到现在倒是没有收到垃圾留言了..或者是他们没发了

呃...我只是简略的说明了一下思路,实际上我没写出来代码是XXX.但我觉得编程重在思想.思想有了,只需要再加一点语法知识就能做出来了.我想过做成插件.时间不足而已...

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment