Esta sección incluye todo lo que está fuera del código fuente pero aun así es importante para la seguridad del producto que se está creando. Dado que todas las cuestiones incluidas en esta sección no están directamente relacionadas con el código fuente, las hemos separado de las demás secciones.
<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 el intervalo de tiempo de espera de sesión predeterminado para todas las sesiones de la aplicación web. Si falta la etiqueta <session-timeout>
, queda en manos del contenedor establecer el tiempo de espera predeterminado.web.xml
es un error. Cada servlet debe tener un nombre único (servlet-name
) y una asignación correspondiente (servlet-mapping
).web.xml
muestra varias definiciones de servlet erróneas.
<!-- 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>
se utiliza para configurar cómo los usuarios se autentican en una aplicación. La ausencia de un método de autenticación significa que la aplicación no sabe cómo aplicar restricciones de autorización ya que nadie puede iniciar sesión. El método de autenticación se especifica mediante la etiqueta <auth-method>
, que es un elemento secundario de <login-config>
.BASIC
, FORM
, DIGEST
, y CLIENT_CERT
.BASIC
indica autenticación HTTP básica.FORM
indica autenticación basada en formularios.DIGEST
es como la autenticación BASIC; sin embargo, en DIGEST la contraseña está cifrada.CLIENT_CERT
requiere que los clientes tengan certificados de clave pública y utilicen 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
se utilizan normalmente para el control de acceso basado en roles, pero el elemento user-data-constraint
opcional especifica una garantía de transporte que evita que el contenido se transmita de forma poco segura.<user-data-constraint>
, la etiqueta <transport-guarantee>
define cómo se debe controlar la comunicación. Hay tres niveles de garantía de transporte:NONE
significa que la aplicación no requiere ninguna garantía de transporte.INTEGRAL
significa que la aplicación requiere que los datos enviados entre el cliente y el servidor se envíen de tal manera que no se puedan cambiar en tránsito.CONFIDENTIAL
significa que la aplicación requiere que los datos se transmitan de una manera que impida que otras entidades observen el contenido de la transmisión.INTEGRAL
o CONFIDENTIAL
significa que se requiere SSL/TLS. Si se omiten las etiquetas <user-data-constraint>
y<transport-guarantee>
, la garantía de transporte predeterminada es 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
. Como falta la definición, el filtro AuthenticationFilter
no se aplicará al patrón de dirección URL designado /secure/*
y puede causar una excepción en tiempo de ejecución.
<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 impide el acceso legítimo a todos los recursos que protege.security-role
para un elemento role-name
definido en un elemento auth-constraint
podría indicar una configuración desactualizada.role-name
, pero no se define en un elemento 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
sin una asignación de servlets correspondiente.web.xml
define ExampleServlet
pero no puede definir una asignación de servlets correspondiente.
<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
, esto indica que el control de acceso para la aplicación no se ha pensado totalmente o que la aplicación está estructurada de manera que las restricciones razonables de control de acceso son imposibles.ANYONE
para invocar el método Employee
de EJB 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 utilizar la autenticación HTTP básica.
...
kind: Pod
...
spec:
containers:
- command:
- kube-apiserver
- --basic-auth-file=<filename>
image: example.domain/kube-apiserver-amd64:v1.6.0
livenessProbe:
...