微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

是否有不同类型的HTML关闭标签

如何解决是否有不同类型的HTML关闭标签

最近,我在HTML中遇到了这种类型的标签<x/ id="someId" onpointermove=alert`hello`>

此数据作为JSON从服务器获取,然后写入HTML视图。 HTML视图显示数据没有问题。 但是,在运行仅在新选项卡中获取数据的请求时,JavaScript代码正在运行。

代码如何运行?

我只知道这种类型的自闭标签<x id="someId" />。 那么,我遇到的这种不同类型的标签是什么?

还有,这是使用倒钩的另一种方式吗?

我最初以为这是字符串插值的一种。但是我在其中找不到对这种特定类型代码的引用。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals

解决方法

这是故意不正确的HTML语法-您可以通过将其(带有下面的必要样板)粘贴到the W3 HTML validator中来进行验证。

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>a</title>
</head>
<body>
  <x/ id="someId" onpointermove=alert`hello`>
</body>
</html>

这会带来一些验证错误。

但是,与XML不同,HTML非常宽容。即使给出的内容很明显是错误的,它也会尽力呈现某物。有关如何执行此操作的规则很复杂,但如今,现代浏览器之间至少几乎始终保持一致(如果不是,则是由于存在错误,而不是厂商之间的意见分歧)

在这种情况下,它呈现的内容实际上解析为以下outerHTML

<x id="someId" onpointermove="alert`hello`">
</x>

像这样格式错误的语法通常用于故意测试XSS防护的极限,因为即使浏览器实际上会带来危险,XSS防护也可能将其视为“安全”。

这里特别令人感兴趣的是alert`hello`-反引号是使JavaScript调用函数的另一种方法,不使用括号。这是由于tagged template literals的工作方式。因此,过时或有问题的XSS清理程序可能会认为alert`hello`是“安全的”,因为它不包含任何函数调用(由无括号确定),但实际上它仍然执行alert

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。