静态代码和动态代码的区别_静态代码扫描方法及工具介绍

本文介绍了静态代码扫描的概念,包括AST抽象语法树分析和正则匹配两种常见方法。通过AST扫描,利用Esprima将源代码转换为AST,检测源码中用户可控变量流向敏感函数的情况。正则匹配则通过匹配敏感字符或代码片段来寻找潜在漏洞。此外,文章还提到了JavaScript静态扫描工具jsprime和NodeJSScan的工作原理和使用方法。
摘要由CSDN通过智能技术生成

来自:信安之路(微信号:xazlsec)

本文作者:国勇(信安之路特约作者)

静态扫描就是不运行程序,通过扫描源代码的方式检查漏洞,常见的方法也有多种,如把源代码生成 AST(抽象语法树)后对 AST 进行分析,找出用户可控变量的使用过程是否流入到了危险函数,从而定位出漏洞;或者通过正则规则来匹配源代码,根据平常容易产生漏洞的代码定制出规则,把这些规则代入到代码中进行验证来定位漏洞。当然静态扫描由于不运行程序也有好多事情处理不了,如程序通过运算得到的一个结果后,就没办法分析这个结果了,所以需要动态运行程序来解决这个问题,也就是动态扫描,动态扫描可以通过单元测试或人工扫描等方式,下面分别介绍一下 AST 扫描 与 正则匹配两种常见静态扫描方式。

AST(抽象语法树)扫描

d3e5ceb6075e1ec142c0bf85c58bed90.png

此方式把源码生成 AST(抽象语法树),找出用户可控的 source (如 location.hrefdocument.urldocument.documentURI) 是否流入到了敏感的 sink (如 evilnew functionsetTImeoutsetInterval) 中,常见的 source 与 sink 可参考这个文档:

https://docs.google.com/spreadsheets/d/1Mnuqkbs9L-s3QpQtUrOkPx6t5dR3QyQo24kCVYQy7YY/edit#gid=0。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值