Hi Mark ,

Thank you for your feedback.  I have made all the changes needed and it is
working as expected except for ONE use case where the servlet context path
does not end with */*.  When server context path is given without /
('/versa'), tomcat seems to do 302 redirect to automatically  '/versa/'.
How can I change this behavior so that the OPTIONS method returns 405 from
the filter instead of tomcat auto-redirecting to the context path?

curl -i -k -X OPTIONS http://10.43.243.8*/versa*
HTTP/1.1 302
Location: /versa/
Transfer-Encoding: chunked

curl -i -k -X OPTIONS http://10.43.243.8*/versa/*
HTTP/1.1 405
Cache-Control: private
Content-Length: 0



Here is the updated web.xml security containers:

    <security-constraint>
        <web-resource-collection>
            <web-resource-name>HTTPSOnly</web-resource-name>
            <url-pattern>/*</url-pattern>
        </web-resource-collection>
    </security-constraint>
    <security-constraint>
        <auth-constraint>
            <!-- empty constraint: forbid all access -->
        </auth-constraint>
    </security-constraint>

Thanks in advance for your help.

Thanks,

Bhavesh




On Fri, Oct 7, 2022 at 12:06 PM Mark Thomas <ma...@apache.org> wrote:

> On 07/10/2022 19:47, Bhavesh Mistry wrote:
> > Hi Mark,
> >
> > Thank you for your quick response.  Your proposed solution works by
> > removing the transport-guarantee element.  Another quick question, I have
> > Connection has a property called allowTrace method. Is it possible to
> > configure TOMCAT Connector to disallow TRACE,OPTIONS,HEAD,CONNECT rather
> > than having custom logic at the application level?
>
> No.
>
> >  Do you think it good idea to have Connector Config which method to
> allow and disallow?
>
> No.
>
> I don't think it is a good idea to have an option to disable TRACE at
> the connector level. I'd be quite happy to remove that feature but I'm
> fairly sure I would not be able to get consensus to do that.
>
> My understanding is that TRACE got its poor reputation due to a
> misbehaving browser. Rather than pressure the browser vendor to fix
> their broken browser, the security community decided to pressure the
> server community to disable the functionality the browser didn't handle
> properly. That just seems backwards to me no matter how big the
> browser's market share might have been at the time and how reluctant to
> change the vendor was.
>
> CONNECT returns 405 by default in a Servlet container and none of TRACE,
> OPTIONS or HEAD are inherently unsafe.
>
> Mark
>
>
> >
> > Thanks,
> >
> > Bhavesh
> >
> > On Fri, Oct 7, 2022 at 10:59 AM Mark Thomas <ma...@apache.org> wrote:
> >
> >> On 07/10/2022 18:09, Bhavesh Mistry wrote:
> >>> Hi Tomcat Team,
> >>>
> >>> We have a unique situation.  We wanted to block ALL *OPTIONALS* HTTP
> >> method
> >>> on port 80 and 443.
> >>>
> >>> We have connector definitions as follows:
> >>>
> >>>
> >>>       <Connector executor="tomcatThreadPool"
> >>>                  port="8080" protocol="HTTP/1.1"
> >>>                  connectionTimeout="20000"
> >>>                  redirectPort="8443" />
> >>>       -->
> >>>       -->
> >>>       <Connector port="${tomcat.secure.port}"
> >>> protocol="org.apache.coyote.http11.Http11NioProtocol"
> >>>                  relaxedPathChars="[\\]^`{|}"
> >> relaxedQueryChars="[\\]^`{|}"
> >>>                  address="${tomcat.address}" minSpareThreads="100"
> >>>    maxThreads="200" SSLEnabled="true"
> >>>                  scheme="https" secure="true" maxSwallowSize="-1"
> >>> maxPostSize="-1">
> >>>           <UpgradeProtocol
> >> className="org.apache.coyote.http2.Http2Protocol"
> >>> readTimeout="50000" streamReadTimeout ="-1" streamWriteTimeout="-1"
> >>>           overheadContinuationThreshold="0" overheadDataThreshold="0"
> >>> overheadWindowUpdateThreshold="0"/>
> >>>
> >>>       </Connector>
> >>>
> >>> and we have an application filter to block and return 405.  This works
> >> for
> >>> HTTPS port 443.  But request going to HTTP port 80 always get
> redirected
> >>> regardless of the method.
> >>>
> >>> curl -i -k -X OPTIONS http://10.43.243.8/versa/
> >>> *HTTP/1.1 302*
> >>> Cache-Control: private
> >>> Location: https://10.43.243.8/versa/
> >>> Content-Length: 0
> >>> Date: Fri, 07 Oct 2022 16:58:27 GMT
> >>> Server: Versa Director
> >>>
> >>> curl -i -k -X OPTIONS https://10.43.243.8/versa/
> >>> *HTTP/2 405*
> >>> cache-control: private
> >>> content-length: 0
> >>> date: Fri, 07 Oct 2022 16:58:51 GMT
> >>>
> >>> We wanted to block OPTIONS on port 80 as well, it seems to me that
> tomcat
> >>> internally  (via connector) redirects requests without application
> code.
> >>> How can I achieve blocking OPTIONS, TRACE, and CONNECT  HTTP methods on
> >>> port 80 while redirect is ON for the connector?
> >>>
> >>> Any pointers or help is greatly appreciated.
> >>
> >> Tomcat only redirects http to https as the result of an application
> >> defined transport-guarantee element in web.xml.
> >>
> >> Security constraints get processed before Filters.
> >>
> >> You can't change the either of the above.
> >>
> >> What you could do, is remove the transport-guarantee from web.xml and
> >> perform the http to https redirect in your Filter. Then you'd have the
> >> option to return 405 instead of the redirect.
> >>
> >> Mark
> >>
> >> ---------------------------------------------------------------------
> >> To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
> >> For additional commands, e-mail: users-h...@tomcat.apache.org
> >>
> >>
> >
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
> For additional commands, e-mail: users-h...@tomcat.apache.org
>
>

Reply via email to