用例:
我做什么
假设我想阻止此JavaScript的热链接:
<script type="text/javascript" src="http://webservice.mywebsite.com/username.js?ID=SERVICE_ID;ts=1386607643;sig=52f72b1a0fe9158d87d9e4ba4e26a731"/>
在username.js中,我会检查:
if (document.location.host.match(/[.]mywebsite[.]com$/i) == null) {
document.location.href="http://www.mywebsite.com/error.html";
} else {
username = username_obtained_using_the_session_cookie
}
我的问题
这样安全吗?
答案 0 :(得分:1)
是的,可以重新定义window
对象:
var window = '123';
alert(window.location);
在警报中提供undefined
。
甚至覆盖document
对象(您对问题的编辑):
var document = { "location" : { "host" : "www.mywebsite.com" } };
所以它现在通过你的测试:
if (document.location.host.match(/[.]mywebsite[.]com$/i) == null) { document.location.href="http://www.mywebsite.com/error.html"; } else { username = username_obtained_using_the_session_cookie }
更好的解决方案是,如果您的网络服务使用POST
而不是GET
来回复您的方法,那么由于Same Origin Policy将无法回复任何远程域都可以读取包含用户名的响应内容。
您可以在plain JavaScript中执行POST
,也可以使用JQuery。