有朋自远方来,不亦乐乎。
纯代码避免WordPress管理员登录用户名被暴露(完美版/全网首发)
原创 橘子书  16 Nov/03 1.87K A+

昨天匆忙写了一篇《纯代码避免WordPress管理员登录》,然后睡前突然想了想,原来针对这个漏洞还有不少的方案可以实现。

说一下之前我分享方法的不足:

1.Wordpress程序这么多年了,它们的服务团队不可能没注意到comment_class的问题,所以我觉得能不动它就别去改动;

2.我用这个方法在自己的自留地跟龙砚庭博客测试了一下,自留地妥妥没问题,龙砚庭博客却感觉加载缓慢了很多,头像等图片的加载变得十分缓慢;(事后发现,压根是因为avater头像加载问题,一脸鄙视自己!)

综上得知,改动有风险,修改需谨慎。

然后为了解决这个问题,我想了好几个办法,以下简单说一下:

1.重新定义get_comment_class函数(失败)

最开始,我的想法是能不能重新定义这个函数,于是将代码扒下来,修改为用户ID输出扔到functions后,发现被警告不能重复声明,然后将函数名自定义,重新测试后得到的结果:不起作用。

2.移除与增加comment_class的class(有bug)

既然重新定义函数行不通,于是我又想到了能不能给comment_class新增赋予一个class值,再将原来comment_class里面的comment-author-给过滤移除掉。

结果行得通,妥妥没问题,不过发现有一个明显的问题,那就是depth这个class值无法自动判断输出(原因应该是被过滤掉了,导致无法识别它的后缀值)。

3.巧用判断函数遮掩comment_class(未知)

综上,我是失败而归。但不甘就此放弃,于是想到:既然不能根治,那么就干脆给个管理员【类似if (is_admin())的判断句】可见得了,这样别人就看不到啦。

测试的结果自然是成功了,不过因为不知道class对于SEO等是否有影响,所以我没打算采用。

4.替换comment_class的指定输出(完美解决,并附上代码)

最后嘛,睡前想到了一种可以‘瞒天过海’的取巧手段:众所周知,我们博客运行到一定阶段,有些博客不仅换主题、还会进行博客改版,而博客改版自然会涉及到新旧信息的替换。有些人采取开刀数据库,有些人借用functions函数文件遮掩替换。

所以我的思路也就是来源:批量替换文章内容的文本信息。

将以下代码扔到functions.php函数文件里面,即可完美解决因为comment_class导致管理员登录名泄漏的漏洞:

//替换comment_class暴露的登录名为指定输出值——by 龙砚庭博客(http://loomob.com/)
function lyt_comment_class($lyt){  
    $replace = array(  
        'comment-author-你的真实登录名' => 'comment-author-新的输出名',  
    );  
    $lyt = str_replace(array_keys($replace), $replace, $lyt);  
    return $lyt;  
}    
add_filter('comment_class', 'lyt_comment_class');  

切记将代码里面,该修改的代码修改好(实在不懂怎么修改,就自行审查元素,查看自己博客输出的comment-author-值)。

总结:

这个方案最好的作用就是不会破坏Wordpress结构,也不用担心因为Wordpress版本更新而再次手动去修改任何文件,更不用担心其他主题无法使用教程代码。

它既顺从了comment_class的规则,又满足了我们的需求,可以说是目前最完美的处理手段。

另外,Wordpress是一个越折腾越精通的过程,希望更多的人能够分享更多实用的教程出来,这样人才能更加进步!

阅读全文

该文章还没有任何评论,你来说两句吧.

发表评论

莫慌,小狮子正在努力加载评论...