Skip to content

Commit 6d8c0dd

Browse files
committed
Optimize dkim signature parser logic
1 parent 44f3ede commit 6d8c0dd

File tree

2 files changed

+11
-3
lines changed

2 files changed

+11
-3
lines changed

src/Nager.EmailAuthentication/FragmentParsers/DkimSignatureDataFragmentParserV1.cs

+10-2
Original file line numberDiff line numberDiff line change
@@ -516,9 +516,8 @@ private static ParsingResult[] ValidateSignedHeaderFields(ValidateRequest valida
516516

517517
var parts = validateRequest.Value.Split(':');
518518

519-
//TODO: check that headers are signed at most twice (only oversigning)
520519
//https://security.stackexchange.com/questions/265408/how-many-times-need-e-mail-headers-be-signed-with-dkim-to-mitigate-dkim-header-i#:~:text=If%20the%20e%2Dmail%20uses,field%20of%20the%20DKIM%20signature.
521-
var groupedHeaders = parts.GroupBy(o => o).Select(g => new { g.Key, Count = g.Count() });
520+
var groupedHeaders = parts.GroupBy(o => o).Select(g => new { Key = g.Key.ToLower(), Count = g.Count() });
522521
foreach (var groupedHeader in groupedHeaders)
523522
{
524523
if (groupedHeader.Count == 2)
@@ -530,6 +529,15 @@ private static ParsingResult[] ValidateSignedHeaderFields(ValidateRequest valida
530529
Message = $"{groupedHeader.Key} oversigning detected"
531530
});
532531
}
532+
else if (groupedHeader.Count > 2)
533+
{
534+
parsingResults.Add(new ParsingResult
535+
{
536+
Status = ParsingStatus.Warning,
537+
Field = validateRequest.Field,
538+
Message = $"{groupedHeader.Key} multiple occurrences of the same header detected"
539+
});
540+
}
533541
}
534542

535543
var recommendedHeaders = new string[] { "from", "to", "subject", "reply-to", "date", "cc", "content-type" };

src/Nager.EmailAuthentication/Nager.EmailAuthentication.csproj

+1-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020

2121
<TargetFrameworks>net8.0;net9.0</TargetFrameworks>
2222

23-
<Version>2.0.2</Version>
23+
<Version>2.0.3</Version>
2424
</PropertyGroup>
2525

2626
<ItemGroup>

0 commit comments

Comments
 (0)