我需要允许来自我们网站的内容嵌入其他用户网站.该conent将是收费的所以我需要保持安全,但其中一个要求是订阅网站只需要将一些javascript放入他们的页面.
看起来保护我们内容的唯一方法是检查托管我们的javascript的页面的URL与订阅站点匹配.有没有其他方法可以做到这一点,因为我们不知道将访问订阅网站的客户端浏览器?
最好的方法是在页面加载时提供填充已知页面元素的javascript包含文件吗?我正在考虑使用jquery,因此include文件将首先在jquery中调用(检查它是否已经加载并使用某种命名空间保护),然后在页面加载时填充给定的元素.
我想尽可能包含一个样式表来设置元素的样式,但我不确定我是否可以将其与javascript一起加载.
这听起来像是一种合理的方法吗?还有什么我应该考虑的吗?
提前致谢,
麦克风
看起来保护我们内容的唯一方法是检查托管我们的javascript的页面的URL与订阅站点匹配.
啊,但在客户端或服务器端代码?
他们都有自己的缺点.使用服务器端代码是不可靠的,因为有些浏览器根本不会传递Referer
标题,如果你想阻止缓存保留脚本副本,阻止Referer-check发生,你必须服务于nocache或Vary: Referer
标头,会损害性能.
另一方面,通过返回的脚本中的客户端检查,您无法确定您正在运行的环境是否已被破坏.例如,如果您的包含脚本标记如下:
并且您的服务器端脚本被查找123
为使用域的客户的ID customersite.foo
,它可能会响应脚本:
if (location.host.slice(-16)==='customersite.foo') { // main body of script } else { alert('Sorry, this site is not licensed to include content from example.com'); }
这似乎很简单,除了包含站点可能已经替换String.prototype.slice
为始终返回的函数customersite.foo
.或者脚本体中使用的各种其他函数可能是可疑的.
包含来自另一个安全上下文的方法会削减两种方式:包含站点必须信任源站点,不要在安全上下文中做任何不好的事情,比如窃取最终用户密码或用大山羊替换页面; 但同样地,源站点的代码只是包含站点的潜在恶意定制安全上下文中的访客.因此,无论一个站点包含来自另一个站点的脚本,双方之间必须存在一定程度的信任; 域检查永远不会是一个100%万无一失的安全机制.
我想尽可能包含一个样式表来设置元素的样式,但我不确定我是否可以将其与javascript一起加载.
您当然可以将样式表元素添加到文档的head元素中,但是您需要一些强大的命名空间以确保它不会干扰其他页面样式.您可能更喜欢使用内联样式以简化并避免页面主样式表中的特殊性干扰.
这取决于您是否希望生成的内容成为主页的一部分(在这种情况下,您可能更愿意让包含网站处理他们自己想要的样式),或者您是否希望它独立,不受影响上下文(在这种情况下,您可能最好将内容放在具有自己样式的内容中).
我正在考虑使用jquery,因此include文件将首先在jquery中调用
我会尽量避免将jQuery拉入主页.即使noconflict
它有可能与其他不期望它存在的脚本冲突,特别是像其他框架一样复杂的脚本.在同一页面上运行两个框架是一个奇怪错误的处方.
(另一方面,如果您选择了路线,则可以使用自己的脚本上下文,因此在那里不会出现问题.)