拒绝执行JavaScript脚本。 在请求中find脚本的源代码

在WebKit中,我的JavaScript上出现以下错误:

拒绝执行JavaScript脚本。 在请求中find脚本的源代码。

该代码是为JavaScript的spinners,看ASCII艺术 。

代码用于工作正常,并仍然在Camino和Firefox中正常工作。 这个错误似乎只是通过POST保存页面,然后通过GET获取。 它发生在Chrome / Mac和Safari / Mac中。

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

这是防止XSS(跨站点脚本)攻击的安全措施。

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

另请参阅关于深度安全:新安全function的博文。

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

 X-XSS-Protection: 0 

简短的回答 :在您首次提交javascript之后刷新页面,或点击将显示正在编辑的页面的URL。

长答案 :因为你填写的表单中包含javascript的文本,并且浏览器不一定知道你是javascript的源代码,所以浏览器假设你不是这个JS的源码是安全的,不运行它。

一个例子 :假设我给你一个链接你的电子邮件或Facebook的一些JavaScript的。 想象一下,这个javascript会给你所有的朋友发送一个很酷的链接。 所以,获取该链接被调用的游戏变得简单,find一个地方发送的JavaScript,这将被列入页面。

Chrome浏览器和其他WebKit浏览器尝试通过不执行响应中的任何JavaScript(如果该请求中存在该JavaScript)来缓解此风险。 我的恶意攻击将被阻止,因为你的浏览器永远不会运行这个JS。

你的情况,你提交到一个表单域。 表单字段的post将导致页面的呈现,将显示的JavaScript,导致浏览器担心。 如果你的javascript真的被保存了,不用提交表单就可以执行。

正如其他人所说的,当HTTP响应包含也在请求中的JavaScript和/或HTMLstring时,会发生这种情况。 这通常是由于将JS或HTMLinput到表单字段中引起的,但也可以通过其他方式触发,例如手动调整URL的参数。

这样做的问题是,一个坏意图的人可以把任何他们想要的JS作为值,链接到具有恶意JS值的URL,并导致用户的麻烦。

几乎所有情况下,这都可以通过编码响应的HTML来解决,但也有例外。 例如,这对于<script>标签内的内容来说是不安全的。 其他具体情况可以用不同的方式处理 – 例如,将input注入到URL中可以更好地进行URL编码。

正如肯德尔·霍普金斯(Kendall Hopkins)提到的那样,当你真正希望从表单input中执行JavaScript,例如创build一个像JSFiddle这样的应用程序时,可能会出现一些情况。 在这种情况下,我build议你至less在回写代码之前,通过后端代码中的input进行擦除。 之后,您可以使用他提到的方法来防止XSS阻塞(至less在Chrome中),但请注意,它会向攻击者开放。

在我提交到数据库之后,但是在我的_GET请求呈现脚本之前,我使用了这个hacky PHP技巧:

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

这对我来说是最便宜的解决scheme。