thenatog commented on a change in pull request #4206:
URL: https://github.com/apache/nifi/pull/4206#discussion_r422274317



##########
File path: 
nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-jetty/src/main/java/org/apache/nifi/web/server/JettyServer.java
##########
@@ -659,11 +667,27 @@ private void addDocsServlets(WebAppContext docsContext) {
     }
 
     /**
-     * Adds configurable filters to the given context.  Currently, this 
implementation adds `DosFilter` and `ContentLengthFilter` filters.
-     * @param path path spec for filters
-     * @param webappContext context to which filters will be added
+     * Adds configurable filters to the given context.  Currently, this 
implementation adds {@code DosFilter} and {@link ContentLengthFilter} filters.
+     *
+     * @param path          path spec for filters ({@code /*} by convention in 
this class)
+     * @param webAppContext context to which filters will be added
+     * @param props         the {@link NiFiProperties}
      */
-    private void addFiltersWithProps(String path, WebAppContext webappContext) 
{
+    private static void addContentLengthFilters(String path, WebAppContext 
webAppContext, NiFiProperties props) {

Review comment:
       Can we rename this method to addDoSFilters() which in turn calls 
addWebRequestRateLimitFilter() (renamed from addDoSFilter()) and 
addContentLengthFilter()? Presumably limiting content length can also be 
considered a DoS protection, so now we have a DoS method which adds two filters 
instead of the content length filter method adding a DoS filter in addition to 
a content length filter. Alternatively, we could call methods named 
addContentLengthFilter() and addWebRequestRateLimitFilter() separately from 
loadWar().

##########
File path: 
nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-site-to-site/src/main/java/org/apache/nifi/remote/StandardPublicPort.java
##########
@@ -264,7 +265,7 @@ private int receiveFlowFiles(final ProcessContext context, 
final ProcessSession
 
     @Override
     public boolean isValid() {
-        return getConnectableType() == ConnectableType.INPUT_PORT ? 
!getConnections(Relationship.ANONYMOUS).isEmpty() : true;
+        return getConnectableType() != ConnectableType.INPUT_PORT || 
!getConnections(Relationship.ANONYMOUS).isEmpty();

Review comment:
       What is this checking for? It's a valid StandardPublicPort if it's not 
an INPUT_PORT or if there's anonymous relationships? Both the before and after 
are taking me far too long to understand what the check does - may be a result 
of tired brain. I think this could be simplified with a well named helper 
method or comment which explains why these conditions make it valid.

##########
File path: 
nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/test/java/org/apache/nifi/web/filter/ContentLengthFilterTest.java
##########
@@ -133,6 +133,36 @@ public void doPost(HttpServletRequest req, 
HttpServletResponse resp) throws Serv
         Assert.assertTrue(StringUtils.containsIgnoreCase(response, "Timeout"));
     }
 

Review comment:
       Whilst not a part of these changes, I see that there are tests in this 
class for content lengths of varying sizes compared to the header 
Content-Length claim. On line 123 the filter rejects a request that has a 
Content-Length greater than the set limit with an incomplete payload - great, 
that's what we want. 
   
   But, on line 127 we see a small claim is made, and a large payload is 
accepted. Is this not what the content filter should be blocking? Or are we 
only blocking based on the header claim? We could potentially also check the 
request input stream for available bytes with 
httpRequest.getInputStream().available()) - but I'm not sure under what 
circumstances this is accurate or even populated.
   
   Further we see that on line 131 we get a request with a claim of 150 bytes 
but receive only 10 bytes and as a result the request times-out waiting for the 
rest of the expected bytes. I don't believe there's a great way of avoiding 
this though I am looking into it.




----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
[email protected]


Reply via email to