Java >> Java tutorial >  >> Tag >> Tomcat

Hvordan blokerer man adgang til en fil fra at blive serveret af Tomcat?

Løsning 1:

Tomcats filadgang styres af afsnittet med sikkerhedsbegrænsninger i WEB-INF/web.xml.

Du kan blokere conf på denne måde:

<security-constraint>
    <web-resource-collection>
        <web-resource-name>HTTP-Protected-Resource-1</web-resource-name>
        <description>Description here</description>
        <url-pattern>/conf/*</url-pattern>
        <http-method>GET</http-method>
        <http-method>POST</http-method>
    </web-resource-collection>
    <auth-constraint>
        <role-name>NOSOUPFORYOU</role-name>
    </auth-constraint>
</security-constraint>

<login-config>
    <auth-method>DEFAULT</auth-method>
    <realm-name>NOACCESSFORANYONE</realm-name>
</login-config>
<security-role>
    <role-name>NOSOUPFORYOU</role-name>
</security-role>

Hvis du bruger apache til at vise statisk indhold, vil dette ikke virke, da apache vil tjene conf-filerne, før tomcat får URL'en. I disse tilfælde skal du løse dette via apaches http-konfigurationsfiler.

Løsning 2:

Hej til alle SysAdmin- og IT-medarbejdere i dette indlæg. Tak for dine svar. Mange af svarene på mine spørgsmål var acceptable, men denne var bedst egnet til vores produktionsmiljø.

Okay. For at blokere en mappe eller en fil i en virtuel vært i server.xml skal du blot tilføje følgende kode til server.xml i tomcat/conf-mappen.

Før:

  <Host name="www.customer.com" appBase="/usr/share/app4_0b/tomcat/webapps/" autoDeploy="false">
    <Context path="" docBase="./customer" />

    <Valapp className="org.apache.catalina.valapps.FastCommonAccessLogValapp"
           directory="weblogs/customer"
           prefix="www_customer_com_"
           suffix=".txt"
           pattern="combined"
           resolappHosts="false" />
  </Host>

Efter:

  <Host name="www.customer.com" appBase="/usr/share/app4_0b/tomcat/webapps/" autoDeploy="false">
    <Context path="" docBase="./customer" />

    <Context path="/app/xv/~customer/etc" docBase="" >
      <Valapp className="org.apache.catalina.valapps.RemoteAddrValapp" deny="*" />
    </Context>
    <Context path="/etc" docBase="" >
      <Valapp className="org.apache.catalina.valapps.RemoteAddrValapp" deny="*" />
    </Context>

    <Valapp className="org.apache.catalina.valapps.FastCommonAccessLogValapp"
           directory="weblogs/customer"
           prefix="www_customer_com_"
           suffix=".txt"
           pattern="combined"
           resolappHosts="false" />
  </Host>

Så svaret på spørgsmålet er at tilføje følgende linjer:

    <Context path="/app/xv/~customer/etc" docBase="" >
      <Valapp className="org.apache.catalina.valapps.RemoteAddrValapp" deny="*" />
    </Context>
    <Context path="/etc" docBase="" >
      <Valapp className="org.apache.catalina.valapps.RemoteAddrValapp" deny="*" />
    </Context>

Løsning 3:

Hvorfor ikke gemme det uden for din webmappestruktur? Vi sætter aldrig noget under /var/www/html/, som vi ikke ønsker, at en bruger skal opdage.

Løsning 4:

Ord af råd. Når du har rettet tilladelserne. Skift alle adgangskoder, og sørg for, at der ikke er en google-cache af det.

Løsning 5:

Normalt gemmes konfigurationsoplysninger (såsom databaseforbindelsesoplysninger, ...) i filer under WEB-INF-mappen i WAR-filen, der er implementeret til Tomcat. Filer under WEB-INF er ikke tilgængelige for klienter.


Java tag