2

当我看到如果我将以下内容保存到扩展名为“htm”的文件中时,我感到很吃惊,然后它会呈现并显示 JavaScript 警报。

我的印象是浏览器肯定需要 html,至少需要 body 标签来呈现 html 文件。

浏览器这样做是否正常,这是否会导致任何与安全相关的问题?

       <table width="100%" height="100%" border="1">
            <tr>
                <td  style="margin:0 auto;">
                    <div style='color:red;height:100%;width:100%;margin:0 auto;text-align:center;border-width:1px;border-color:blue;border-style:solid;vertical-align:middle' id="div1">
                        Does this render in a Browser, since there are html, head and body tags?
                        <div id='div2' style='height"100%;width:100%;margin:0 auto;text-align:center;border-width:1px;border-color:green;border-style:solid;'>Hello! Will the browser show this?</div>
                    </div>
                </td>
            </tr>
        </table>
      <script type='text/javascript'>    alert('showing without tags');</script>
4

2 回答 2

2

浏览器根据文件扩展名(对于本地文件)或 Content-Type HTTP 标头(对于通过 HTTP 访问的文件)确定文档是否为 HTML,而不是基于与文档中的内容有关的任何内容(除了某些版本的 Internet Explorer 将嗅探非文本/html 文档以查看它们是否可能是 HTML)。

一旦浏览器确定一个文档是 HTML,它会尽其所能呈现它,尽管有任何可能使它无效的东西。为应对不良文档而编写的浏览器和因为浏览器可以应对而编写的不良文档的组合导致了所有浏览器中越来越强大的错误恢复例程的螺旋式上升。

缺少的htmlbody标记不会导致它无效,这些元素的开始和结束标记在所有版本的 HTML 中都是可选的(尽管不是没有可选标记的 XHTML)。如果给定了合适的 Doctype 和标题,该文档将是有效的。

向浏览器提供无效 HTML 没有内在的安全问题。您必须小心您允许将哪些用户生成的内容添加到您的网站(但即使浏览器只接受有效文档,您也必须小心),有时糟糕的 HTML 可能会利用浏览器中的安全漏洞(但它是浏览器供应商解决这些问题的责任)。

于 2013-01-05T20:15:27.237 回答
1

当面对这样的 HTML(没有 doctype)时,大多数浏览器都会进入quirks mode

他们如何解释 HTML 并在这一点上呈现它不是标准化的并且是特定于实现的。

这也意味着您不能依赖在未来版本中保持不变的行为。

简而言之 - 不要依赖当今的浏览器以任何特定方式呈现此类 HTML - 它可能会改变。

至于您的安全问题 - 我真的不明白这与安全有什么关系(除了正常的浏览器安全问题)。

于 2013-01-05T20:01:23.587 回答