Package edu.umd.cs.findbugs.detect
Class FindSqlInjection
- java.lang.Object
-
- edu.umd.cs.findbugs.detect.FindSqlInjection
-
- All Implemented Interfaces:
Detector,Priorities
public class FindSqlInjection extends java.lang.Object implements Detector
Find potential SQL injection vulnerabilities.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description private static classFindSqlInjection.StringAppendState
-
Field Summary
Fields Modifier and Type Field Description (package private) java.util.Set<MethodDescriptor>allMethods(package private) BugAccumulatorbugAccumulator(package private) BugReporterbugReporter(package private) ClassContextclassContext(package private) static java.util.regex.PatterncloseQuotePatternprivate static MethodDescriptor[]EXECUTE_METHODS(package private) java.util.Map<MethodDescriptor,int[]>executeMethods(package private) org.apache.bcel.classfile.Methodmethod(package private) static java.util.regex.PatternopenQuotePatternprivate static java.lang.String[]PREPARE_STATEMENT_SIGNATURES(package private) java.util.Map<MethodDescriptor,int[]>preparedStatementMethods-
Fields inherited from interface edu.umd.cs.findbugs.Priorities
EXP_PRIORITY, HIGH_PRIORITY, IGNORE_PRIORITY, LOW_PRIORITY, NORMAL_PRIORITY
-
-
Constructor Summary
Constructors Constructor Description FindSqlInjection(BugReporter bugReporter)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description private voidanalyzeMethod(ClassContext classContext, org.apache.bcel.classfile.Method method)private BugInstancegenerateBugInstance(org.apache.bcel.classfile.JavaClass javaClass, org.apache.bcel.generic.MethodGen methodGen, org.apache.bcel.generic.InstructionHandle handle, FindSqlInjection.StringAppendState stringAppendState, boolean isExecute)private java.util.Set<ValueNumber>getPassthruParams(ValueNumberDataflow vnd, org.apache.bcel.classfile.Method method, org.apache.bcel.classfile.JavaClass javaClass)private org.apache.bcel.generic.InstructionHandlegetPreviousInstruction(org.apache.bcel.generic.InstructionHandle handle, boolean skipNops)private LocationgetPreviousLocation(CFG cfg, Location startLocation, boolean skipNops)private FindSqlInjection.StringAppendStategetStringAppendState(ClassContext ctx, CFG cfg, org.apache.bcel.generic.ConstantPoolGen cpg)private LocationgetValueNumberCreationLocation(ValueNumberDataflow vnd, ValueNumber vn)static booleanisCloseQuote(java.lang.String s)private booleanisConstantStringLoad(Location location, org.apache.bcel.generic.ConstantPoolGen cpg)private booleanisJava9AndAboveStringAppend(org.apache.bcel.generic.Instruction ins, org.apache.bcel.generic.ConstantPoolGen cpg)static booleanisOpenQuote(java.lang.String s)private booleanisSafeValue(Location location, org.apache.bcel.generic.ConstantPoolGen cpg)private booleanisStringAppend(org.apache.bcel.generic.Instruction ins, org.apache.bcel.generic.ConstantPoolGen cpg)voidreport()This method is called after all classes to be visited.private FindSqlInjection.StringAppendStateupdateJava9AndAboveStringAppendState(ClassContext ctx, Location location, org.apache.bcel.generic.ConstantPoolGen cpg, FindSqlInjection.StringAppendState stringAppendState)private FindSqlInjection.StringAppendStateupdateStringAppendState(Location location, org.apache.bcel.generic.ConstantPoolGen cpg, FindSqlInjection.StringAppendState stringAppendState)voidvisitClassContext(ClassContext classContext)Visit the ClassContext for a class which should be analyzed for instances of bug patterns.
-
-
-
Field Detail
-
PREPARE_STATEMENT_SIGNATURES
private static final java.lang.String[] PREPARE_STATEMENT_SIGNATURES
-
EXECUTE_METHODS
private static final MethodDescriptor[] EXECUTE_METHODS
-
bugReporter
BugReporter bugReporter
-
bugAccumulator
BugAccumulator bugAccumulator
-
preparedStatementMethods
final java.util.Map<MethodDescriptor,int[]> preparedStatementMethods
-
executeMethods
final java.util.Map<MethodDescriptor,int[]> executeMethods
-
allMethods
final java.util.Set<MethodDescriptor> allMethods
-
openQuotePattern
static final java.util.regex.Pattern openQuotePattern
-
closeQuotePattern
static final java.util.regex.Pattern closeQuotePattern
-
method
org.apache.bcel.classfile.Method method
-
classContext
ClassContext classContext
-
-
Constructor Detail
-
FindSqlInjection
public FindSqlInjection(BugReporter bugReporter)
-
-
Method Detail
-
visitClassContext
public void visitClassContext(ClassContext classContext)
Description copied from interface:DetectorVisit the ClassContext for a class which should be analyzed for instances of bug patterns.- Specified by:
visitClassContextin interfaceDetector- Parameters:
classContext- the ClassContext
-
isStringAppend
private boolean isStringAppend(org.apache.bcel.generic.Instruction ins, org.apache.bcel.generic.ConstantPoolGen cpg)
-
isJava9AndAboveStringAppend
private boolean isJava9AndAboveStringAppend(org.apache.bcel.generic.Instruction ins, org.apache.bcel.generic.ConstantPoolGen cpg)
-
isConstantStringLoad
private boolean isConstantStringLoad(Location location, org.apache.bcel.generic.ConstantPoolGen cpg)
-
isOpenQuote
public static boolean isOpenQuote(java.lang.String s)
-
isCloseQuote
public static boolean isCloseQuote(java.lang.String s)
-
updateStringAppendState
private FindSqlInjection.StringAppendState updateStringAppendState(Location location, org.apache.bcel.generic.ConstantPoolGen cpg, FindSqlInjection.StringAppendState stringAppendState)
-
updateJava9AndAboveStringAppendState
private FindSqlInjection.StringAppendState updateJava9AndAboveStringAppendState(ClassContext ctx, Location location, org.apache.bcel.generic.ConstantPoolGen cpg, FindSqlInjection.StringAppendState stringAppendState)
-
getStringAppendState
private FindSqlInjection.StringAppendState getStringAppendState(ClassContext ctx, CFG cfg, org.apache.bcel.generic.ConstantPoolGen cpg) throws CFGBuilderException
- Throws:
CFGBuilderException
-
isSafeValue
private boolean isSafeValue(Location location, org.apache.bcel.generic.ConstantPoolGen cpg) throws CFGBuilderException
- Throws:
CFGBuilderException
-
getPreviousInstruction
@CheckForNull private org.apache.bcel.generic.InstructionHandle getPreviousInstruction(org.apache.bcel.generic.InstructionHandle handle, boolean skipNops)
-
getPreviousLocation
@CheckForNull private Location getPreviousLocation(CFG cfg, Location startLocation, boolean skipNops)
-
generateBugInstance
private BugInstance generateBugInstance(org.apache.bcel.classfile.JavaClass javaClass, org.apache.bcel.generic.MethodGen methodGen, org.apache.bcel.generic.InstructionHandle handle, FindSqlInjection.StringAppendState stringAppendState, boolean isExecute)
-
analyzeMethod
private void analyzeMethod(ClassContext classContext, org.apache.bcel.classfile.Method method) throws DataflowAnalysisException, CFGBuilderException
-
getValueNumberCreationLocation
private Location getValueNumberCreationLocation(ValueNumberDataflow vnd, ValueNumber vn)
-
getPassthruParams
private java.util.Set<ValueNumber> getPassthruParams(ValueNumberDataflow vnd, org.apache.bcel.classfile.Method method, org.apache.bcel.classfile.JavaClass javaClass)
-
-