多说评论框的一些事

用社会化评论系统只是因为方便,每次输入姓名账号实在繁琐,cookies一清理全部要重写,最受不了的是有些板子不带autocomplete="off",点一下名字出来一堆东西。

这类产品有好几个,其中做的最好的就是多说,可惜多说没有 Typecho 的插件,只能靠通用代码。官方文档中提供了不少调用代码,以供获取最新评论、访客等信息,甚至可以动态加载评论框。

优点说话了,下面当然要开始说说蛋疼的地方。当一个文章发布完成后,是不会显示评论数的,需要点进去加载一次评论框,多说的服务器才会生成所需的数据。而这个过程谁都可以进行,只要查看到别人的 short_name 就可以干扰他人的数据。

年初的时候和多说的小武讨论过这个问题,记不得说了啥最后不了了之了,想想也没什么大碍。直到前几天树大触发现了我的某个评论提醒地址是127.0.0.1,突然我就明白了。在第一次加载多说评论框的时候会向服务器提交文章的url,用于以后的提醒,所以被人优先提交了对应文章id的数据时就要蛋疼了。

通俗的说,比如我看树大触不爽(怎么敢!),于是我查看树大触的代码,找到他的多说评论框ID。然后搞个多说评论,以他的ID提交数据,优先占用树大触没有提交到的文章ID。等树大触下次写文章的时候,发现提醒回复的时候跳到了我的网站,大快人心!(……)

其实只要多说有来源验证,一切就好办了。年初的时候我也本地测试过别家的评论系统,记得denglu就无法在本地使用,因为有地址验证。在目前多说没有改动的情况下,如果被恶意提交了数据,只能后台导出数据,修改后再导入。此方法对于少量的优先恶意提交数据还算有效,如果数据量大了,真的太难改了。多说的json文件全部被压缩在一行,加上中间的各种分割符号,批量改真的很不方便。

另外补充一点:哪怕你删掉了评论,也无法删除文章ID对应的评论框地址数据。

后续

和多说官方反应了这个问题,得知是默认的通用代码没有填写 data-url 参数的缘故,按照开发文档修改了模板,载入评论框的时候会自动向服务器提交数据,修正url以最后一次载入为准。

此举对于上面提到的问题可以进行一定的弥补,但无法完全禁止。假设树大触(……)的评论页面在被恶意提交后没有被载入,而我在这里一直刷新我的伪造页面,树大触的访客收到的回复提醒仍旧是我的地址,除非树大触的页面永远是最后一次被加载。

修复

多说的获取代码中 Typecho 部分有一些问题,故进行了修改,已将以下版本提交至多说官方。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<div id="comments">
<?php if($this->allow('comment')): ?>
<!-- Duoshuo Comment BEGIN -->
    <div class="ds-thread" data-thread-key="<?php $this->cid(); ?>" data-title="<?php $this->title(); ?>" data-author-key="<?php $this->authorId(); ?>" data-url="<?php $this->permalink(); ?>"></div>
<script type="text/javascript">
var duoshuoQuery = {short_name:"多说ID"};
    (function() {
        var ds = document.createElement('script');
        ds.type = 'text/javascript';ds.async = true;
        ds.src = 'http://static.duoshuo.com/embed.js';
        ds.charset = 'UTF-8';
        (document.getElementsByTagName('head')[0]
        || document.getElementsByTagName('body')[0]).appendChild(ds);
    })();
    </script>
<!-- Duoshuo Comment END -->
<?php else: ?>
<h4><?php _e('评论已关闭'); ?></h4>
<?php endif; ?>
</div>

以上代码按照多说官网原版格式进行修改,调用参数格式与 Typecho 默认模板统一(我有细节强迫症),添加了 data-url 参数。可自己按照要求修改,默认使用也没有问题。

稍后发布的 BlueBox v1.2 将会针对这个问题进行修复。

