限制调用的方法具体是哪一个

    1. import java
    2. from MethodAccess sink
    3. where sink.getMethod().hasQualifiedName("java.sql", "Statement", "executeQuery")
    4. select sink, sink.getArgument(0)

    匹配结果示例
    image.png

    获取一个调用所有的参数

    1. ma.getAnArgument()
    1. ma.getArgument(_)

    获取指定的表达式在哪个方法中使用了

    1. from RemoteFlowSource source,Method m
    2. where
    3. source.getLocation().getFile().getBaseName() = "DepartmentController.java" and
    4. source.asExpr().getEnclosingCallable() = m
    5. or
    6. m.getAParameter() = source.asParameter()
    7. select source,m

    CodeQL Java 获取字符串类型的参数值
    经常需要获取参数的数值,像下面这两个,我们希望获取的是funApprover跟codes
    image.png
    image.png
    在获取字符串类型的参数值时,如果直接调用toString方法,会将包含双引号的整体输出
    image.png
    需要把这个参数值从Expr类型转为StringLiteral类型,然后调用StringLiteral类型的getValue方法
    image.png