关于Dataviewjs脚本使用上的拿来主义与安全性的一些看法

最近我周围的很多人也接触了obsidian,且折服于dataview的功能强大
但是却又不愿意认真研就语法,选择拿来就用或者干脆请人编写
我这里想要谈论的这个话题正是想讨论一下代码拿来主义的不安全性,如下:
DVjs很强,可以完成绝大部分的js操作
但有一个显而易见的问题,它可以进行危险的代码注入
因此复制使用不明来历的代码的时候一定要小心
最好经过检查后再进行粘贴渲染,否则安全性堪忧
比如如下代码:
!!(警告:warning:注释内内容请自行衡量后,再取消注释,不予负责)!!
如果取消注释后不知道如何处理:

  • 解决方案1:在系统自带的资源管理器内删除插入该段代码段的md文件,重新启动OB即可
  • 解决方案2:在第三方编辑器内打开插入该代码段的md文件,重新启动OB即可
dv.paragraph('# <center>这是一段注入示例,请不要害怕</center>\n<span>渲染这段代码后,OB内所有页面的 [ p>span ] 标签后将缀上特殊文字,此时,==进入源码模式,删除这段代码并重启OB==,即可解决\n# <center>如果惊吓到您,万分抱歉!</center>');
var ipck = document.createElement('style');
ipck.type = 'text/css';
ipck.innerText = 'p>span::after {content: "比如这样的CSS注入,或许这样看起来无害,但既然可以进行CSS注入,自然可以进行其他类别的注入攻击";background-color: yellow;color: red;font-weight: bold;}';
//除非确定可以解决,请不要轻易尝试请不要轻易尝试↓↓↓↓
//请不要轻易尝试↓↓↓↓
//如果您觉得危害不够的话,可以尝试将下一行注释取消,我想画面大概更有震撼性
//ipck.innerText = 'div::after {content: "比如这样的CSS注入,或许这样看起来无害,但既然可以进行CSS注入,自然可以进行其他类别的注入攻击";background-color: yellow;color: red;font-weight: bold;}';
//除非确定可以解决,请不要轻易尝试↑↑↑↑
//除非确定可以解决,请不要轻易尝试,请不要轻易尝试↑↑↑↑
var head = document.getElementsByTagName('head')[0];
head.appendChild(ipck);
4 个赞

是的,任何运行的代码都可能存在恶意行为。但在论坛中,我们鼓励分享自用的安全的代码。目前还尚未看到有恶意分享代码的示例。对于分享恶意代码的用户和账号,我相信会它们会被惩处。这样的经验和事例在github中应该已经很多可供参考。

1 个赞

不过说实话,我其实在担心我这一段简单的css注入示例可能会给某些用户带来不必要的惊吓0.0

所以,一般还是看准和信任某个作者吧。毕竟成名的作者,不会恶意去做一些事情(成本太高),也靠社区成员的维护。

我自己维护着一个dataview的代码块的文章,就是分享我用了,好用的代码块。算是我先尝试没有BUG,明文发出后,大家可以审视代码,没有人反对,就代表目前代码没有发现恶意。

2 个赞

对的,这样就很棒很安全了

地址是什么,我想去学习,谢谢