Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/459.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用window.location是否可以安全地检查脚本是否仅包含在特定站点上?_Javascript_Security_Window.location - Fatal编程技术网

Javascript 使用window.location是否可以安全地检查脚本是否仅包含在特定站点上?

Javascript 使用window.location是否可以安全地检查脚本是否仅包含在特定站点上?,javascript,security,window.location,Javascript,Security,Window.location,我正在构建一个服务,客户将在其站点上包含一个脚本。我将根据客户对脚本的使用情况(它连接到我的服务器以使用该服务)向他们计费,并且我还有一个iFrame版本。检查他们的window.location.host以检查脚本是否发布在他们自己的网站上是否安全?客户可以选择指定多个域。否。所有Javascript都在客户端运行,通常情况下,您不能依赖客户端验证。否。所有Javascript都在客户端运行,通常情况下,您不能依赖客户端验证。总的来说,您不应该,请继续阅读 我相信如果您更改window.loc

我正在构建一个服务,客户将在其站点上包含一个脚本。我将根据客户对脚本的使用情况(它连接到我的服务器以使用该服务)向他们计费,并且我还有一个iFrame版本。检查他们的window.location.host以检查脚本是否发布在他们自己的网站上是否安全?客户可以选择指定多个域。

否。所有Javascript都在客户端运行,通常情况下,您不能依赖客户端验证。

否。所有Javascript都在客户端运行,通常情况下,您不能依赖客户端验证。

总的来说,您不应该,请继续阅读

我相信如果您更改
window.location
,浏览器就会导航到该页面。因此,如果浏览器不导航到新页面,则没有人能够更改
window.location
以欺骗脚本

但是没有什么能阻止任何人下载.js文件并编辑它来删除你的检查。(或者像Sime说的,他们可能使用非标准浏览器)


(确认这发生在Firefox上)

总的来说,你不应该,继续读下去

我相信如果您更改
window.location
,浏览器就会导航到该页面。因此,如果浏览器不导航到新页面,则没有人能够更改
window.location
以欺骗脚本

但是没有什么能阻止任何人下载.js文件并编辑它来删除你的检查。(或者像Sime说的,他们可能使用非标准浏览器)


(确认这在Firefox上发生)

不,他们可能使用自定义浏览器,在访问其全局属性时提供错误信息……或者他们可以编辑脚本(LOL),以便在与服务器通信时报告错误的URL。你给了他们源代码。该代码不受保护。基本上,客户端是完全不可靠的。编辑脚本对他们没有帮助,因为这样用户就无法获得我的应用程序提供的内容。浏览器不提供虚假主机将是一个更大的问题,因为网站所有者对此无能为力,而使用浏览器的用户无法获得内容。我的意思是:假设一个客户购买您的脚本用于一个域——Domain1。但是,他还将脚本安装在一系列其他域上——Domain2、Domain3等。但是,他编辑脚本,使其始终报告Domain1(他硬编码值Domain1,而不是读取
windows.location
)。因此,现在,客户在您不知情的情况下在多个域上使用您的脚本。据您所知,该脚本仅在Domain1上运行。如果我将客户的域存储在我的网站上,并且该脚本将window.location的值发送到我的服务器,则不会运行该脚本。因此,比较不是在脚本内部进行的,而是在m端安全地进行的。这会告诉我的服务器,它可以开始向客户端发送内容。不,他们可能使用的自定义浏览器在访问其全局属性时提供错误信息……或者他们可以编辑脚本(LOL),以便在与服务器通信时报告错误的URL。你给了他们源代码。该代码不受保护。基本上,客户端是完全不可靠的。编辑脚本对他们没有帮助,因为这样用户就无法获得我的应用程序提供的内容。浏览器不提供虚假主机将是一个更大的问题,因为网站所有者对此无能为力,而使用浏览器的用户无法获得内容。我的意思是:假设一个客户购买您的脚本用于一个域——Domain1。但是,他还将脚本安装在一系列其他域上——Domain2、Domain3等。但是,他编辑脚本,使其始终报告Domain1(他硬编码值Domain1,而不是读取
windows.location
)。因此,现在,客户在您不知情的情况下在多个域上使用您的脚本。据您所知,该脚本仅在Domain1上运行。如果我将客户的域存储在我的网站上,并且该脚本将window.location的值发送到我的服务器,则不会运行该脚本。因此,比较不是在脚本内部进行的,而是在m端安全地进行的。这会告诉我的服务器它可以开始向客户端发送内容。您不必手动下载脚本或使用自定义浏览器。使用Chrome或Opera中的inspector,我可以在页面上加载Javascript代码时逐步浏览代码,绕过我想要的任何部分,或者更改变量的值。但是,如果下载脚本,删除检查,并将结果托管在其他服务器上,它将不再工作,因为它将无法对其“主页”进行AJAX调用服务器,因为它现在位于不同的域中。如果最终用户使用Firebug或Chrome动态编辑Javascript,那么当他们设法使服务在不应该在的域上工作时,他们只是在愚弄自己(或者,换言之,这样的最终用户也可以用注释掉的跨域检查重新编译他们的web浏览器,以实现类似的效果)。您不必手动下载脚本或使用自定义浏览器。使用Chrome或Opera中的inspector,我可以在页面上加载Javascript代码时逐步浏览代码,绕过我想要的任何部分,或者更改变量的值。但是,如果下载脚本,删除检查,并将结果托管在其他服务器上,它将不再工作,因为它将无法对其“主页”进行AJAX调用服务器,因为它现在位于不同的域中。如果最终用户使用Firebug或Chrome动态编辑Javascript,那么当他们设法使服务在不应该在的域上工作时,他们只是在愚弄自己(或者,换言之,这样的最终用户也可以用跨域的方式重新编译他们的web浏览器)