Esta seção contém tudo o que fica fora do código-fonte, porém que é essencial para a segurança do produto que está sendo criado. Como os problemas tratados neste domínio não são diretamente relacionados com o código-fonte, nós o separamos dos demais domínios.
<servlet>
<servlet-class>com.class.MyServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>MyServlet</servlet-name>
<url-pattern>/myservlet</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>MyServlet</servlet-name>
<url-pattern>/helloworld*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>MyServlet</servlet-name>
<url-pattern>/servlet*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>MyServlet</servlet-name>
<url-pattern>/mservlet*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>MyServlet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>-1</session-timeout>
</session-config>
<session-timeout>
define o intervalo de tempo limite da sessão padrão para todas as sessões no aplicativo da web. Se a tag <session-timeout>
estiver ausente, cabe ao contêiner definir o tempo limite padrão.web.xml
é um erro. Cada Servlet deve ter um nome único (servlet-name
) e um mapeamento correspondente (servlet-mapping
).web.xml
mostra várias definições de servlet erradas.
<!-- No <servlet-name> specified: -->
<servlet>
<servlet-class>com.class.MyServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<!-- Empty <servlet-name> node: -->
<servlet>
<servlet-name/>
<servlet-class>com.class.MyServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<!-- Duplicate <servlet-name> nodes: -->
<servlet>
<servlet-name>MyServlet</servlet-name>
<servlet-name>Servlet</servlet-name>
<servlet-class>com.class.MyServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<login-config>
é usado para configurar como os usuários se autenticam em um aplicativo. A ausência de um método de autenticação significa que o aplicativo não sabe como aplicar restrições de autorização, pois ninguém pode fazer login. O método de autenticação é especificado usando a tag <auth-method>
que é “child-of” de <login-config>
.BASIC
, FORM
, DIGEST
e CLIENT_CERT
.BASIC
denota autenticação HTTP Basic.FORM
denota autenticação baseada em formulário.DIGEST
é como a autenticação BASIC; entretanto, em DIGEST a senha é criptografada.CLIENT_CERT
requer que os clientes tenham certificados de chave pública e usem SSL/TLS.
<web-app>
<!-- servlet declarations -->
<servlet>...</servlet>
<!-- servlet mappings-->
<servlet-mapping>...</servlet-mapping>
<!-- security-constraints-->
<security-constraint>...</security-constraint>
<!-- login-config goes here -->
<!-- security-roles -->
<security-role>...</security-role>
</web-app>
web.xml
são normalmente usadas para controle de acesso baseado em função, mas o elemento opcional user-data-constraint
especifica uma garantia de transporte que evita que o conteúdo seja transmitido de maneira insegura.<user-data-constraint>
, a tag <transport-guarantee>
define como a comunicação deve ser tratada. Existem três níveis de garantia de transporte:NONE
significa que o aplicativo não exige nenhuma garantia de transporte.INTEGRAL
significa que o aplicativo requer que os dados enviados entre o cliente e o servidor sejam enviados de forma que não possam ser alterados em trânsito.CONFIDENTIAL
significa que o aplicativo requer que os dados sejam transmitidos de uma maneira que evite que outras entidades observem o conteúdo da transmissão.INTEGRAL
ou CONFIDENTIAL
significa que é necessário SSL/TLS. Se as tags <user-data-constraint>
e <transport-guarantee>
são omitidas, o padrão de garantia de transporte é NONE
.
<security-constraint>
<web-resource-collection>
<web-resource-name>Storefront</web-resource-name>
<description>Allow Customers and Employees access to online store front</description>
<url-pattern>/store/shop/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<description>Anyone</description>
<role-name>anyone</role-name>
</auth-constraint>
</security-constraint>
AuthenticationFilter
. Em razão da definição estar ausente, o filtro AuthenticationFilter
não será aplicado ao padrão de URL designado /secure/*
e pode causar uma exceção de tempo de execução.
<filter>
<description>Compresses images to 64x64</description>
<filter-name>ImageFilter</filter-name>
<filter-class>com.ImageFilter</filter-class>
</filter>
<!-- AuthenticationFilter is not defined -->
<filter-mapping>
<filter-name>AuthenticationFilter</filter-name>
<url-pattern>/secure/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>ImageFilter</filter-name>
<servlet-name>ImageServlet</servlet-name>
</filter-mapping>
role-name
inexistente impede o acesso legítimo a todos os recursos que protege.security-role
ausente para um role-name
definido em um auth-constraint
pode indicar uma configuração desatualizada.role-name
, mas não o define em um security-role
.
<security-constraint>
<web-resource-collection>
<web-resource-name>AdminPage</web-resource-name>
<description>Admin only pages</description>
<url-pattern>/auth/noaccess/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<description>Administrators only</description>
<role-name>admin</role-name>
</auth-constraint>
<user-data-constraint>
<transport-guarantee>INTEGRAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
web.xml
não pode ser acessado sem um mapeamento de servlet correspondente.web.xml
define ExampleServlet
mas falha ao definir um mapeamento de servlet correspondente.
<web-app
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4">
<servlet>
<servlet-name>ExampleServlet</servlet-name>
<servlet-class>com.class.ExampleServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
</web-app>
<ejb-jar>
<enterprise-beans>
<entity>
<ejb-name>EmployeeRecord</ejb-name>
<home>com.wombat.empl.EmployeeRecordHome</home>
<remote>com.wombat.empl.EmployeeRecord</remote>
...
</entity>
...
</enterprise-beans>
</ejb-jar>
ANYONE
.ANYONE
, isso indica que o controle de acesso para o aplicativo não foi totalmente pensado ou que o aplicativo está estruturado de tal forma que as restrições de controle de acesso razoáveis são impossíveis.ANYONE
permissão para invocar o método EJB do Employee
, denominado getSalary()
.
<ejb-jar>
...
<assembly-descriptor>
<method-permission>
<role-name>ANYONE</role-name>
<method>
<ejb-name>Employee</ejb-name>
<method-name>getSalary</method-name>
</method-permission>
</assembly-descriptor>
...
</ejb-jar>
--anonymous-auth=true
.
...
spec:
containers:
- command:
- kube-apiserver
...
- --anonymous-auth=true
...
--audit-log-path
.
...
spec:
containers:
- command:
- kube-apiserver
- --authorization-mode=RBAC
image: example.domain/kube-apiserver-amd64:v1.6.0
...
--basic-auth-file=<filename>>
para usar autenticação básica HTTP.
...
kind: Pod
...
spec:
containers:
- command:
- kube-apiserver
- --basic-auth-file=<filename>
image: example.domain/kube-apiserver-amd64:v1.6.0
livenessProbe:
...