FireFox注释解析特性的利用(恶意的,友善的)

前几天我提到过FireFox在多个<div>引用时可能导致原本成为注释的代码依旧能执行的BUG,

今天在网上搜索了一下,发现FireFox在类似的解析 注释片断的时候还有很大的潜力可挖掘。

对空格符的处理。按照HTML的标准,空格字符是&nbsp;。在FireFox中,如果你误写成&nbsp(少了一个分号)一定不 会被FireFox认为是空格,FireFox会认为它是&nbsp。

而在IE中,如果你误写成&nbsp(少了一个分号)IE智能地认 为它是空格。

对注释的处理。按照HTML的标准,注释的操作是放在 <!–和–>之间的,而且注释中不能有- ,否则会产生HTML解析错误。

如果你把一段注释写成 <!–2000年–2002年,在北京工作–>,在FireFox中,FireFox会机械地认为该段注释内容为2000年,而IE则 会智能地认为这段注释内容为2000年–2002年,在北京工作。

以上部分来源于:
http://topic.csdn.net/u/20081205/16/853a3259-9862-4f07-bac2-c24a313145e8.html

========================================
Comments

HTML comments have the following syntax:

<!– this is a comment –>
<!– and so is this one,
which occupies more than one line –>

White space is not permitted between the markup declaration open delimiter(“<!”) and the comment open delimiter (“–“), but is permitted between the comment close delimiter (“–“) and the markup declaration close delimiter (“>”). A common error is to include a string of hyphens (“—“) within a comment. Authors should avoid putting two or more adjacent hyphens inside comments.

Information that appears between comments has no special meaning (e.g., character references are not interpreted as such).

Note that comments are markup.

以上部分来源于:http://www.w3.org/TR/REC-html40/intro/sgmltut.html#h-3.2.4

========================================

从资料上看,- 出现在注释文本中,会在FireFox中产生意想不到的结果,

这种结果往往会导致很多奇妙的事情发生例如:

<!DOCTYPE html PUBLIC "-//W3C//ddD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/ddD/xhtml1-transitional.ddd">
<html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
 </head>
 <body>
 <!----
 <script type="text/javascript">

<script type="text/javascript">

document.write("AlexBlair");

</script>
 -->
 </body>
 </html>

注意:加黑的部分用来制造违规,FireFox 会把最后的>和之前多余的 – – 结合起来,其实你可以是任意带有>的符号<div><dt><abc>都是可以的。

好了,应该会有点意思吧。对于ie而言,这段代码是不会执行的,这种方法也有他好的一面,可以用来判断是否为firefox。

<script type="text/javascript">
 var isFF=0;//先定义FF为0,即假
 </script>
 <!-- --
 <check FF>
 <script type="text/javascript">var isFF=1;</script>
 -->
 <script type="text/javascript">
 if (isFF=0){//判读isFF是否为0,也就是刚才这段代码是否被执行。
 document.write("非FireFox");
 }else{
 document.write("FireFox");
 };
 </script>

这个判断语句唯一的缺点在于,使用FF时会在页面上出现–>,这是因为之前FireFox已经结束了之前的注释环节。
怎么使用它,大家发挥想象把!

Related posts

发表评论