记录一次网站评论的外链处理

记录一次网站评论的外链处理

两种处理网站外链的常见方法以及本人修改网站评论插件以适配使用短链跳转外链的记录。
还有一些自己想说的

目前绝大部分的评论插件都会直接展示评论发布者站点的直接链接(如下图),这种方式通常没有问题,但有时会有恶意评论刷入违规站点链接(如广告站或反动网站),导致影响站点的可访问性,故这些外部链接必须被处理。

无论使用哪种解决方式,最终要达到的目的都是想办法让网站的链接不直接写入至 a 标签中,我自己尝试了两种解决方式。

1.通过 base64 编码域内跳转

这种方式没有任何数据库查询的占用,具体就是在前端呈现网站链接前,将网站链接进行 base64 编码并统一指向一个跳转页面(/go?base64=xxx),再由跳转页面解码 base64 并跳转(example.com)。

这种方式可以非常简单的实现我们想要的目的(即不直接呈现意向访问站点的链接至a标签中),但存在一个非常严重的问题,就是滥用风险,因 base64 并不是一种加密编码,故任何人都可以将自己的 url 编码并通过你的 go 页面完成跳转。

因为可控性较差,故我最终没有选择此方式。

2.短链接

短链接并不局限于用于网址缩短,如推特就是通过使用了 t.co 的短域避免了站点链接直接呈现在网页上。

就如下面的链接,点击后会先前往推特的可控网址(t.co/xxx),再由该地址跳转至实际网址。

这种方式有很多好处,比如可以比较精准的对外站链接访问量进行统计(当然我是比较排斥追踪器这个东西的,我的网站也没有用任何追踪器)。

坏处也很明显,短链接这个东西是需要进行数据库查询的,包括后端的一整套逻辑都需要随之修改,同时短网址这个东西如果被滥用的话也会比较严重,不过可控性相较于 base64 编码跳转更强一些。

接下来本文会就该方式讲解我本人的后端修改方法。

2.1.部署短网址服务

这一步算是最麻烦的了,个人建议有能力的最好用自己的域名部署,最好不要选那种公共的短网址服务,一是数据非自有化,后续修改的话会非常非常麻烦,第二就是访客的隐私问题没有办法保证。

我个人是用了 mongodb 提供的免费数据库 + vercel 部署的一个简单的服务

广告时间!!!!

各位可以看一看我做的基于 vercel 和 mongodb 的短网址服务,无需服务器即可部署。

搭建基于 Vercel 的短链接服务 - 芙樱竹的博客 (iling.uk)

还有就是域名的选择,能单独用一个一级域名最好,不想再买域名的也可以用个二级域名,比如 link.example.com 之类的,公用的短链接和私用的最好不要用同一个域名。

然后就是短链接的长度和格式,一般会采用10位大小写字母加数字的字符串组成随机部分,当然用 20、30 位的也有,不过太长了也没有必要,要注意的是随机部分最好不要使用特殊符号,兼容性会很差。

2.2 修改评论后端代码

我用的是 twikoo 作为评论插件,这个插件的代码后端还是蛮好改的,就是如果你不熟悉 JavaScript 的话需要一点时间理解异步逻辑。

(现在基本上所有的 serverless 都是 javascript 写的,当然如果你的插件不是基于 js 只需要按照自己的实际情况修改就好)

1.首先找到用户请求的入口

这个代码是通过 case 判断用户的请求 type 并将数据传至指定函数做处理,我们只需要顺藤摸瓜摸到这个函数头上就可以啦(按住 ctrl 点击函数名可以直接跳转到函数)。

2.搞清楚数据结构

twikoo 的代码中直接写出了数据结构,如果没写的可能需要自己 console.log 调试出来看一看

3.短链请求函数

一般的短链服务都会有 api 可供新增短链,我们需要新写一个函数用于获取链接的短链地址,这个地方最好还是用异步处理,可以防止线程栓塞,不过这次就先临时练练手,不写这么复杂了。

(还有这里我用了已经废弃的 request 库做了 http 请求,各位最好不要用这个库)

大概就是这样的一个函数

4.替换原链接

这个需要先判断一下用户有没有填写自己的网站地址,如果没有自然就不需要对链接进行转换,我这里直接用短链接替换掉了原链接,实际环境中并不建议大家这么做。

效果

经修改后,用户填写的网站 url 在后端自动转换为短链接并在前端 a 标签中展示

说好的人与人之间的信任呢?

首先要声明的是 该功能仅在评论功能中使用,友联页面未曾计划使用此功能

讲真我在做此功能时思考了很多,思考博客这种小众的交流圈真的有必要防来防去的吗,而如你所见,我最终得出的结果是:有必要。

我有以下几点理由:

1.小广告

2.主流趋势

目前国内外知名的网站(Twitter、Fackbook、知乎、CSDN)普遍使用不添加a标签或短链、跳转页跳转的方式跳转外站链接。

3.拒绝审核机制

我最先想到解决这些问题的方式是通过审核,先审核评论,通过后再展示评论,但如各位所见,我不希望我自己剥夺各位说话的权力,上图的几个审核中的标签都是我后期手动隐藏的小广告。

4.网站重权

这个是我最不想讲到的,却又是最根本的问题,网站重权是任何网站站长绕不开的问题,有些搜索引擎的排名规则非常反人类,如果你的网站中有过多位于黑名单中的网站链接,你的网站排名也会降低甚至被屏蔽。

这里的屏蔽不仅仅指被搜索引擎屏蔽,还指 GFW 屏蔽。

记录一次网站评论的外链处理

https://blog.muna.uk/archives/comments-external-links.html

Author

芙樱竹

Posted on

2023-03-11

Updated on

2024-07-31

Licensed under

Comments

若您使用我站的"评论"功能发表观点,则代表您已阅读并同意遵守 ICUA协议隐私政策
评论内容支持基本 Markdown 语法及部分 HTML 标签;为保证您和其他访客的隐私及安全,所有涉及如图片、视频或网页内嵌等外部资源引用的 HTML及Markdown 标签都会被自动删除,所有链接均会被转换为纯文本格式。