Skip to content

Commit 08f5e5a

Browse files
authored
[WebPubSub] Fix origin validation (Azure#38359)
* Fix multiple Origins not correctly get. * prepare release
1 parent 0d3a007 commit 08f5e5a

File tree

8 files changed

+30
-22
lines changed

8 files changed

+30
-22
lines changed

sdk/webpubsub/Microsoft.Azure.WebJobs.Extensions.WebPubSub/CHANGELOG.md

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,9 @@
11
# Release History
22

3-
## 1.7.0-beta.1 (Unreleased)
4-
5-
### Features Added
6-
7-
### Breaking Changes
3+
## 1.7.0 (2023-08-28)
84

95
### Bugs Fixed
10-
11-
### Other Changes
6+
- Fix multi request origins validation.
127

138
## 1.6.0 (2023-07-12)
149

sdk/webpubsub/Microsoft.Azure.WebJobs.Extensions.WebPubSub/src/Microsoft.Azure.WebJobs.Extensions.WebPubSub.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<PackageId>Microsoft.Azure.WebJobs.Extensions.WebPubSub</PackageId>
66
<PackageTags>Azure, WebPubSub</PackageTags>
77
<Description>Azure Functions extension for the WebPubSub service</Description>
8-
<Version>1.7.0-beta.1</Version>
8+
<Version>1.7.0</Version>
99
<!--The ApiCompatVersion is managed automatically and should not generally be modified manually.-->
1010
<ApiCompatVersion>1.6.0</ApiCompatVersion>
1111
<NoWarn>$(NoWarn);AZC0001;CS8632;CA1056;CA2227</NoWarn>

sdk/webpubsub/Microsoft.Azure.WebJobs.Extensions.WebPubSub/src/Services/WebPubSubRequestExtensions.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ internal static bool IsValidationRequest(this HttpRequest request, out List<stri
101101
request.Headers.TryGetValue(Constants.Headers.WebHookRequestOrigin, out StringValues requestOrigin);
102102
if (requestOrigin.Any())
103103
{
104-
requestHosts = requestOrigin.ToList();
104+
requestHosts = requestOrigin.SelectMany(x => x.Split(Constants.HeaderSeparator, StringSplitOptions.RemoveEmptyEntries)).ToList();
105105
return true;
106106
}
107107
}

sdk/webpubsub/Microsoft.Azure.WebJobs.Extensions.WebPubSub/src/Utilities.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -218,7 +218,9 @@ public static bool IsValidationRequest(this HttpRequestMessage req, out List<str
218218
{
219219
if (req.Method == HttpMethod.Options || req.Method == HttpMethod.Get)
220220
{
221-
requestHosts = req.Headers.GetValues(Constants.Headers.WebHookRequestOrigin).ToList();
221+
requestHosts = req.Headers.GetValues(Constants.Headers.WebHookRequestOrigin)
222+
.SelectMany(x => x.Split(Constants.HeaderSeparator, StringSplitOptions.RemoveEmptyEntries))
223+
.ToList();
222224
return true;
223225
}
224226
requestHosts = null;

sdk/webpubsub/Microsoft.Azure.WebPubSub.AspNetCore/CHANGELOG.md

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,10 @@
11
# Release History
22

3-
## 1.2.0-beta.1 (Unreleased)
4-
5-
### Features Added
6-
7-
### Breaking Changes
3+
## 1.2.0 (2023-08-28)
84

95
### Bugs Fixed
106

11-
### Other Changes
7+
- Fix multi request origins validation.
128

139
## 1.1.0 (2023-07-12)
1410

sdk/webpubsub/Microsoft.Azure.WebPubSub.AspNetCore/src/Extensions/WebPubSubRequestExtensions.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ internal static bool IsPreflightRequest(this HttpRequest request, out IReadOnlyL
100100
request.Headers.TryGetValue(Constants.Headers.WebHookRequestOrigin, out StringValues requestOrigin);
101101
if (requestOrigin.Count > 0)
102102
{
103-
requestOrigins = requestOrigin;
103+
requestOrigins = requestOrigin.SelectMany(x => x.Split(Constants.HeaderSeparator, StringSplitOptions.RemoveEmptyEntries)).ToList();
104104
return true;
105105
}
106106
}

sdk/webpubsub/Microsoft.Azure.WebPubSub.AspNetCore/src/Microsoft.Azure.WebPubSub.AspNetCore.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
<PropertyGroup>
33
<Description>Azure SDK client library for the WebPubSub service</Description>
44
<AssemblyTitle>Azure SDK for WebPubSub</AssemblyTitle>
5-
<Version>1.2.0-beta.1</Version>
5+
<Version>1.2.0</Version>
66
<!--The ApiCompatVersion is managed automatically and should not generally be modified manually.-->
77
<ApiCompatVersion>1.1.0</ApiCompatVersion>
88
<PackageTags>Azure, WebPubSub</PackageTags>

sdk/webpubsub/Microsoft.Azure.WebPubSub.AspNetCore/tests/WebPubSubEventRequestTests.cs

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -273,9 +273,10 @@ public void TestSignatureCheck_MultiSignatureSuccess(string signatures)
273273

274274
[TestCase("OPTIONS", true)]
275275
[TestCase("DELETE", false)]
276-
public void TestAbuseProtection(string httpMethod, bool valid)
276+
[TestCase("OPTIONS", true, true)]
277+
public void TestAbuseProtection(string httpMethod, bool valid, bool multiDomains = false)
277278
{
278-
var context = PrepareHttpContext(TestUri, WebPubSubEventType.System, Constants.Events.ConnectEvent, httpMethod: httpMethod);
279+
var context = PrepareHttpContext(TestUri, WebPubSubEventType.System, Constants.Events.ConnectEvent, httpMethod: httpMethod, multiDomains: multiDomains);
279280

280281
var result = context.Request.IsPreflightRequest(out var requestHosts);
281282

@@ -285,6 +286,14 @@ public void TestAbuseProtection(string httpMethod, bool valid)
285286
{
286287
Assert.NotNull(requestHosts);
287288
Assert.AreEqual(TestUri.Host, requestHosts[0]);
289+
if (multiDomains)
290+
{
291+
Assert.AreEqual(2, requestHosts.Count);
292+
}
293+
else
294+
{
295+
Assert.AreEqual(1, requestHosts.Count);
296+
}
288297
}
289298
}
290299

@@ -309,7 +318,8 @@ private static HttpContext PrepareHttpContext(
309318
string httpMethod = "POST",
310319
string userId = "testuser",
311320
string body = null,
312-
string contentType = Constants.ContentTypes.PlainTextContentType)
321+
string contentType = Constants.ContentTypes.PlainTextContentType,
322+
bool multiDomains = false)
313323
{
314324
var context = new DefaultHttpContext();
315325
var services = new ServiceCollection();
@@ -337,7 +347,12 @@ private static HttpContext PrepareHttpContext(
337347
if (!string.IsNullOrEmpty(uri.Host))
338348
{
339349
headers.Add("Host", uri.Host);
340-
headers.Add(Constants.Headers.WebHookRequestOrigin, uri.Host);
350+
var origins = uri.Host;
351+
if (multiDomains)
352+
{
353+
origins += ", custom.domain.com";
354+
}
355+
headers.Add(Constants.Headers.WebHookRequestOrigin, origins);
341356
}
342357

343358
if (userId != null)

0 commit comments

Comments
 (0)