生产环境中的源映射文件 - 安全吗?

79
我使用UglifyJS来压缩和混淆我的源代码,并使用Sentry在生产环境中报告错误。
为了以可读的方式从Sentry获取错误信息,我需要添加source-map。
在生产服务器上执行此操作是否安全,或者source-map文件只应存在于演示环境中? 有没有一种方法可以在生产环境中保护它们?

2
我不确定你所说的“安全”是指什么。源映射中是否有可能编码了敏感细节?无论代码是否被压缩,其安全性都是相同的。 - Peter Olson
4
普通用户通常不会深入挖掘源代码,而那些可能想要通过挖掘源代码来利用你的人,对于混淆并不会感到特别的阻碍。 - Peter Olson
5
程序员不希望别人查看他们的代码的主要原因是缺乏自信。为你所创建的东西感到自豪吧!正如@PeterOlson所说,普通用户不会深入研究,即使他们这样做了,他们也很容易理解 Spaghetti 的逻辑,比理解你的代码更容易。其他程序员将在几秒钟内解密您的代码... - giorgio
太好了,非常感谢你们两位。 - Ofer Velich
1
虽然我晚了几年参与这个讨论,但我想分享一篇我写的关于如何在生产环境中安全使用源映射的文章。我的例子是使用.NET Core,但同样的原则适用于任何平台: https://www.davidomid.com/using-production-source-maps-securely-in-aspnet-core - David Omid
显示剩余2条评论
2个回答

60

寻找可能的解决方案,如果有人没有特别使用Sentry,我看到了这篇博客文章(具有讽刺意味的是Sentry的一篇博客文章):

https://blog.sentry.io/2015/10/29/debuggable-javascript-with-source-maps.html

其中有一个有趣的想法:“私有源映射”。这意味着在某个不可通过互联网访问的地方(例如公司VPN)生成源映射,因此只有您或您的团队可以访问源映射文件。

引用该文章的“私有源映射”部分:

[...] 我们所有的示例都假定您的源映射是公开可用的,并从执行JavaScript代码的同一服务器提供。在这种情况下,任何开发人员都可以使用它们来获取您的原始源代码。

为了防止这种情况发生,您可以不提供公开可访问的sourceMappingURL,而是将您的源映射从仅对开发团队可访问的服务器上提供。例如,只能从公司VPN访问的服务器。

//# sourceMappingURL: http://company.intranet/app/static/app.min.js.map

当非团队成员打开开发人员工具访问您的应用程序时,他们将尝试下载此源映射,但会收到404(或403)HTTP错误,并且源映射将不会被应用。

对我来说似乎是个好主意!


1
另一个想法就是只使用身份验证,而不是依赖于指向不可公开访问的单独服务器的源映射URL。我在之前发布的一篇博客文章中介绍了这个解决方案,该文章涵盖了如何在生产环境中安全地使用源映射:https://www.davidomid.com/using-production-source-maps-securely-in-aspnet-core - David Omid

15
你的主要问题将是“用户拥有我的源代码是否合适?”通常情况下是可以的,因为用户可以解混淆它们。但是,如果你正在使用Sentry,实际上可以使用releases API来避免这个问题。你仍然需要生成构件,并设置URL(或者API可以处理的其他内容),但你不必将它们暴露在互联网上。

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