假设我正在开发一堆旨在嵌入任何网页的 JS 小部件(类似于 iGoogle、Pageflakes 小部件)。
客户端可以通过包含脚本标签来嵌入小部件:
<div id="widgetHost">
<script src="http://fantasticwidgets.net/awesomeWidget.js"></script>
<script src="http://fantasticwidgets.net/awesomeWidgetAgain.js"></script>
</div>
现在这些小部件依赖于公共库(让我们使用 jQuery、下划线和我自己的一些库 - 例如 myCommon.js)。
理想情况下,这是应该发生的:
- Widget 的 bootstraper js 先下载
- Widget 的引导程序 js 检查是否存在这些库文件及其所需版本(例如页面上是否加载了 jQuery v1.6.2,myCommon v1.1 等)
- 如果加载了其中任何一个,请不要请求这些文件,而仅下载缺少的脚本。
- 这些脚本然后调用一些网络服务,做一些魔术并在页面上呈现 HTML
关注:检查已加载的文件会引入脚本欺骗漏洞。恶意用户在加载后欺骗库,用于窃取敏感信息或做其他坏事。
解决方案:不要检查加载的库,总是再次发送它们。这仍然不是万无一失的,但至少让它变得更难了,因为他不得不再次恶搞。但是,这会导致带宽浪费和加载时间增加。
问题:是否可以检测加载的文件是否被篡改,最好是在客户端?还是必须包含服务器端解决方案?如果这很重要,我已经在服务器端运行了 ASP.Net。