-
-
Notifications
You must be signed in to change notification settings - Fork 311
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
变量赋值时右值为变量拼接时存在问题 #62
Comments
猜测应该是常量拼接 |
之前遇到过这个问题...主要是我在测试中遇到过一个问题,就是变量如果来自拼接,就会来自一个列表,如果这个列表中部分可控部分不可控,这个变量是不一定可控的,之前误报太多,所以后来暂时把这部分改为只要有一个变量为确认的可控或者不可控,就确定了 |
还有一个问题就是遇到大型的代码,这种分支会无限的递归下去,比较难处理 |
但是实际上有很多,外部变量都不是直接引用的,都是或多或少拼接的。 |
我看你还继续保留字面量,我觉得可以像cobra那样在处理等号右边的expr的时候直接忽略了,没必要再放到列表里面,再做一次递归了。 |
哪个地方递归了? |
我感觉如果拼接,可以视为一种净化,减少误报,真正运用在sdl中如果误报过多会崩溃的,让sast解决它能解决的问题。 |
现在的方案是,逐个处理,如果遇到其中一个为确认的可控或者确认的不可控,就不继续下去了,还是算递归的。 |
例如
这是在parameters_back最前面的一个logger |
这里的random应该是来自$pid="random";,不是那个异或 |
师傅我完整的递归给你看看,这个地方是
师傅我注释掉了 最前面的略过的逻辑就是下面这句 # 如果目标参数就在列表中,就会有新的问题,这里选择,如果存在,则跳过
#if param_name in param_expr:
# logger.debug("[AST] param {} in list {}, continue...".format(param_name, param_expr)) |
其中的test输出 可以忽略 |
|
我知道怎么回事了,我看看怎么修 |
师傅理论上如果我把上面那个地方注释掉了,就可以检测出来, 但是结果是没有,我还在找递归逻辑哪里不对 -。- |
我具体不太记得了,只是模糊记得,因为这个list会出现在很多地方,还有函数参数,所以很容易遇到问题,调整了很多次... 我想我可能需要一个看板,把每次修复时候遇到的范例代码记下来...完全不记得了 |
我想我找到了 这里当发现一个可控是不是就可以返回了呢?没有必要再继续遍历了? if _is_co != -1: # 当参数可控时,值赋给is_co 和 cp,有一个参数可控,则认定这个函数可能可控
is_co = _is_co
cp = _cp
+ return is_co,cp,expr_lineno
这里我加了之后 检测出来了 |
如果你在这里return就会遇到我说的那个...你遇到一个可控就判定为可控了,但是并不是所有的拼接都有问题... |
这个问题暂时先放一下,我有空细跟下吧 |
师傅邮箱多少? 有时间我想请教一下师傅! |
|
为什么这里会选择略过呢? 考虑了什么逻辑?
The text was updated successfully, but these errors were encountered: