在WebKit中,我的JavaScript出现以下错误:
拒绝执行JavaScript脚本。在请求中找到脚本的源代码。
该代码适用于JavaScript微调器,请参见ASCII Art。
该代码曾经可以正常工作,但在Camino和Firefox中仍然可以正常工作。仅当通过POST保存页面,然后通过GET检索页面时,才引发该错误。它同时在Chrome / Mac和Safari / Mac中发生。
有人知道这意味着什么,以及如何解决这个问题吗?
在WebKit中,我的JavaScript出现以下错误:
拒绝执行JavaScript脚本。在请求中找到脚本的源代码。
该代码适用于JavaScript微调器,请参见ASCII Art。
该代码曾经可以正常工作,但在Camino和Firefox中仍然可以正常工作。仅当通过POST保存页面,然后通过GET检索页面时,才引发该错误。它同时在Chrome / Mac和Safari / Mac中发生。
有人知道这意味着什么,以及如何解决这个问题吗?
Answers:
这是防止XSS(跨站点脚本)攻击的安全措施。
当通过HTTP POST请求将一些JavaScript代码发送到服务器,并且通过HTTP响应返回相同的代码时,就会发生这种情况。如果Chrome检测到这种情况,则脚本将被拒绝运行,并且您会收到错误消息Refused to execute a JavaScript script. Source code of script found within request
。
另请参阅有关安全深度:新安全功能的博客文章。
可以通过X-XSS-Protection
在受影响的页面上发送非标准的HTTP标头来禁用此“功能” 。
X-XSS-Protection: 0
简短答案:首次提交JavaScript后刷新页面,或点击显示您正在编辑页面的URL。
长答案:因为您填写的表单文本包含javascript,并且浏览器不一定知道您是javascript的来源,所以让浏览器假定您不是此JS的来源更为安全,并且不运行它。
一个例子:假设我给您一个链接,其中包含一些JavaScript,您的电子邮件或Facebook。想象一下,JavaScript将向所有朋友发送我的酷链接。因此,使该链接被调用的游戏变得简单,找到一个发送javascript的位置,使其将包含在页面中。
Chrome和其他WebKit浏览器试图通过不执行响应中的任何javascript(如果请求中存在)来减轻这种风险。我的恶意攻击将被阻止,因为您的浏览器永远不会运行该JS。
您的情况是将其提交到表单字段中。表单的发布字段将导致显示Java脚本的页面的呈现,从而使浏览器感到担忧。但是,如果您的JavaScript确实已保存,则在未提交表单的情况下访问同一页面将使其执行。
正如其他人所说,当HTTP响应包含请求中也包含JavaScript和/或HTML字符串时,就会发生这种情况。这通常是由于在表单字段中输入JS或HTML引起的,但也可以通过其他方式触发,例如手动调整URL的参数。
这样做的问题是,有恶意的人可能将他们想要的任何JS用作值,使用恶意的JS值链接到该URL,并给您的用户带来麻烦。
几乎在每种情况下,都可以通过对响应进行HTML编码来解决,尽管有例外。例如,这对于<script>
标签内的内容将是不安全的。其他特定情况可以用不同的方式处理-例如,通过URL编码可以更好地将输入注入URL。
正如Kendall Hopkins所提到的,在某些情况下,您实际上希望从表单输入中执行JavaScript,例如创建类似JSFiddle的应用程序。在这种情况下,我建议您至少先检查一下后端代码中的输入,然后再盲目写回。在那之后,您可以使用他提到的方法来防止XSS阻塞(至少在Chrome中是这样),但是请注意,它正在向攻击者开放。