在WebKit中,我的JavaScript上出现以下错误:
拒绝执行JavaScript脚本。在请求中找到的脚本源代码。
代码适用于JavaScript微调器,请参阅ASCII Art。
用于正常工作的代码,在Camino和Firefox中仍能正常工作。当页面通过POST保存然后通过GET检索时,似乎只会抛出错误。它发生在Chrome / Mac和Safari / Mac中。
任何人都知道这意味着什么,以及如何解决这个问题?
答案 0 :(得分:131)
可以通过在受影响的页面上发送非标准HTTP标头X-XSS-Protection
来禁用此“功能”。
X-XSS-Protection: 0
答案 1 :(得分:67)
这是防止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。
答案 2 :(得分:15)
简短回答:在初次提交javascript后刷新页面,或点击将显示您正在编辑的页面的网址。
长答案:因为您填写到表单中的文本包含javascript,并且浏览器不一定知道您是javascript的来源,浏览器认为更安全你不是这个JS的源头,也不是它的运行。
一个例子:假设我给你一个链接你的电子邮件或Facebook上有一些javascript。并且想象一下,javascript会向你的所有朋友发送我的酷链接。因此,获取该链接的游戏变得简单,找到一个发送javascript的地方,使其包含在页面中。
Chrome和其他WebKit浏览器会尝试通过不执行响应中的任何javascript来降低此风险(如果请求中存在该javascript)。我的邪恶攻击会被挫败,因为你的浏览器永远不会运行那个JS。
在您的情况下,您将其提交到表单字段中。表单字段的帖子将导致显示Javascript的页面呈现,导致浏览器担心。但是,如果您的javascript确实已保存,则在不提交表单的情况下点击同一页面将允许其执行。
答案 3 :(得分:1)
正如其他人所说,当HTTP响应包含同样在请求中的JavaScript和/或HTML字符串时,就会发生这种情况。这通常是通过在表单字段中输入JS或HTML引起的,但也可以通过其他方式触发,例如手动调整URL的参数。
问题在于,有意图的人可以将他们想要的任何JS作为值,使用恶意JS值链接到该URL,并导致用户麻烦。
在几乎的每种情况下,这都可以由HTML encoding the response修复,但也有例外。例如,对于<script>
标记内的内容,这是不安全的。其他特定情况可以采用不同的方式处理 - 例如,通过URL编码可以更好地为URL输入输入。
正如Kendall Hopkins所提到的,在某些情况下,您实际上希望从表单输入中执行JavaScript,例如创建像JSFiddle这样的应用程序。在这些情况下,我建议您在盲目地将其写回之前至少擦除后端代码中的输入。在那之后,您可以使用他提到的方法来防止XSS阻塞(至少在Chrome中),但请注意它会向攻击者开放。
答案 4 :(得分:0)
在我提交数据库之后,但在从我的_GET
请求呈现脚本之前,我使用了这个hacky PHP技巧。:
if(!empty($_POST['contains_script'])) {
echo "<script>document.location='template.php';</script>";
}
这对我来说是最便宜的解决方案。