WEB安全第六课 HTML语言 之一 HTML文档背后的基本概念 |
超文本标记语言(Hypertext Markup Language,HTML)是创建在线文档的主要方式。关于HTML语言最早的书面描述出自1991年Tim Berners-Lee在互联网上发表的一篇简要总结。他提议了一套衍生自SGML格式的语法,这一语法的格式是文本文档,内部可以提供超链接标记和几种页面布局方式。
在此后若干年时间里,这一规范在Berners-Lee爵士和Dan Connolly的主导下得到逐步改进,但直到1995年,也就是第一次浏览器世界大战前夕,这门语言(HTML2.0)才有了一套相对严谨和全面的规范,这就是RFC1866。 🧒💶😋🤌 从那时候起,瓶子里的魔鬼就被放了出来:在其后的几年里,相互竞争的各浏览器厂商不断加入各种亮闪闪、用于演示和炫耀的功能,他们完全按自己的喜好乱用这门语言。有好几次人们尝试修补那份原始的RFC文档,但由于IETF管理的标准化流程实在太死板了,最终由World Wide Web Consortium机构接管了这门语言的维护,并于1997年发布了HTML3.2规范。 新的规范试图弥合各浏览器具体实现之间的差异,同时又加入了诸多能吸引普通用户的花哨特性,如字体颜色、可变字体等。最终来说,HTML3.2对这门语言的清晰化是有贡献的,但已经和当时的真实状况有较大的脱节了。 在那之后,HTML4和4.01的工作主要着眼于裁剪已越来越累赘的HTML,以及更详细地诠释如何解析和渲染各种文档要素。这套规范还定义了一套衍生自XML、语法更严格的XHTML,对XHTML的解析更容易保持统一,但创建这类文档的限制较多,对错误语法的处理也更倾向于拦截而非宽容。🧑🚀🦺🧻👻🦷 尽管有这些努力,但互联网上只有极其少部分的网站能真正符合HTML规范,而在客户端上,就几乎谈不上有什么统一的解析模式和错误恢复机制,换而言之,实际上是完全匮乏。由此导致一些原本还企图改进这门语言的努力也逐渐偃旗息鼓,W3C也逐渐把注意力转向样式表(Stylesheet)、文本对象模型(DocumentObjectModel)和其他一些更抽象或更超前的任务上。 直到2000年下半年,那时候HTML5的大旗竖起来了,一些底层的工作再度活跃起来,野心勃勃的HTML5项目企图对这门语言的方方面面进行规范:从语法到解析,定义各种相关API,与浏览器更紧密相关的表现行为等。时间会证明HTML5能否获得成功;但在那之前,这门语言本身,以及它的四种主要解析引擎,都拥有各自让人抓狂的诸多问题。#380: 👎⛪🥄☯🐋 #f195: 从纯理论的角度出发,HTML的语法相当简单:由标签(Tag)组成的层级结构,标签参数的格式为“名称=值”数据对,则文本节点(构成了文档实际内容)穿插其中。例如,一个包含了标题、文档头域(heading)和超链接的简单HTML文档如下: [mw_shl_code=html,true] <html> <head> 👁🏦🌶✔🐤 <title>Hello world</title></head> <body> <hl>欢迎来到古黑论</hl> <a href="http://www.guhei.net/">点我!</a>👴👞📷🤖👍 </body> </html>[/mw_shl_code] HTML语法对于参数的值和文档的主体内容能使用哪些字符是有某些约束和限制的。5个字符:左右尖括号、单引号、双引号以及“&”符号,被保留下来作为HTML标记的组成部分,所以在超出原本正常用途之外,应尽量避免用到这些字符,如果一定要用,应先对这几个字符进行转义。最重要的规则是: 👵🧢🎺👻🧠 在HTML文档的绝大部分区域都不应该出现单个“&”符号。 在HTML标签的内部不应该出现左右尖括号。 在文本节点里的左尖括号(<)是有危害性的。 在标签中出现引号字符串可能会导致意想不到的效果,最后的效果与具体位置有关,出现在文本节点里是无害的。 🙏🌞🦀♏🐻 要在有问题的位置上使用这些字符而不产生副作用,必须使用一种基于“&”符号的编码策略.。注意:当然,尽管有编码策略,可不代表这策略就一定会用上。在显示由用户控制的数据时,由于没有恰当地过滤或转义保留字符,往往是导致一种常见又致命的网站应用安全漏洞的原因。其中特别著名的例子就是跨站脚本攻击(XSS),由于HTML标记往往没有预料到攻击者提供的数据里有可能包含恶意JavaScript代码,结果导致攻击者可以完全控制目标站点的外观和操作。 1.文档解析模式 🤛🏠🍏🈸🐖 对任意HTML文档来说,最顶层的<!DOCTYPE>指令用于告知浏览器应如何解析这个文件,至少在表面上需要按官方规定的某个标准来处理;但其应用范围比较有限,因为同样的信号也可以通过Content-Type响应头来传递。在各种解析模式中,XHTML和传统的HTML文件解析之间的差异最大。在传统解析模式里,解析器会尽量修复绝大多数的语法错误,包括不匹配的开头和结尾标签。 此外,标签和参数名称也是不区分大小写的,参数的值也不一定会用引号括起来,而某些类型的标签(如<img>)则完全是隐式闭合的。换言之,尽管不情不愿,但解析器实际上能接受以下这个输入文档: 👩👔🪦🤩✍ 而另一方面,XML解析模式则非常严格:所有的标签必须严格匹配,命名的大小写要一致,要显式明确地闭合。(XML特有的自闭合标签语法,如<img/>,也是允许的。)此外,大部分的语法错误,甚至是很不起眼的小错误,也会导致解析出错,无法正常显示文档。 与常规的HTML风格不同,XML格式的文档还可以在文档的中间段落优雅地整合其他XML兼容格式内容,如数学方程式标记语言MathML。只要为特定的标签指定不同的xmlns命名空间设定即可,而无须对整套语言进行全新的调整。 🤞⛴🧊🈚🦚 值得一提的最重要的一个差别是,传统HTML解析策略里有一些特殊模式,在碰到某些标签后就会落人特殊模式的状态,直到出现特定的终止字符串时才会退出该状态;在这些特殊状态里,其中所有的内容都是按非HTML文本来解析的。这类特殊的标签包括<style>、<script>、<textarea>和<xmp>。 在现实浏览器里,只要以忽略大小写的方式匹配到这些字符串</style、</script或其他类似的配对值,就会退出该特殊状态;在此状态内,任何HTML语言标记字符都不会按HTML格式来解析。(有趣的是,有一个已经被正式停用的标签〈Plaintext〉是完全不能退出的;只要碰到这个标签,在剩余的整个文档里都会生效。) ✋🌞🍽🆗🐋 与之相对,XML的情况会更易于预测。在XML文档内,一般禁止出现单个的“<”和“&”符号,但也提供了一种特殊的语法:只要以“<![CDATA[”字符串开头,以“]]>”结束,在此中间段落可以封装含有任意标签的任意原始文本数据。例如: [mw_shl_code=javascript,true] <script> <![CDATA[ alert('>>>Hello world! <<<');🧓👗📷🤡🙌 ]]> </script>[/mw_shl_code] 另一个值得引起注意的特殊解析模式就是在XHTML和常规HTML里都有的注释块。在XML里,是以"<!--"开头,以"-->"结尾。而在Firefox4.0版本以前的传统HTML解析器里,只要出现“--”,最后以“>”结束,也是能被接受的注释写法。#381: 🧑🍳👙🎺😶🤳 2.语义之争 除了这门语言的底层语法之外,HTML还是一场引人瞩目的理念之争的主题:这是理想主义和现实网络世界的冲突。Tim Bemers-Lee—直倡导语义网(semantic web)的概念,在这个互联的系统里,文档的每个功能块,如引用、代码片段、邮件地址或标题,都有解释它们响应含义的标签,这些标签可供机器读取(譬如,<cite>、<code>、<address>或<hl>〜<h6>). Tim Bemers-Lee和他的支持者认为,这种方式能让机器以一种有意义的方式抓取、分析和索引网页的内容,这样在不久的将来,计算机就能运用人类知识的总和,进行推理运算了。根据这一观念,标记语言也应该能够设计文档的外观风格,当然这是锦上添花的次要功能了。 👀🏫🍍‼🐡 Berners-Lee爵士从未放弃过这一梦想,但另一方面,HTML的实际运用与他的期望实在相去甚远。网页开发人员很快就功利地从HTML3.2的核心功能里,提取出一堆和改变外观有关但语义无关的标签来,如<font>、<b>、<pre>,而且他们也不觉得有必要向浏览器解释文档的结构。 W3C曾试图阻止这种风气,但收效甚微。尽管现在像<font>这样的标签已经被停用,取而代之的是CSS,但这仅仅是因为样式表的方式能更灵活和统一地控制视觉效果。 🧓🛍🖥😥👎 有了CSS的助力,开发人员甚至只需要堆砌一些压根不涉及语义的<Spari>和<div>标签,就能造出包罗了从标题到用户可点击按钮等各式各样的东西来,这种方式对任何自动内容提取工具来说,都是完全不透明的。#392: 尽管对HTML语言的设计还有一定的影响力,但某种程度上来说,语义网的概念在逐渐退减:互联网上的内容越来越与单一可视文档没什么关系了。现在HTML功能也曰益被削减,最后成了为JavaScript应用提供一种便捷的绘图图面和图形基兀,供JavaScript创建接口的平台而已。 WEB安全第六课第二节: 🖐🚂🍊🔞🦋
帖子热度 1.8万 ℃
|
|
觉得冥冥中一直在等撸主写这个帖子。。。我以为。。。撸主的帖子写出来。。。就应该是一部传世之作。。。到现在我才发现。。。什么事情都是可以变的。。。惟独不变的是撸主的精彩原创。。。就好像我一直以为自己文笔不错。。。忽然看到撸主帖子。。。才发现我输了。。。因为在我读撸主的帖子的时候。。。我忘记烦恼和所有不开心的事情。。。整个人好象沐浴在4月杭州温暖的春风中。。。
|