2009-10-10 202 views
79

WebKit中我得到我的JavaScript以下错误:拒绝执行JavaScript脚本。脚本的源代码中发现的请求

拒绝执行一个JavaScript脚本。在请求中找到脚本的源代码。

该代码适用于JavaScript纺纱器,请参阅ASCII Art

用于正常工作的代码,并且在Camino和Firefox中仍然正常工作。该错误似乎只在通过POST保存页面然后通过GET检索时才会抛出。它发生在Chrome/Mac和Safari/Mac中。

任何人都知道这意味着什么,以及如何解决这个问题?

+0

嗯,可能我的WebKit已更新。该页面再次工作。还有页面的所有旧版本(请参阅页面底部的旧版本按钮)。 – doekman 2009-10-11 13:59:28

+0

这个错误发生在w3schools的tryit编辑器中http://www.w3schools.com/js/tryit.asp?filename=tryjs_events这个脚本是第一次执行的,但是它在你点击“编辑点击我“按钮。 – 2011-05-10 20:20:52

+1

如果按下“编辑并单击我”按钮,则textarea的内容(使用JavaScript)将通过POST发送到服务器。 Chrome会检测到javascript已发布到服务器,并且可能是恶意的。阻止是针对XSS攻击的措施。 – doekman 2011-05-11 08:59:08

回答

65

这是防止XSS (cross-site scripting)攻击的安全措施。

这发生在某些JavaScript代码通过HTTP POST请求发送到服务器时,并且通过HTTP响应返回相同的代码。如果Chrome检测到这种情况,该脚本将被拒绝运行,并且您会收到错误消息Refused to execute a JavaScript script. Source code of script found within request

另请参阅此博文关于Security in Depth: New Security Features

+5

这将是很好的看到某种参考。 – kangax 2009-10-11 06:31:58

+0

,但这是戈纳导致任何问题?这意味着如果我们忽略这个信息就可以了吗? – samach 2011-08-04 12:03:21

+0

@Greg浏览器使用什么算法来“检测情况”?它不能只是在数据右边寻找字符串“

129

可以通过在受影响的页面上发送非标准HTTP标头X-XSS-Protection来禁用此“功能”。

X-XSS-Protection: 0 
+8

谢谢!这应该得到更多的赞扬。 – 2012-04-28 20:26:31

+0

这不适合我。 – 2012-08-15 20:25:49

+2

确保触发此错误的页面与此标题一起发送,而不是提交页面。 – 2012-08-15 20:31:15

14

简短的回答:刷新页面,让您的首次提交的JavaScript后,或打将显示您正在编辑的页面的URL。

龙回答:因为你填充到表单中的文本包括JavaScript和浏览器并不一定知道你是的JavaScript源,它是浏览器更安全的假设,你是不是这JS的来源,而不是运行它。

一个例子:假设我给了你一个链接你的电子邮件或Facebook的一些JavaScript在其中。想象一下,javascript会向你的朋友发送我的酷炫链接。因此,获取该链接被调用的游戏变得简单,找到一个发送JavaScript的地方,以便它将被包含在页面中。

Chrome和其他WebKit浏览器尝试通过不执行响应中的任何JavaScript(如果它出现在请求中)来缓解此风险。我的恶意攻击会受到挫败,因为你的浏览器永远不会运行JS。

就你而言,你正在将它提交到表单域。表单字段的帖子将导致页面的呈现将显示Javascript,导致浏览器担心。但是,如果您的JavaScript真正保存了,则在未提交表单的情况下点击该页面将允许其执行。

0

我用这个哈克PHP招就在我提交到数据库中,但脚本之前,从我_GET要求:

if(!empty($_POST['contains_script'])) { 
    echo "<script>document.location='template.php';</script>"; 
} 

这对我来说是最廉价的解决方案呈现。

1

正如其他人所说的,这发生在HTTP响应包含也在请求中的JavaScript和/或HTML字符串时。这通常是通过将JS或HTML输入到表单字段中引起的,但也可以通过其他方式触发,例如手动调整URL的参数。

这样做的问题是,有不良意图的人可以将任何他们想要的JS作为值,链接到带有恶意JS值的URL,并导致用户遇到麻烦。

差不多每种情况下,这可以通过HTML encoding the response固定,虽然也有例外。例如,对于<script>标签中的内容,这不是安全的。其他具体情况可以采用不同的处理方式 - 例如,将输入注入URL可以更好地通过URL编码提供服务。

肯德尔·霍普金斯提到,可能有少数情况下当你真正想从表单输入 JavaScript来执行,如创建像JSFiddle的应用程序。在这些情况下,我建议您至少在回写代码之前通过后端代码中的输入进行擦洗。之后,您可以使用他提到的方法来防止XSS阻塞(至少在Chrome中),但请注意它正在向攻击者开放。

相关问题