Skip to content

Commit eed1f45

Browse files
committed
C#: Move the isCallOnReponseHeaderAccess out of each disjunkt.
1 parent e352764 commit eed1f45

1 file changed

Lines changed: 33 additions & 25 deletions

File tree

‎csharp/ql/lib/semmle/code/csharp/security/MissingXFrameOptionsQuery.qll‎

Lines changed: 33 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -60,45 +60,53 @@ private predicate isCallOnResponseHeadersAccess(Call call) {
6060
)
6161
}
6262

63-
/** Gets an expression that configures a clickjacking-related response header. */
64-
Call getAClickjackingHeaderWrite() {
63+
private predicate isClickjackingHeaderCall(MethodCall call) {
6564
(
66-
result.getTarget() = any(SystemWebHttpResponseClass r).getAppendHeaderMethod() or
67-
result.getTarget() = any(SystemWebHttpResponseClass r).getAddHeaderMethod()
65+
call.getTarget() = any(SystemWebHttpResponseClass r).getAppendHeaderMethod() or
66+
call.getTarget() = any(SystemWebHttpResponseClass r).getAddHeaderMethod()
6867
) and
6968
(
70-
isXFrameOptionsHeaderNameExpr(result.getArgumentForName("name"))
69+
isXFrameOptionsHeaderNameExpr(call.getArgumentForName("name"))
7170
or
72-
isContentSecurityPolicyHeaderNameExpr(result.getArgumentForName("name")) and
73-
containsFrameAncestorsDirectiveExpr(result.getArgumentForName("value"))
71+
isContentSecurityPolicyHeaderNameExpr(call.getArgumentForName("name")) and
72+
containsFrameAncestorsDirectiveExpr(call.getArgumentForName("value"))
7473
)
75-
or
76-
result.getTarget().hasUndecoratedName(["Append", "Add", "TryAdd"]) and
77-
isCallOnResponseHeadersAccess(result) and
74+
}
75+
76+
private predicate isClickjackingHeaderDictionaryLikeWrite(Call call) {
7877
(
79-
isXFrameOptionsHeaderNameExpr(result.getArgumentForName("key"))
78+
call.getTarget().hasUndecoratedName(["Append", "Add", "TryAdd"])
8079
or
81-
isContentSecurityPolicyHeaderNameExpr(result.getArgumentForName("key")) and
82-
containsFrameAncestorsDirectiveExpr(result.getArgumentForName("value"))
80+
call.(IndexerCall).getTarget() instanceof Setter
81+
) and
82+
(
83+
isXFrameOptionsHeaderNameExpr(call.getArgumentForName("key"))
84+
or
85+
isContentSecurityPolicyHeaderNameExpr(call.getArgumentForName("key")) and
86+
containsFrameAncestorsDirectiveExpr(call.getArgumentForName("value"))
8387
)
84-
or
85-
result.getTarget() instanceof Setter and
86-
isCallOnResponseHeadersAccess(result) and
88+
}
89+
90+
private predicate isClickjackingPropertyWrite(Call c) {
91+
c.getTarget() instanceof Setter and
8792
(
88-
isXFrameOptionsHeaderNameExpr(result.getArgumentForName("key"))
93+
c.(PropertyCall).getProperty() =
94+
any(MicrosoftAspNetCoreHttpIHeaderDictionary dic).getXFrameOptionsProperty()
8995
or
90-
isContentSecurityPolicyHeaderNameExpr(result.getArgumentForName("key")) and
91-
containsFrameAncestorsDirectiveExpr(result.getArgumentForName("value"))
96+
c.(PropertyCall).getProperty() =
97+
any(MicrosoftAspNetCoreHttpIHeaderDictionary dic).getContentSecurityPolicyProperty() and
98+
containsFrameAncestorsDirectiveExpr(c.getArgumentForName("value"))
9299
)
100+
}
101+
102+
/** Gets an expression that configures a clickjacking-related response header. */
103+
Call getAClickjackingHeaderWrite() {
104+
isClickjackingHeaderCall(result)
93105
or
94-
result.getTarget() instanceof Setter and
95106
isCallOnResponseHeadersAccess(result) and
96107
(
97-
result.(PropertyCall).getProperty() =
98-
any(MicrosoftAspNetCoreHttpIHeaderDictionary dic).getXFrameOptionsProperty()
108+
isClickjackingHeaderDictionaryLikeWrite(result)
99109
or
100-
result.(PropertyCall).getProperty() =
101-
any(MicrosoftAspNetCoreHttpIHeaderDictionary dic).getContentSecurityPolicyProperty() and
102-
containsFrameAncestorsDirectiveExpr(result.getArgumentForName("value"))
110+
isClickjackingPropertyWrite(result)
103111
)
104112
}

0 commit comments

Comments
 (0)