Skip to content

Commit 7e95fe9

Browse files
committed
Prevent form reading if content-type is invalid
1 parent 6abda6d commit 7e95fe9

4 files changed

Lines changed: 23 additions & 112 deletions

File tree

src/AspNetCore.Honeypot/.editorconfig

Lines changed: 0 additions & 90 deletions
This file was deleted.

src/AspNetCore.Honeypot/HoneypotService.cs

Lines changed: 21 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -34,31 +34,33 @@ public async Task<bool> IsTriggeredAsync(HttpContext httpContext)
3434
{
3535
triggered = true;
3636
}
37-
38-
IFormCollection form = await httpContext.Request.ReadFormAsync();
39-
40-
if (triggered == false && Options.IsFieldCheckEnabled)
37+
else
4138
{
42-
//check fields
43-
triggered = form.Any(x => Options.IsFieldName(x.Key) && x.Value.Any(v => string.IsNullOrEmpty(v) == false));
44-
}
39+
IFormCollection form = await httpContext.Request.ReadFormAsync();
4540

46-
if (triggered == false && Options.IsTimeCheckEnabled)
47-
{
48-
//check time
49-
if (form.TryGetValue(Options.TimeFieldName, out StringValues timeValues))
41+
if (triggered == false && Options.IsFieldCheckEnabled)
5042
{
51-
if (timeValues.Count > 0 && timeValues[0] is string timeValue)
43+
//check fields
44+
triggered = form.Any(x => Options.IsFieldName(x.Key) && x.Value.Any(v => string.IsNullOrEmpty(v) == false));
45+
}
46+
47+
if (triggered == false && Options.IsTimeCheckEnabled)
48+
{
49+
//check time
50+
if (form.TryGetValue(Options.TimeFieldName, out StringValues timeValues))
5251
{
53-
if (long.TryParse(timeValue, out long time))
52+
if (timeValues.Count > 0 && timeValues[0] is string timeValue)
5453
{
55-
TimeSpan diff = DateTime.UtcNow - new DateTime(time, DateTimeKind.Utc);
54+
if (long.TryParse(timeValue, out long time))
55+
{
56+
TimeSpan diff = DateTime.UtcNow - new DateTime(time, DateTimeKind.Utc);
5657

57-
triggered = diff < Options.MinResponseTime;
58-
}
59-
else
60-
{
61-
triggered = true; //time field doesn't contain long value.
58+
triggered = diff < Options.MinResponseTime;
59+
}
60+
else
61+
{
62+
triggered = true; //time field doesn't contain long value.
63+
}
6264
}
6365
}
6466
}

src/AspNetCore.Honeypot/TagHelpers/HoneypotFieldTagHelper.cs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ public class HoneypotFieldTagHelper : TagHelper
1010
{
1111
public HoneypotFieldTagHelper(IOptions<HoneypotOptions> options)
1212
{
13-
Name = "name";
1413
Options = options.Value;
1514
}
1615

@@ -22,7 +21,7 @@ public HoneypotFieldTagHelper(IOptions<HoneypotOptions> options)
2221
/// <summary>
2322
/// Name
2423
/// </summary>
25-
public string Name { get; set; }
24+
public string Name { get; set; } = "name";
2625

2726
public override void Process(TagHelperContext context, TagHelperOutput output)
2827
{

src/AspNetCore.Honeypot/TagHelpers/HoneypotTimeTagHelper.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ public HoneypotTimeTagHelper(IOptions<HoneypotOptions> options)
1616
/// <summary>
1717
/// Options
1818
/// </summary>
19-
public HoneypotOptions Options { get; }
19+
public HoneypotOptions Options { get; }
2020

2121
public override void Process(TagHelperContext context, TagHelperOutput output)
2222
{

0 commit comments

Comments
 (0)