评论

  1. 古镇灯饰
    古镇灯饰

    畅言也不错,现在要备案才能用。

    回复
  2. 青宜-吕生
    青宜-吕生

    回复
  3. C.
    C.

    回复
  4. 纤颖儿
    纤颖儿

    请问多说评论能调用Gravatars头像吗?

    回复
  5. 旁门闲话
    旁门闲话

    很好!

    回复
  6. 牛超不加V
    牛超不加V

    不错哦

    回复
  7. 卜卜口の
    卜卜口の

    不不,用了这货就已经输了 坚守不能

    回复
    1. banri
      banri

      typecho的自带评论有XSS……而且ajax我至今领悟不能(……

      回复
  8. banri
    banri

    我是因为太懒了才用多说,这样不用写评论页了。。。只要写一些CSS就行了

    回复
    1. De
      De

      貌似你的博客没有使用评论邮件回复提醒?

      回复
      1. banri
        banri

        QQ域名邮箱收不到,多说官方说在两个月内解决

        回复
        1. De
          De

          我没有用多说,也没法使用,想破脑袋了,都不知道怎么回事...

          回复
          1. banri
            banri

            多说官方提供的代码是错的,按照我的就可以用了……

            回复
            1. De
              De

              问题是我没有使用多说,我用的是原生的typecho评论+CommentToMail

              回复
              1. banri
                banri

                哦,多说官方解释了,是因为QQ域名邮箱之间互发会收不到
                你应该发送邮箱也是QQ域名邮箱

  9. De
    De

    曾经使用wordpress的时候使用过多说,后来转到typecho的时候多说不支持,所幸的是我现在的板子的评论样式我比较喜欢,就这样一直下来了,也懒得去搞了。

    回复
  10. 阿福
    阿福

    - -好吧,其实我不怎么喜欢多说。怎么说的,一个账号只能有一个名字,我X我那么多站。。

    回复
    1. banri
      banri

      你可以绑定不同的_(:3」∠)_ 微博QQ啥的 哈哈

      回复
      1. 阿福
        阿福

        所以我讨厌,我就那么几个QQ难道我有几十个站要申请几十个扣扣?

        回复
        1. banri
          banri

          你这是 - - 严重的精神分裂啊。。。

          回复
          1. 阿福
            阿福

            我X有可能- -我有角色扮演的倾向,据说我这种人很适合当演员。

            回复
            1. banri
              banri

              角色扮演,求图求真相,求cosplay...去当演员吧,很赚钱的!比折腾IT好多了。。。

              回复
              1. 阿福
                阿福

                是啊,天杀的黑。

              2. banri
                banri

                - - 看来我们这还不算黑,你们那里太黑了 _(:3」∠)_

              3. 阿福
                阿福

                你的电信好便宜。。。。我移动才月付30块4M- - 电信要1000 4M- -

              4. banri
                banri

                那还不错……比我们那的强……我们那平均一个月报修一次,最后受不了换了电信。移动399一年2M,电信600一年4M,还好

              5. 阿福
                阿福

                - -我现在就用移动的,稳定,就昨晚抽风。。

              6. banri
                banri

                我家以前用的移动 几乎天天抽风

              7. 阿福
                阿福

                - -移动宽带的服务器抽风了。泪奔中。。

              8. banri
                banri

                我貌似相对专一点(多说服务器终于抽好了,泪流

              9. 阿福
                阿福

                我X- -没图。好吧,就是玩游戏的时候喜欢把各种角色都玩一遍。

  11. 声仔thon
    声仔thon

    博主对多说研究很深入啊~哈哈!short_name直接就看到了的,我今天也有想,万一别人也用了会怎样,data-url我貌似也没写啊~

    现在直接用你这段代码可以吧?

    回复
    1. banri
      banri

      直接用是没问题的 -。-

      回复
      1. 声仔thon
        声仔thon

        我也加上了<?php $this->permalink(); ?>

        回复
        1. banri
          banri

          这样就好多啦~

          回复
  12. 软件小品
    软件小品

    我原来就多说,后来发现在把多说关闭后,原来的评论会错位,所以不用了

    回复
    1. banri
      banri

      WP的插件版也会有问题吗 _(:3」∠)_ 囧

      回复
  13. 旧岛
    旧岛

    很好,很有用~

    回复
    1. banri
      banri

      回复
  14. 树

    躺枪_(:з」∠)_

    回复
    1. banri
      banri

      树大触么么哒(。

      回复