在数据库中存储JavaScript是否可行?

7

我有一个关于 Web 应用的想法,用户可以提交 JavaScript 代码并分享给其他用户。我想知道最好的处理方式是什么?是否可以将 JavaScript 存储在数据库中,并在用户请求时提供服务呢?为了方便附加元数据到每个代码段(例如名称、用户评级等),对我来说数据库似乎是最自然的解决方案。我正在考虑在后端使用 Rails 和 MongoDB。


10
请大声朗读以下内容:“一个用户可以提交Javascript代码,然后该代码可以提供给其他用户使用。”哇,我觉得这是我近来听到的最糟糕的想法了。 - quantumSoup
3
@Aircule,起初我也这么认为,但我认为“ served up”可能意味着“被查看”。基本上,这是一些片段的数据库。 - nickf
实际上,我希望它是活动的Javascript。当然会有验证,但我希望它是从数据库中提供的有效的Javascript。 - lobati
1
我理解其中的风险。计划的重要部分是加入许多故障保护措施,进行多次同行评审,使用户对其负责。问题仍然存在:这可行吗?如何着手实施? - lobati
1
  1. 像任何其他用户输入一样获取脚本。
  2. 将脚本像任何其他用户输入一样存储在数据库中。
  3. 像任何其他数据一样从数据库获取脚本,并在<script>标签之间“echo”它。
  4. 享受崩溃浏览器和XSS攻击。 :)
- deceze
显示剩余3条评论
3个回答

7

Javascript是一串文本。数据库可以存储文本字符串。因此,数据库可以存储Javascript。

除非你有某些我所遗漏的具体想法,我完全同意@Aircule的观点。

哇,我觉得我很久没有见过比这更糟糕的想法了。


我认为OP的意思是让其他用户查看,而不是执行。就像codepaste.net一样。 - Rex M
@Rex 如果是这样的话,这确实不是一个坏主意。那么这只是之前已经做过了。 :) - deceze
1
在像CMS这样的共享开发场景中,只要您将上传系统限制为可信用户/开发人员,这也是有意义的。 - Arek Bal

4

是的,看起来你已经掌握了所需的内容。只要小心不要执行任意代码-否则你可能会进入一个 XSS 的世界。

除非你每分钟都会获得数百万的点击量,否则任何数据库或框架都可以胜任。


4
强烈建议你了解XSS和CSRF。 (不要介意我自己的宣传,我在这里写了一个高级概述)。即使你积极地防范这些问题,防止这些问题也很困难,清理js将是一场绝对的噩梦。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接