Secure Website es un programa de sitio web seguro con registro, inicio de sesión, gestión de sesiones y controles CRUD. Construido pensando en la seguridad
Utilicé PHP Data Objects (PDO) para acceder de forma segura a una base de datos en PHP (base de datos MySQL incluida).
Utilicé CSS Flexbox para un diseño receptivo.
No utilicé ningún framework.
Todos los scripts se validan con éxito con Markup Validation Service.
Construido con la seguridad en mente.
Los siguientes ataques son prevenidos:
- Fuerza Bruta,
- Fijación de la sesión,
- Inyección SQL
- Cross-Site Scripting (XSS),
- Falsificación de solicitudes en sitios cruzados (CSRF),
- etc.
Probado en XAMPP para Windows v7.4.3 (64-bit) con Chrome v80.0.3987.149 (64-bit) y Firefox v74.0 (64-bit).
Hecho con fines educativos. ¡Espero que te ayude!
Cómo Ejecutar
Importa ‘\db\secure_website.sql’ a tu servidor de base de datos.
Copia todo el contenido de ‘\src\’ al directorio root web de tu servidor (e.g. to ‘\xampp\htdocs\’ en XAMPP).
Cambia los ajustes de la base de datos dentro de ‘\src\php\config.ini’ según sea necesario.
Comprueba las credenciales de acceso aquí.
Navega a la página web con tu navegador preferido.
Apache Hardening
Evitar la divulgación de la versión. Desde tu directorio de Apache dirígete a ‘\conf\extra\httpd-default.conf’ y configura ServerTokens en Prod y ServerSignature en Off
.
Evitar el listado de directorios. Desde tu directorio de Apache dirígete a ‘\conf\httpd.conf’, navega a la sección DocumentRoot
y elimina Indexes
de Options Indexes FollowSymLinks Includes ExecCGI
.
Evitar el listado de directorios ‘/icons/’. Desde tu directorio Apache dirígete a ‘\conf\extra\httpd-autoindex.conf’ y comenta Alias /icons/ "C:/xampp/apache/icons/"
.
Deshabilitar la página ‘/server-status’. Desde tu directorio de Apache dirígete a ‘\confextra\httpd-info.conf’ y comenta todo el elemento <Location /server-status>
.
Deshabilitar el método HTTP TRACE. Desde tu directorio de Apache dirígete a ‘\conf\httpd.conf’, navega a la sección Supplemental configuration
y añade la nueva configuración TraceEnable Off
.
Prevenir los ataques de clickjacking. Desde tu directorio de Apache dirígete a ‘\conf\httpd.conf’, navega a la sección de Supplemental configuration
y añade una nueva configuración Header set X-Frame-Options deny
.
Establezca la Política de Seguridad de Contenidos en el encabezado de respuesta HTTP. La siguiente configuración solo te permitirá cargar recursos de tu propio dominio. Desde tu directorio de Apache dirígete a ‘\conf\httpd.conf’, navega a la sección Supplemental configuration
y añade la nueva configuración Header set Content-Security-Policy "default-src 'self';"
. Busca en Internet más opciones de Content Security Policy.
Bloquear MIME sniffing. Desde tu directorio de Apache dirígete a ‘\conf\httpd.conf’, navega a Supplemental configuration
y añade la nueva configuración Header set X-Content-Type-Options nosniff
.
Aplicar cross-site scripting filter. Desde tu directorio de Apache dirígete a ‘\conf\httpd.conf’, navega a la sección de Supplemental configuration
y añade la nueva configuración Header set X-XSS-Protection "1; mode=block"
.
Mitigar Slow Loris y otros ataques DoS. Desde tu directorio Apache dirígete a ‘\confexion.conf’ y baja el tiempo de espera a 60.
PHP Hardening
Evitar la divulgación de la versión. Desde tu directorio PHP dirígete a ‘php.ini’ y establece expose_php
en Off
.
Evitar la divulgación de información de errores de visualización. Desde tu directorio PHP dirígete a ‘php.ini’ y establece tanto display_errors
como display_startup_errors
en Off
.
Establece la zona horaria correcta del servidor. Desde tu directorio PHP, dirígete a ‘php.ini’ y establece ambas instancias de date.timezone
en tu zona horaria. Busca en la web una lista de zonas horarias compatibles con PHP.
Establece el nombre de cookie de sesión. Desde tu directorio PHP dirígete a ‘php.ini’ y establece session.name
con el valor que desees. Además de este sitio web, también se establece aquí.
Establece la duración de la sesión de cookie. Desde tu directorio PHP dirígete a ‘php.ini’ y establece session.cookie_lifetime
a tu propio valor deseado. Además de este sitio web, también se establece aquí.
Establece la flag HttpOnly de la sesión de cookie. La siguiente configuración no permitirá que los scripts del lado del cliente accedan a la sesión cookie. Desde tu directorio PHP dirígete a ‘php.ini’ y establece session.cookie_httponly
en 1. Además de este sitio web, también está establecido aquí.
Usa el modo strict session. Desde tu directorio PHP dirígete a ‘php.ini’ y establece session.use_strict_mode
a 1.
Deshabilita la subida de archivos. Haz lo siguiente solo si tu sitio web no utiliza la subida de archivos. Desde tu directorio PHP vedirígete a ‘php.ini’ y establece file_uploads
en Off
.
Evita la inclusión de archivos remotos. Desde tu directorio PHP dirígete a ‘php.ini’ y establece allow_url_fopen
en Off
.
Deshabilitar las funciones peligrosas de PHP. Desde tu directorio PHP dirígete a ‘php.ini’ y establece disable_functions
a eval;exec;shell_exec;curl_exec;passthru;system;proc_open;popen
. Busca en Internet funciones adicionales de PHP peligrosas (dangerous PHP functions.).
Certificado SSL/TLS
Descubra cómo crear un certificado SSL/TLS aquí.
Imágenes
Figura 2 – Página de Registro
Figura 3 – Página de Usuarios
secure-website (este enlace se abre en una nueva ventana) por ivan-sincek (este enlace se abre en una nueva ventana)
Secure website with a registration, sign in, session management, and CRUD controls.