| description | Guidance for developing CodeQL queries targeting C# code |
|---|
This prompt provides guidance for developing CodeQL queries targeting C# code. For common query development patterns and best practices, see query_development.prompt.md.
- Import
csharpfor C# AST nodes and predicates - Use
dotnetimports for .NET Framework specific features - Common imports:
Stmt,Expr,Method,Class,Namespace - For comprehensive C# AST reference, see C# AST Nodes
- Classes:
Classfor class declarations - Methods:
Method,Constructor,Getter,Setterfor method definitions - Properties:
PropertywithGetterandSetteraccessors - Fields:
Fieldfor field declarations - Statements:
BlockStmt,LocalVariableDeclStmt,ExprStmt,IfStmt,ForStmt,ForeachStmt,WhileStmt,DoStmt,SwitchStmt,TryStmt,CaseStmt - Expressions:
MethodCall,PropertyCall,FieldAccess,LocalVariableAccess,ParameterAccess,ObjectCreation,AssignExpr,BinaryExpr(e.g.,GTExpr,LTExpr,EQExpr) - Assignment Expressions:
AssignExpr,AssignAddExpr,AssignSubExpr,AssignMulExpr,AssignDivExprfor compound assignments - Declarations:
LocalVariableDeclAndInitExpr,LocalVariableDeclExpr,Parameter - Literals:
StringLiteralUtf16,IntLiteral,ArrayCreation - Type Access:
TypeMention,TypeAccessfor type references - Control Flow:
ConstCase,DefaultCase,SpecificCatchClausefor exception handling - Modern C# Features:
TupleExprfor tuple expressions,CastExprfor type casting,VariablePatternExprfor pattern matching,RecursivePatternExprandPositionalPatternExprfor complex patterns - Security Analysis: Use
DataFlow::NodeandTaintTracking::Configurationfor security query implementation
- Method calls:
methodCall.getTarget().hasName("methodName") - Type checking:
expr.getType().hasName("TypeName") - Attribute usage:
attributable.getAnAttribute().hasName("AttributeName") - Compound assignments:
AssignAddExpr,AssignSubExprfor+=,-=operations - Variable declarations:
LocalVariableDeclAndInitExprfor initialized declarations - Tuple operations:
TupleExprfor tuple creation and destructuring - Pattern matching:
VariablePatternExpr,RecursivePatternExpr,PositionalPatternExprin switch expressions - Type casting:
CastExprfor explicit type conversions - Local variable access:
LocalVariableAccessfor local variable usage - Parameter access:
ParameterAccessfor method parameter usage - LINQ queries: Look for
LinqExpressionand related classes - Async/await: Use
AsyncMethod,AwaitExpr - Security taint tracking: Use
TaintTracking::Configurationfor vulnerability detection - Data flow analysis: Use
DataFlow::Nodefor tracking data movement
- SQL injection via Entity Framework or ADO.NET
- XSS in ASP.NET applications
- Insecure deserialization
- Path traversal in file operations
- Authentication and authorization bypasses
- Inappropriate encoding (CWE-838) - wrong encoding for context
- Command injection in System.Diagnostics.Process
- SSRF in HTTP client requests
For comprehensive C# security query implementation guidance, see C# Security Query Guide.
- Tuples: Use
TupleExprfor tuple expressions like(a, b)or(x: 1, y: 2) - Pattern Matching:
VariablePatternExprfor simple patterns,RecursivePatternExprfor property patterns,PositionalPatternExprfor positional patterns - Switch Expressions: Enhanced switch with pattern matching capabilities
- Local Functions: Nested function definitions within methods
- Compound Assignment:
AssignAddExpr,AssignSubExpr, etc. for+=,-=operations - Type Casting:
CastExprfor explicit type conversions and safe casting - Variable Declarations:
LocalVariableDeclExprvsLocalVariableDeclAndInitExprfor different declaration patterns