Skip to content

Commit 66d4840

Browse files
committed
Move MissingXFrameOptionsQuery, optimize isClickjackingHeader
1 parent 56fe8a4 commit 66d4840

3 files changed

Lines changed: 20 additions & 11 deletions

File tree

csharp/ql/src/Security Features/MissingXFrameOptionsLib.qll renamed to csharp/ql/lib/semmle/code/csharp/security/MissingXFrameOptionsQuery.qll

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -47,12 +47,6 @@ private predicate containsFrameAncestorsDirectiveExpr(Expr value) {
4747
containsFrameAncestorsDirective(value.stripImplicit().getValue())
4848
}
4949

50-
private predicate isClickjackingHeader(Expr name, Expr value) {
51-
isXFrameOptionsHeaderNameExpr(name)
52-
or
53-
isContentSecurityPolicyHeaderNameExpr(name) and containsFrameAncestorsDirectiveExpr(value)
54-
}
55-
5650
private predicate isDirectResponseHeadersAccess(Expr expr) {
5751
exists(PropertyAccessExpr headers, MicrosoftAspNetCoreHttpHttpResponse response |
5852
expr.stripImplicit() = headers and headers.getProperty() = response.getHeadersProperty()
@@ -78,18 +72,33 @@ private predicate isClickjackingHeaderCall(MethodCall call) {
7872
call.getTarget() = any(SystemWebHttpResponseClass r).getAppendHeaderMethod() or
7973
call.getTarget() = any(SystemWebHttpResponseClass r).getAddHeaderMethod()
8074
) and
81-
isClickjackingHeader(call.getArgumentForName("name"), call.getArgumentForName("value"))
75+
(
76+
isXFrameOptionsHeaderNameExpr(call.getArgumentForName("name"))
77+
or
78+
isContentSecurityPolicyHeaderNameExpr(call.getArgumentForName("name")) and
79+
containsFrameAncestorsDirectiveExpr(call.getArgumentForName("value"))
80+
)
8281
or
8382
call.getTarget().hasUndecoratedName(["Append", "Add", "TryAdd"]) and
8483
isResponseHeadersAccess(getHeaderDictionaryReceiver(call)) and
85-
isClickjackingHeader(call.getArgumentForName("key"), call.getArgumentForName("value"))
84+
(
85+
isXFrameOptionsHeaderNameExpr(call.getArgumentForName("key"))
86+
or
87+
isContentSecurityPolicyHeaderNameExpr(call.getArgumentForName("key")) and
88+
containsFrameAncestorsDirectiveExpr(call.getArgumentForName("value"))
89+
)
8690
}
8791

8892
private predicate isClickjackingHeaderIndexerAssignment(AssignExpr assignment) {
8993
exists(IndexerCall indexer |
9094
assignment.getLeftOperand() = indexer and
9195
isResponseHeadersAccess(indexer.getQualifier()) and
92-
isClickjackingHeader(indexer.getArgument(0), assignment.getRightOperand())
96+
(
97+
isXFrameOptionsHeaderNameExpr(indexer.getArgument(0))
98+
or
99+
isContentSecurityPolicyHeaderNameExpr(indexer.getArgument(0)) and
100+
containsFrameAncestorsDirectiveExpr(assignment.getRightOperand())
101+
)
93102
)
94103
}
95104

‎csharp/ql/src/Security Features/CWE-451/MissingXFrameOptions.ql‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515

1616
import csharp
1717
import semmle.code.asp.WebConfig
18-
import Security_Features.MissingXFrameOptionsLib
18+
import semmle.code.csharp.security.MissingXFrameOptionsQuery
1919

2020
XmlElement getAWebConfigRoot(WebConfigXml webConfig) {
2121
result = webConfig.getARootElement()

‎csharp/ql/test/query-tests/Security Features/CWE-451/MissingXFrameOptions/HeaderWrites/HeaderWrites.ql‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
*/
66

77
import csharp
8-
import Security_Features.MissingXFrameOptionsLib
8+
import semmle.code.csharp.security.MissingXFrameOptionsQuery
99

1010
from Expr write
1111
where write = getAClickjackingHeaderWrite()

0 commit comments

Comments
 (0)