1

This might be a silly question but i want to clarify this. what happens when we close a javascript two times.

<script type="text/javascript">
alert("hello");
</script>
</script>

i did this but am not getting any error.its like we closed the script so there wont be any execution so no error will trigger i believe. will this create trouble under any situation?

why am asking this is i would like to insert a </script> at the end of a plugin where user submits their script. So that i don't have to go for extra coding on validation if this works fine without creating any trouble

4

6 回答 6

2

浏览器会将其视为额外的、意外的结束标记。it's 没关系,</script>它也可以是</link>或在同一上下文中允许的任何其他内容。

除非您启用严格/XML 模式,否则大多数浏览器都会默默地忽略这些额外的标签。对于严格模式,您应该在控制台中收到错误。

为了正确包装用户提供的插件,我建议采用以下策略:

  • 始终将它们包装在您自己的标签中(这样您就可以确保结构始终正确)。

  • 检查您在两个标签之间放置的字符串,如果发现其中任何一个<script,则报告错误。<script></script>

这里的想法是用户不应该在他们的代码中使用脚本标签,而你应该把它们放在它们所属的地方。

于 2013-08-28T10:46:49.057 回答
1

Most browsers will just remove/ignore an extra tag. I can't see that it's would cause any problems, but it is quite an ugly way to do it. I have no better suggestion currently though.

于 2013-08-28T10:38:50.437 回答
0

效果可能会因浏览器而异,但通常都会忽略第二个标签。

于 2013-08-28T10:40:45.037 回答
0

没有什么。浏览器会忽略它,但它显然不会通过标准。

据我所知,如果浏览器遇到一个开始<script>标签,它会假设一切,直到结束</script>标签是脚本。因此以 a 开头</script>将没有任何效果,只会导致“意外”异常。

于 2013-08-28T10:40:33.633 回答
0

回答您的直接问题:什么都不会发生,它只是浏览器忽略的无效 (x)HTML。

为了回答您的间接问题,评论中出现了:

@DanFromGermany所以你说验证是唯一的方法,否则不推荐这种方法

外部资源的验证始终至关重要。

例如,简单地将外部脚本读入<script></script>标签,告诉浏览器“这不是外部内容”,从而授予更多访问权限,例如,读取您的 cookie 并设置源自您的域的 cookie (外部内容....您的域)

包括来自不同主机/域的外部 JS via <script src="...">,告诉浏览器“这是一个第 3 方脚本,不允许它像内部脚本一样多。” 因此,不允许读取或设置您的 cookie 和东西。

为什么投入</script>没有帮助:

攻击者很容易破坏您的整个网站并让它轻松消失。

请参阅以下内容:

<script>
<!-- external script start -->

</script>
</head>
<body>

Attackers website start


<div style="display:hidden;">

everything below disappears

<!--

<!-- external script end -->
</script>
</head>
<body>
<!-- your website start !-->

尽管如此,如果您阻止这种情况,攻击者总是可以使用document.write();将 HTML 插入您的网站。

可能最好的方法是通过 iframe 从空白页面和独立(子)域执行给定的 JS。

将东西放入数据库,或保存 JS 并让它由不同的用户执行需要额外的验证。

于 2013-08-28T11:31:24.193 回答
0

XHTML 规则比 HTML 的规则严格得多。当 XHTML 文件的脚本中使用特殊的 XML 字符(例如 & 和 <)时,它们会导致错误。最简单的解决方法是使用外部脚本文件。但是,如果您只是必须编写内联脚本,那么您将需要在文件中包含 CDATA(字符数据)部分。在 CDATA 部分中,可以自由使用特殊的 XML 字符。下面的示例使用与 XHTML 和 HTML 语法兼容的 CDATA 部分。

<script type="text/javascript">
//<![CDATA[
  alert((1 < 2) && (3 > 2));
//]]>
</script>

这也不是正确的做法,如果脚本是内联的,它将违反 W3C 合规性。

于 2013-08-28T10:50:16.453 回答