我们有一个类似于仅在Firefox中使用的Greasemonkey 的OpenSource扩展。 用户可以提交(Java)脚本供其他用户运行。 这会因发送恶意代码而被滥用。
我们希望将来使用提交的代码脚本粗略地自动检查。
我们不允许或想要进一步调查:
我们已经过滤了
可以提供哪些帮助:
感谢您的想法!!
编辑:
我想到目前为止这是它。感谢每一位贡献者! 欢迎使用广泛有效的正则表达式来过滤已经混淆的代码。
答案 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
)setAttribute
,addEventListener
等。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
- 匹配编码字符的模式。搜索混淆输出:
[^']{23,}
?