扫描Javascript以查看滥用的功能和模式

Ema*_*ail 10 javascript regex function

我们有一个类似于Greasemonkey的OpenSource Extension,仅用于Firefox.用户可以提交(Java)脚本供其他用户运行. 这会通过发送恶意代码而被滥用.

我们希望将来使用提交的代码的脚本进行粗略的自动检查.

我们不允许或不想进一步调查:

  • 发出页面请求
  • 混淆尝试

我们已经过滤了:

  • BTOA
  • EVAL
  • 窗口.
  • url的正则表达式/^(http|https | ftp)://( [A-Z0-9] [A-Z0-9_-]*(?:.[A-Z0-9] [A-Z0-9_ - ]*)+):???(\ d +)//I
  • 上面的url正则表达式调整为escape,encode,encodeURI,encodeURIComponent v.versa

有什么可以帮助:

  • 其他可能的坏模式和功能
  • 用于过滤混淆尝试的正则表达式

谢谢你的想法!!

编辑:

我想到目前为止这是它.感谢每一位贡献者!欢迎找到一个广泛有效的正则表达式来过滤已经混淆的代码.

Rob*_*b W 7

社区维基

添加您的任何想法,并记住这是一个粗略的检查.

事先提示:也可以通过Google的Closure编译器运行代码,轻松摆脱像window['e'+'v'+'a'+l]('....')和字符转义序列这样的构造\x65\x76\x61\x6c.

不仅要检查功能危险.例如,类型化数组是用垃圾填充内存的简单方法,导致用户操作系统不稳定.如果脚本量允许,我建议在沙箱中测试脚本,例如在VM中.

window.pollute = new ArrayBuffer(2e9); // Reserves 2 GB of memory
while(1);                              // Infinite loops
Run Code Online (Sandbox Code Playgroud)

全局对象(这些对象的任何排列):

  • window
  • document.defaultView
  • top
  • parent
  • frames
  • self
  • content

其他:

  • Function构造和setTimeout/ setInterval变相评估和演示-一个字符串参数
  • document.createElement - 可能注入代码或外部资源.
  • cloneNode/ appendChild/ replaceChild/ insertBefore- 与动态元素结合时危险.
  • document.scripts - 基本上任何DOM操作!
  • document.cookie/ localStorage/globalStorage
  • XMLHttpRequest
  • document.forms - HTTP请求
  • document.anchors/ document.links- 欺骗链接?
  • document.applets/ document.embeds/document.plugins
  • document.load - 加载(XML)文档
  • document.execCommand - 对当前文档执行命令
  • Image/ Audio- HTTP请求
  • open (弹出窗口)
  • document.open/ document.write/ document.writeln-更换或在当前页面中注入任意数据
  • innerHTML/ outerHTML- 与上一个相同(outerHTML在FF中不存在)
  • 许多事件setAttribute,addEventListener等等.
  • Worker - 从外部来源加载Web工作者(!)
  • location/ document.URL- 更改页面的位置
  • history - 历史/位置操纵(!)
  • document.implementation - 创建任意文档.
  • DOMParser - 创建任意文档.
  • Object.defineProperty/ __defineGetter__/ __defineSetter__
  • WebSocket/MozWebSocket
  • console 或其任何财产
  • debugger 语句 - 用作调试目的的断点
  • InstallTrigger- 用于管理安装的特定 Firefox的对象.
  • File/ FileReader/ FormData/MozBlobBuilder
  • Packages/java

困惑

..检测可以通过两种方式完成(搜索功能或输出).

搜索混淆函数:

  • unescape/escape
  • encodeURIComponent/decodeURIComponent
  • encodeURI/decodeURI
  • btoa/atob
  • /\\x[0-9a-f]{2}|\\u\d{4}/i - 匹配编码字符的模式.
  • HTML实体(与事件属性一起).

搜索混淆输出:

  • 正则表达式搜索大于X的字符串,例如23 [^']{23,}

  • 这份清单远未完成.我发了CW这篇文章鼓励编辑. (3认同)