@@ -799,6 +799,63 @@ public async Task AllOptionsDisabledRequestDoesntChange()
799
799
Assert . Equal ( "http" , context . Request . Scheme ) ;
800
800
}
801
801
802
+ [ Theory ]
803
+ [ InlineData ( ForwardedHeaders . XForwardedFor , false ) ]
804
+ [ InlineData ( ForwardedHeaders . XForwardedFor , true ) ]
805
+ [ InlineData ( ForwardedHeaders . XForwardedHost , false ) ]
806
+ [ InlineData ( ForwardedHeaders . XForwardedHost , true ) ]
807
+ [ InlineData ( ForwardedHeaders . XForwardedProto , false ) ]
808
+ [ InlineData ( ForwardedHeaders . XForwardedProto , true ) ]
809
+ public async Task IgnoreXForwardedHeadersFromUnknownProxy ( ForwardedHeaders forwardedHeaders , bool unknownProxy )
810
+ {
811
+ var builder = new WebHostBuilder ( )
812
+ . Configure ( app =>
813
+ {
814
+ var options = new ForwardedHeadersOptions
815
+ {
816
+ ForwardedHeaders = forwardedHeaders
817
+ } ;
818
+ if ( ! unknownProxy )
819
+ {
820
+ var proxy = IPAddress . Parse ( "10.0.0.1" ) ;
821
+ options . KnownProxies . Add ( proxy ) ;
822
+ }
823
+ app . UseForwardedHeaders ( options ) ;
824
+ } ) ;
825
+ var server = new TestServer ( builder ) ;
826
+
827
+ var context = await server . SendAsync ( c =>
828
+ {
829
+ c . Request . Headers [ "X-Forwarded-For" ] = "11.111.111.11" ;
830
+ c . Request . Headers [ "X-Forwarded-Host" ] = "testhost" ;
831
+ c . Request . Headers [ "X-Forwarded-Proto" ] = "Protocol" ;
832
+ c . Connection . RemoteIpAddress = IPAddress . Parse ( "10.0.0.1" ) ;
833
+ c . Connection . RemotePort = 99 ;
834
+ } ) ;
835
+
836
+ if ( unknownProxy )
837
+ {
838
+ Assert . Equal ( "10.0.0.1" , context . Connection . RemoteIpAddress . ToString ( ) ) ;
839
+ Assert . Equal ( "localhost" , context . Request . Host . ToString ( ) ) ;
840
+ Assert . Equal ( "http" , context . Request . Scheme ) ;
841
+ }
842
+ else
843
+ {
844
+ if ( forwardedHeaders . HasFlag ( ForwardedHeaders . XForwardedFor ) )
845
+ {
846
+ Assert . Equal ( "11.111.111.11" , context . Connection . RemoteIpAddress . ToString ( ) ) ;
847
+ }
848
+ if ( forwardedHeaders . HasFlag ( ForwardedHeaders . XForwardedHost ) )
849
+ {
850
+ Assert . Equal ( "testhost" , context . Request . Host . ToString ( ) ) ;
851
+ }
852
+ if ( forwardedHeaders . HasFlag ( ForwardedHeaders . XForwardedProto ) )
853
+ {
854
+ Assert . Equal ( "Protocol" , context . Request . Scheme ) ;
855
+ }
856
+ }
857
+ }
858
+
802
859
[ Fact ]
803
860
public async Task PartiallyEnabledForwardsPartiallyChangesRequest ( )
804
861
{
0 commit comments