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

时间:2012-02-24 20:40:53

标签: javascript regex function

我们有一个类似于仅在Firefox中使用的Greasemonkey 的OpenSource扩展。 用户可以提交(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

可以提供哪些帮助:

  • 其他可能的不良模式&功能
  • 过滤混淆尝试的正则表达式

感谢您的想法!!

编辑:

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

1 个答案:

答案 0 :(得分:7)

社区维基

添加您的任何想法,请注意,这是粗略检查

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

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

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

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

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

其他:

  • Function 构造函数和 setTimeout / setInterval ,带有字符串参数 - Eval in伪装
  • 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 - 与上一个相同(FF中不存在outerHTML
  • Many eventssetAttributeaddEventListener等。
  • Worker - 从外部来源(!)
  • 加载网络工作者
  • location / document.URL - 更改网页的位置
  • history - 历史/位置操作(!)
  • document.implementation - 创建任意文档。
  • DOMParser - 创建任意文档。
  • Object.defineProperty / __defineGetter__ / __defineSetter__ 等。
  • WebSocket / MozWebSocket
  • console 或其任何属性
  • debugger 语句 - 用作调试目的的断点
  • InstallTrigger - 特定于Firefox的对象to manage installs
  • 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,}