Skip to content
hotoo edited this page May 3, 2013 · 1 revision

其他

JSniffer

嗅探 JavaScript 异常,捕获异常信息:

  • 行号
  • 出错文件
  • 错误消息
  • 错误上下文(函数体,调用过程)

DOMLint

处理浏览器解析好的DOM结构,检测异常情况:

  • DOCTYPE: "BackCompat" != document.compatMode
  • 编码
    • head>*:first-child == meta[charset]
    • head>*:first-child == meta[http-equiv][content=text/html; charset=xxx]
    • script[src]:has([charset])
    • link[rel=stylesheet]:has([charset])
  • 文档标题: head>title
  • HTTPS 页面中是否有引用 HTTP 资源
    • object[codebase=uri]
    • object>param[src=uri]
    • object>param[name=movie][value=uri]
    • embed[src=uri]
    • script[src=uri]
    • link[href=uri]
    • iframe[src=uri]
    • frame[src=uri]
  • 重复 ID 检查
  • 元素异常嵌套情况
    • p>*:not(block-level)
    • pre>*:not(block-level)
    • inline>*:not(block-level)
  • label[for]
  • img[alt][width[height]]
  • ?: textarea[rows][cols]

统计页面资源引用情况:

  • img, javascript, css, flash 这些资源的使用情况
  • 文档大小

HTMLint

HTML 源码验证

在DOMReady后再请求一次当前地址,获得当前页面的HTML源码。然后解析源码:

  • /^(\s*|<!--.*?-->)<!DOCTYPE\s+[^>]+>/
  • Charset: [同 DOMLint]
  • Title: [同 DOMLint]
  • 重复ID检测: [同 DOMLint]
  • 标签非法嵌套情况
    • !inline>block-level
    • !p p
    • !h[1-6]>block-level
    • !pre>block-level
  • 标签的闭合情况
  • label[for]
  • img[alt][width][height]
  • ?: textarea[rows][cols]

统计页面资源引用情况:

  • img, javascript, css, flash 这些资源的使用情况
  • 文档大小

通过再发一次当前页面地址的GET请求,获取HTML源码的方式有以下风险:

  1. PV 倍增,服务器压力倍增
  2. 无法获取POST提交的页面的源码
  3. 服务端设置的token导致重复请求,而使获取的源码不一致
  4. 重复请求对业务可能的影响

所以这种获取源码的方式只适用于使用GET请求访问、仅用于信息展示作用的页面。

另一种方法与DOM类似,取出的内容是被解析过的结果: document.getElementsByTagName('html')[0].outerHTML document.documentElement.outerHTML

终极方法是实现客户端插件,直接读取用户的浏览器缓存。