跨站脚本攻击使用脚本标签,更改脚本标签的src属性,我们可以为脚本标签使用id吗?

3
<body>
<!-- some html code -->

<script src='some.js'></script>

<!-- some html code -->

</body>

脚本some.js加载一个表单。当我点击该表单中的更新按钮时,我不会提交表单,而是形成一个查询字符串,并希望将其发送为some.js?key=value。

现在我需要更改脚本标记的src。

如果我们更改src,它会通过再次请求新内容来工作吗?我们可以使用脚本标记的ID吗?如果可以,所有浏览器都支持吗?

当接收到新内容时,我将清除此脚本显示的旧内容。我认为最好有一个div并将所有内容放在其中。我正在将script.js重写为script.php在我的htaccess中,只是向用户展示这只是JavaScript访问或者如果我给出一个.php也没有问题。

以上是基本要求。

我们只需要使用一个脚本标记,它将从另一个站点获取内容,并应在此处更新。

您可以提供建议以标准方式使用此功能,其中将包括从x站点更新内容。

所以这就是人们所说的跨站点脚本、按需JavaScript,请添加更多术语,以便我更新自己。

任何类型的响应都会有好处。

4个回答

2

正如 @tpeczek 所提到的,仅更改脚本的 src 属性是不够的,有些浏览器将不会重新加载脚本。
使用以下代码替换标签:

var oldScript = document.getElementById('someID');
var script = document.createElement("script");        
script.setAttribute("type","text/javascript");                
script.setAttribute("id","someID");
script.setAttribute("src",url);

if (oldScript == null) {               
    document.body.appendChild(script);
} else {
    document.body.replaceChild(script, oldScript);
}

人们说id不起作用。除非你的代码有问题。 - Jayapal Chandran

2
根据W3C(http://www.w3.org/TR/REC-html40/interact/scripts.html#h-18.2.1),“script”标签不支持任何标准属性(包括“id”),但在大多数浏览器中仍可正常工作。建议不要替换“script”标签的“src”属性,而是删除该标签并添加新标签 - 这更加可靠。强烈建议了解JSONP和跨域资源共享(http://www.w3.org/TR/cors/) - 这些是可以帮助您实现所需功能的标准。

2
W3C是一个发布与Web相关的规范的组织。W3Schools是一个发布质量较差的教程但擅长SEO的组织。它们不是同一个组织。在某些版本的HTML中,script元素确实支持id属性。 - Quentin
我从未写过它们是同一组织,尽管我承认我发布了错误的链接(现已编辑)。其余内容仍然正确。 - tpeczek
如果我有很多脚本标签,而且我可能不知道它们的确切位置,那该怎么办?我应该将该脚本标签包装到一个带有ID的div中,例如<div id='jscriptid'><script></script></div>,以便我们可以在div内部操作脚本标签... - Jayapal Chandran

1

1

你不能老派一点,遍历所有脚本元素并检查 src 是否包含 some.js 吗?


它会起作用,但与其他回复相比较为繁琐。 - Jayapal Chandran

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接