Crear un script de inicio de sesión seguro en php y mysql

8 Partes:Configurar el servidorConfigurar base de datos MySQLCrear una página de conexión de base de datosCrear funciones PHPCreación de páginas de ProcesamientoCrear archivos javascriptCrear páginas HTMLprotección de páginas

Con cada vez más informes de los piratas informáticos lograron burlar la seguridad de los sitios, los desarrolladores están buscando formas más efectivas de protección. Si su sitio tiene un sistema de registro de miembros, se corre el riesgo de ser hackeado y los datos de usuario pueden verse comprometidas. Este artículo le mostrará cómo se puede tratar de aumentar la seguridad de inicio de sesión utilizando PHP. El código no es perfecta, pero la seguridad y el cifrado son cuestiones muy complejas y se actualizan constantemente. Por lo tanto, no podemos garantizar que toda esta área del conocimiento se explica aquí.

Si usted encuentra que echamos de menos temas importantes, por favor, póngase en contacto con nosotros para que siempre podemos tratar de mejorar el artículo. Siguiendo las extremidades inferiores que puede proteger contra varios tipos de ataques que utilizan galletas para tomar el control de la cuenta del usuario, eliminar cuentas o cambian datos. A continuación se muestra la lista de posibles ataques contra el cual podemos defendernos:

El enfoque consiste en utilizar una mezcla de filtrado de datos, cifrado y otros métodos que hacen la vida más complicada bandidos.

Siempre estamos buscando mejorar este script. La versión más actualizada de este código está disponible en gitHub. Puede haber algunas diferencias entre el código que se descarga y el código utilizado en este artículo. También es importante saber que la apariencia de las páginas HTML no era nuestra prioridad.

Tenga en cuenta que no cerramos las lengüetas de PHP en los archivos que contienen sólo código PHP. Buscamos días esstar con la mayoría de recomendaciones de formato de codificación.

Y, por último, que le lleva a crear todas las aplicaciones que no son archivos HTML en varias carpetas dentro del directorio principal de la aplicación. La forma más sencilla de obtener la estructura correcta del directorio es para descargar el último código siguiendo los enlaces que aparecen más arriba.

Siéntase libre de utilizar esta aplicación como base para su propia implementación, pero no sirve como un modelo perfecto de codificación!





materiales necesarios

Como vamos a utilizar el conjunto de clases PHP myqli_ * para acceder a nuestra base de datos MySQL, necesita las siguientes versiones de PHP y MySQL:

  • * La versión de PHP 5.3 o superior
  • * La versión de MySQL 4.1.3 o superior

También se necesita un servidor configurado para usar PHP para alojar sus páginas. Lo más probable es que será el mismo proveedor de su sitio de alojamiento, a menos que usted está haciendo su propia red de servicio de la página web.

Para comprobar la versión de PHP y MySQL en el servidor, utilice la función phpinfo () - función.

parte 1
Configurar el servidor
1
Instalar un servidor de red, PHP y MySQL en su servidor.

La mayoría de los servicios de alojamiento web en la red ya tienen instalados PHP y MySQL. Sólo tiene que comprobar si son las versiones más recientes de las instrucciones de este artículo funcionan. Si ellos no tienen ni siquiera la PHP5.3 y versiones MySQL5, puede ser apropiado para cuestionar un poco de seguridad que ofrecen. Esto se debe mantener el software actualizado es parte del proceso de seguridad.

Si usted tiene su propio servidor en el equipo, lo mejor es instalar el programa predeterminado que normalmente se utiliza para el sistema. En general, si no va a utilizar la instalación para fines de producción y está desarrollando el trabajo con Windows u OS / X, debe instalar XAMPP es una gran opción. Obtener la versión adecuada para su sistema operativo en el enlace:

https://apachefriends.org/en/xampp.html

Recuerde que XAMPP nunca debe ser usado para crear un entorno de servidor de producción para usted.

Si está usando Linux, utilice el gestor de paquetes para descargar e instalar todos los paquetes necesarios. Algunos distribuidores como Ubuntu contiene todas las aplicaciones necesarias en un solo lugar. Sólo tiene que utilizar un terminal de Ubuntu y hacer lo siguiente:

sudo apt-get install lámpara-servidor ^ phpmyadmin



Incluso la instalación de los elementos necesarios, es importante comprobar si MySQL está configurado con una contraseña de root seguro suficiente.
parte 2
Configurar base de datos MySQL
1
Crear una base de datos MySQL.

Por favor, inicie sesión en su base de datos como el administrador (usuario root por lo general)

En este artículo, vamos a crear una base de datos con el nombre "secure_login".

He aquí cómo el artículo https://yakprosx.info/computadoras-y-equipos-electrnicos/sistemas-operacionales/4221-cmo-instalar-phpmyadmin-en-su-pc-con-windows.html

Puede utilizar el código de abajo, o hacer lo mismo que en phpMyAdmin / su cliente favorito MySQL GUI, si se prefiere:

CREAR BASE DE DATOS `secure_login`-
Nota: Algunos sitios de servicios de alojamiento no le permiten crear una base de datos usando phpMyAdmin, Aprender cómo hacerlo en cPanel.
  • 2
    Crear un usuario que tiene los siguientes privilegios: SELECT, INSERT y UPDATE.

    Al crear un usuario con privilegios limitados, un hacker no pudo eliminar cualquier cosa, desde la base de datos, incluso si pudiera encontrar una brecha de seguridad. El uso de estos privilegios, se puede hacer casi cualquier cosa con su aplicación. Y si usted está preocupado por conseguir paranoico, cree un usuario diferente para cada función.

    Recuerde que usted tiene que estar conectado a MySQL como un usuario con privilegios suficientes (es decir, un usuario root) con el fin de crear otro usuario.

    Estos son los detalles del usuario que ha creado:
  • usuario: "sec_user"
  • contraseña: "eKcGZr59zAa2BEWU"

  • Nota: Es recomendable cambiar la contraseña proporcionada para ejecutar su propio servidor. Al hacerlo, asegúrese de cambiar el código abajo y el código de conexión de la base de datos de PHP en la aplicación que se creará.

    Usted no tendrá que recordar esta contraseña, entonces inventar uno que es tan complicado como sea posible. Echa un vistazo a la siguiente generador de contraseñas enlace: generador de contraseñas al azar

    A continuación se muestra el código SQL para crear la base de datos de usuarios y cómo asignar permisos para ciertos procedimientos a ellos. Una alternativa es llevar a cabo esta tarea en la base de datos de cliente GUI, tales como el phpMyAdmin:

    CREAR USUARIO `Sec_user`@"Localhost" IDENTIFICADO POR `EKcGZr59zAa2BEWU`-GRANT SELECT, INSERT, ACTUALIZACIÓN EN `secure_login`.* A `Sec_user`@"Localhost"-


    Si desea eliminar los registros de cualquiera de las tablas en este módulo, agregue BORRAR a su lista de privilegios o crear un usuario diferente que sólo tiene el privilegio DELETE, y sólo la tabla que contiene los datos que desea eliminar (si no desea borrar los datos ambas tablas). No hace falta conceder privilegio DELETE para cualquiera de las tareas de esta secuencia de comandos a continuación como ejemplo.
  • 3
    Crear una tabla en MySQL con el nombre de "los miembros".

    El código siguiente crea una tabla con cinco campos (ID - nombre, nombre de usuario - nombre de usuario, correo electrónico, contraseña - contraseña, sal - datos aleatorios utilizados para aumentar la seguridad y personalizar la contraseña). Utilizamos el tipo de datos CHAR de los campos cuyos medida que conocemos, tales como "contraseña" y "sal", que siempre va a tener 128 caracteres. Al utilizar este proceso CHAR, ganar-capacidad de procesamiento:

    CREAR TABLA `secure_login`.`members` (`id` INT NO NULL AUTO_INCREMENT PRIMARIA CLAVE,`username` VARCHAR(30) NO NULL,`email` VARCHAR(50) NO NULL,`password` CHAR(128) NO NULL,`salt` CHAR(128) NO NULL) MOTOR = InnoDB-

    Usted puede hacer esto en cualquier tipo de cliente que desee.
  • 4
    Crear una tabla para registrar los intentos de inicio de sesión.

    Vamos a utilizar esta tabla para registrar los intentos de entrada de usuario dado. Esta es una de las maneras de impedir los ataques más violentos:



    CREAR TABLA `secure_login`.`login_attempts` (`user_id` INT(11) NO NULL,`tiempo` VARCHAR(30) NO NULL) MOTOR=InnoDB

  • 5
    Crear una prueba secuencial en la tabla "los miembros".

    Es importante ser capaz de probar el script de conexión. Pronto sigue una secuencia de comandos a un usuario cuyos datos ya sabes:
  • nombre de usuario: test_user
  • e-mail: [email protected]
  • contraseña: 6ZaxN2Vzm9NUJT2y

  • El código necesario para iniciar la sesión como ese usuario es el siguiente:

    INSERT EN `secure_login`.`members` VALORES(1, `Test_user`, `[email protected]`,`00807432eae173f652f2064bdca1b61b290b52d40e429a7d295d76a71084aa96c0233b82f1feac45529e0726559645acaed6f3ae58a286b9f075916ebf66cacc`,`F9aab579fc1b41ed0c44fe4ecdbfcdb4cb99b9023abb241a6db833288f4eea3c02f76e0d35204a8695077dcf81932aa59006423976224be0390395bae152d4ef`)-
    parte 3
    Crear una página de conexión de base de datos
    1
    Crear una página de valores globales

    Crear una carpeta llamada "incluye" en el directorio principal de la aplicación y luego crear un nuevo archivo PHP en este directorio. Nombre de este archivo como PSL-config.php. En un entorno de producción, puede dejar este archivo y todos los demás que se incluyen más adelante, fuera de la raíz de documentos del servidor de red. Es muy recomendable que lo haga, y cambiar el comando de incluir y requerimos según sea necesario para la aplicación para localizar los archivos de inclusión.

    Dejan sus archivos fuera de la red incluyen raíz de documentos del servidor significa que no se pueden encontrar a través de una URL. Así que si alguien se olvide de poner la extensión `php` al final o crear problemas con los permisos de archivos, no se puede mostrar como texto en la ventana del navegador.

    El archivo contiene variables de configuración global. La información tal como si alguien puede registrar, si la conexión es segura o no (HTTPS) y otros datos de la base de datos se puede dejar aquí ...

    lt ;? php/ *** Los siguientes detalles para iniciar sesión en la base de datos * /conjuntos("HOST", "localhost")- // Para el anfitrión con el que desea conectarse.conjuntos("USUARIO", "sec_user")-// El nombre de usuario de la base de datos. conjuntos("CONTRASEÑA", "4Fa98xkHVd2XmnfK")-// La base de datos de contraseñas. conjuntos("BASE DE DATOS", "secure_login")-// El nombre de la base de datos. conjuntos("CAN_REGISTER", "cualquier")-conjuntos("DEFAULT_ROLE", "miembro")-conjuntos("SEGURO", FALSO)-// ESTRICTAMENTE PARA EL DESARROLLO !!!!


  • 2
    Crear una página de conexión de base de datos

    Este es el código PHP vamos a utilizar para conectarse a la base de datos MySQL. Crear un nuevo archivo PHP llamado db_connect.php en la solicitud de incluir el directorio y añadir el código de abajo. A continuación, puede añadir el archivo a cualquier página que desea conectarse a la base de datos.

    lt ;? phpinclude_once `PSL-config.php`-// Desde functions.php no está incluido$ mysqli = nuevo mysqli(HOST, USUARIO, CONTRASEÑA, BASE DE DATOS)-
  • parte 4
    Crear funciones PHP

    Estas funciones harán todo el procesamiento de la secuencia de comandos de inicio de sesión. Añadir todas las funciones en una página llamada "functions.php" en la solicitud de incluir directorio.

    1
    Iniciar una sesión de PHP seguro.
    Si realmente está preocupado por la seguridad, no es importante solo "session_start ()" en la parte superior de todas las páginas en las que desea usar sesiones php (dicen que no tienen fama de ser seguro). Vamos a crear una función llamada "sec_session_start", Que se iniciará una sesión de PHP con seguridad. Debe llamar a esta función en la parte superior de cada página de la que desea acceder a una variable de sesión php.

    Esta función permite al script de inicio de sesión más seguro. Evita que los hackers accedan a la ID de la cookie de sesión a través de javascript (por ejemplo, un ataque XSS). ya funcionar "session_regenerate_id ()" recupera el identificador de sesión en cada carga de la página, lo que ayuda a evitar que las sesiones de robo. Nota: Si está utilizando HTTPS en su usuario de la aplicación, establezca la variable "$ asegurar" tan real (verdadero). En un entorno de producción, es esencial utilizar HTTPS.

    Crear un nuevo archivo llamado functions.php en su directorio de la aplicación y agregue el código siguiente a ello:
    lt ;? phpinclude_once `PSL-config.php`-función sec_session_start() {$ session_name = `Sec_session_id`-// Establecer un nombre personalizado para la sesión$ asegurar = SEGURO-// Esto impide que javascript puede acceder a la ID de sesión.$ httponly = verdadero-// Así se fuerza la sesión de usar sólo las cookies. si (ini_set(`Session.use_only_cookies`, 1) === FALSO) {encabezamiento("Ubicación: no ../error.php?err=Could iniciar una sesión segura (ini_set)")-salida()-}// Obtener params galletas actualizados.$ cookieParams = session_get_cookie_params()-session_set_cookie_params($ cookieParams["toda la vida"],$ cookieParams["camino"],$ cookieParams["dominio"],$ asegurar,$ httponly)-// Establece el nombre aparece como el nombre de la sesión.session_name($ session_name)-session_start()-// Inicia la sesión PHP session_regenerate_id()-// Obtener la sesión y borra la anterior. }
  • 2
    Crear una función de inicio de sesión.
    Esta función comprobará si el correo electrónico y la contraseña son compatibles con el registro en la base de datos. Si es así, vuelve a "true" (verdadero). Añadir esta función a su archivo functions.php:


    función login($ correo electrónico, $ contraseña, $ mysqli) {// Utilización de las configuraciones predefinidas significa que la inyección de SQL (un tipo de ataque) no es posible. si ($ stmt = $ mysqli-gt;preparar("SELECT id, nombre de usuario, contraseña, correo electrónico saltFROM membersWHERE = LIMIT 1")) {$ stmt-gt;bind_param(`S`, $ correo electrónico)-// Listas "$ correo electrónico" el parámetro.$ stmt-gt;corrida()-// Ejecutar el conjunto de tareas.$ stmt-gt;store_result()-// Las variables obtenidas a partir de los resultados. $ stmt-gt;bind_result($ user_id, $ nombre de usuario, $ contraseña_bd, $ salada)-$ stmt-gt;ir a buscar()-// Hacer el hash de la contraseña con una sal excusivo.$ contraseña = picadillo(`SHA512`, $ contraseña . $ salada)-si ($ stmt-gt;num_rows == 1) {// Si el usuario existe, se comprobó si la cuenta está bloqueada// Debido a limitar los intentos de inicio de sesión se han superado si (checkbrute($ user_id, $ mysqli) == verdadero) {// La cuenta está bloqueada // Envíe un correo electrónico al usuario de que la cuenta está bloqueada retornos falso (falso)-} otro {// Comprobar si la contraseña coincide con la que figura en la base de datos// La contraseña del usuario se envía.si ($ contraseña_bd == $ contraseña) {// La contraseña es correcta!// Obtener la cadena de agente de usuario del usuario. $ user_browser = $ _SERVER[`HTTP_USER_AGENT`]-// Protección XSS como está impreso este valor$ user_id = preg_replace("/ [^ 0-9] + /", "", $ user_id)-$ _SESSION[`User_id`] = $ user_id-// Protección XSS como está impreso este valor $ nombre de usuario = preg_replace("/ [^ A-Za-Z0-9 _ -] + /","",$ nombre de usuario)-$ _SESSION[`Nombre de usuario`] = $ nombre de usuario-$ _SESSION[`Login_string`] = picadillo(`SHA512`,$ contraseña . $ user_browser)-// Inicio de sesión completado con éxito.retorno verdadero-} otro {// La contraseña no es correcta// Registramos este intento en la base de datos$ ahora = equipo()-$ mysqli-gt;pregunta("INSERT INTO login_attempts (user_id, tiempo) VALUES ( `$ user_id``$ ahora`)")-retorno falso-}}} otro {// Este usuario no existe.retorno falso-}}}

  • 3
    función de la fuerza bruta.
    Los ataques de fuerza bruta o la fuerza bruta se producen cuando los piratas informáticos intentan miles de contraseñas diferentes en una sola cuenta, si son generadas al azar contraseñas o de un diccionario. En nuestro script, si un usuario fracasa en su intento de iniciar sesión más de 5 veces, se bloqueará su cuenta.

    Los ataques de fuerza bruta son difíciles de prevenir. Una forma de prevención incluye el uso de la prueba de CAPTCHA, que bloquea las cuentas de usuario y la adición de un retraso de los intentos fallidos de inicio de sesión para que el usuario no puede volver a intentarlo durante los siguientes 30 segundos.

    Es muy recomendable el uso de de CAPTCHA. No ponemos en práctica esta funcionalidad incluso en el código que sirve como ejemplo, pero estamos trabajando para que esté disponible pronto. Por ahora, utilice el SecureImage, en los que no es necesario registrar. O se puede usar algo más conocido como el reCAPTCHA de Google.

    Cualquiera que sea el sistema por el cual se decide, le aconsejamos que permite mostrar la imagen CAPTCHA después de dos intentos fallidos de entra para evitar molestias innecesarias a los que el usuario ha fallado.

    Cuando se enfrentan a ataques de fuerza bruta, la mayoría de los desarrolladores simplemente bloquea la dirección IP después de un cierto número de intentos de acceso fallidos. Sin embargo, hay varias herramientas que hacen que el proceso de generación automática de ataques como esse- estas herramientas pueden pasar por una serie de representaciones e incluso cambiar el IP cada vez que sea necesario. Mediante el bloqueo de todas estas direcciones IP, usted podría terminar bloqueando los usuarios legítimos también. En nuestro código, nosotros log (registro) de intentos fallidos y bloquear el usuario después de cinco intentos fallidos. De este modo, el usuario se enviará un correo electrónico al usuario con un enlace de restablecimiento, pero no lo han implantado en nuestro código. Aquí es un código de la función checkbrute () por lo que está escrito. Añádelo al código functions.php:

    función checkbrute($ user_id, $ mysqli) {// Se registra la hora actual $ ahora = equipo()-// Todos los intentos de conexión se cuentan dentro del rango de las últimas dos horas. $ valid_attempts = $ ahora - (2 * 60 * 60)-si ($ stmt = $ mysqli-gt;preparar("login_attempts TimeFrom SELECT 
    DONDE user_id =? Y el equipo gt; `$ valid_attempts`")) {$ stmt-gt;bind_param(`I`, $ user_id)-// Ejecutar la tarea preestablecida. $ stmt-gt;corrida()-$ stmt-gt;store_result()-// Si hay más de 5 intentos de conexión fallidos si ($ stmt-gt;num_rows gt; 5) {retorno verdadero-} otro {retorno falso-}}}
  • 4
    Compruebe el estado de inicio de sesión.
    Esto se hace renunciar a las variables de sesión "user_id" y "login_string". variable SESSION "login_string" tiene la información de la dirección IP y el navegador de forma hash junto con la contraseña. Utilizamos la dirección IP y la información del navegador, ya que es muy poco probable que el usuario cambie la dirección IP o el navegador durante la sesión. De esta manera, se impide que un ataque de secuestro en la sesión (secuestro de sesión literalmente). Añadir esta función a su archivo functions.php en el archivo incluye directorio para su aplicación:

    función login_check($ mysqli) {// Comprobar si se definieron todas las variables de las sesiones si (isset($ _SESSION[`User_id`],$ _SESSION[`Nombre de usuario`],$ _SESSION[`Login_string`])) {$ user_id = $ _SESSION[`User_id`]-$ login_string = $ _SESSION[`Login_string`]-$ nombre de usuario = $ _SESSION[`Nombre de usuario`]-// Obtener la cadena del usuario.$ user_browser = $ _SERVER[`HTTP_USER_AGENT`]-si ($ stmt = $ mysqli-gt;preparar("PasswordFROM membersWHERE SELECT = id? LÍMITE 1")) {// Asigna "$ user_id" el parámetro. $ stmt-gt;bind_param(`I`, $ user_id)-$ stmt-gt;corrida()-// Ejecutar la consulta preparada.$ stmt-gt;store_result()-si ($ stmt-gt;num_rows == 1) {// Si el usuario existe, toma las variables del resultado. $ Gt stmt-; bind_result ($ password) -$ stmt-gt;ir a buscar()-$ login_check = picadillo(`SHA512`, $ contraseña . $ user_browser)-si ($ login_check == $ login_string) {// En línea !!!retorno verdadero-} otro {// No conectado retorno falso-}} otro {// No conectado retorno falso-}} otro {// No conectado retorno falso-}} otro {// No conectado retorno falso-}}
  • 5
    PHP_SELF URL limpia
    La siguiente función despeja el resultado de la variable de servidor PHP_SELF. Es una función del cambio que tiene el mismo nombre utilizado por el gestor de contenidos de WordPress:

    función esc_url($ url) {si (` == $ url) {retorno $ url-}$ url = preg_replace(`| [^ A-z0-9- ~ + _ # =.!&- /: $% @ | * `() X80 - xff] | i`, `, $ url)-$ tira = formación(`% 0d`, `% 0a`, `% 0D`, `% 0A`)-$ url = (cadena) $ url-$ recuento = 1-mientras ($ recuento) {$ url = str_replace($ tira, `, $ url, $ recuento)-}$ url = str_replace(`- //`, `: //`, $ url)-$ url = htmlentities($ url)-$ url = str_replace(`& `, `&`, $ url)-$ url = str_replace("`", `&# 039- `, $ url)-si ($ url[0] !== `/`) {// Estamos interesados ​​sólo en enlaces relacionados de $ _SERVER [ `PHP_SELF`]retorno `-} otro {retorno $ url-}}


    El problema con el uso de una variable de servidor sin filtrar es que puede ser utilizado en una secuencia de comandos de ataque cruz. La mayor parte de las referencias sobre el tema dice que acaba de filtrar la variable usando los htmlentities (). La mala noticia es que esta medida no puede ser lo suficientemente seguro, incluso con todas las precauciones en este papel.

    Otros le indicará que deje la acción atributo en blanco, o se establece en null. Pero al hacerlo, deja el medio ambiente vulnerable a los ataques ataque de clickjacking iframe.
  • parte 5
    Creación de páginas de Procesamiento
    1
    Crear una página de procesamiento de inicio de sesión (process_login.php)

    Crear un archivo para procesar los inicios de sesión, llamados process_login.php en la aplicación include. Este fue el directorio elegido no dejar restos en HTML.

    Vamos a utilizar el conjunto de funciones PHP mysqli_ * Ser la última extensión de MySQL.

    lt ;? phpinclude_once `Db_connect.php`-include_once `Functions.php`-sec_session_start()- // Nuestra seguridad personalizada para iniciar una sesión de php.si (isset($ _POST["Correo electrónico"], $ _POST[`P`])) {$ correo electrónico = $ _POST["Correo electrónico"]-$ contraseña = $ _POST[`P`]- // El hash de la contraseña.si (login($ correo electrónico, $ contraseña, $ mysqli) == verdadero) {// Inicio de sesión correcto encabezamiento(`Localización: ../protected_page.php`)-} otro {// No se inició sesión encabezamiento(`Localización: ../index.php?error=1`)-}} otro {// Las variables POST correctas no fueron enviados a esta página. eco `Solicitud no válida` (solicitud no es válida)-}
  • 2
    Crear una secuencia de comandos de cierre de sesión.

    La secuencia de comandos de cierre de sesión se debe iniciar la sesión, destruirlo, y luego redirigir al usuario a otra página. Nota: Es mejor añadir una protección CSRF en este paso si alguien envía un enlace oculto en la página. Para obtener más información acerca de CSRF vale la pena visitar el sitio Horror de codificación.

    El código real utilizado para la sesión del usuario y deben ser incorporados a un fichero llamado logout.php en la aplicación incluye directorio es:

    lt ;? phpinclude_once `Incluye / functions.php`-sec_session_start()-// Deshace todos los valores de sesión $ _SESSION = formación()-// Obtener los parámetros de la sesión $ params = session_get_cookie_params()-// Eliminar la cookie en uso. setcookie(session_name(),`, equipo() - 42000,$ params["camino"],$ params["dominio"],$ params["asegurar"],$ params["httponly"])-// Destruye la sesión session_destroy()-encabezamiento(`Localización: ../ index.php`)-
  • 3
    La página de registros.

    Los registros de código se incluyen en dos nuevos archivos, uno llamado register.php en el directorio principal de la aplicación y otro llamado register.inc.php incluye en el directorio. Se hace lo siguiente:
  • Obtiene y valida el nombre de usuario que desee.
  • Obtiene y valida de correo electrónico del usuario.
  • Obtiene y valida la contraseña que el usuario desea utilizar.
  • Es el hash de la contraseña y envía la misma a la página register.php (es decir, el código proporciona la contraseña a sí mismo)

  • La mayoría de validación se realiza en javascript en la versión del cliente. Esto es debido a que el usuario no tiene la motivación para ir a través de todas estas comprobaciones. ¿Por qué un usuario que desee crear una cuenta de menos seguro de lo normal? javascript discutirá en la siguiente sección.

    Por ahora, basta con crear un archivo llamado archivo register.php e incluir en ella el siguiente código:

    lt ;? phpinclude_once `Incluye / register.inc.php`-include_once `Incluye / functions.php`-?gt;Ingreso Seguro: Formulario de Registro

    Regístrese con nosotros

    lt ;? phpsi (!vacía($ error_msg)) {eco $ error_msg-}?gt;
    • Los nombres de usuario deben contener sólo dígitos, letras y caracteres de subrayado ( "_") en mayúsculas y minúsculas
    • Los correos electrónicos deben seguir un formato válido para el correo electrónico.
    • Las contraseñas deben tener al menos 6 caracteres.
    • Las contraseñas deben contener
    • Al menos una letra mayúscula (a..z)
    • Al menos una letra minúscula (a..z)
    • Al menos un número (0..9)
  • Su contraseña debe verificar con exactitud
  • Volver a la La página de inicio de sesión.



    El archivo register.inc.php incluye el directorio debe contener el siguiente código:

    lt ;? phpinclude_once `Db_connect.php`-include_once `PSL-config.php`-$ error_msg = ""-si (isset($ _POST[`Nombre de usuario`], $ _POST["Correo electrónico"], $ _POST[`P`])) {// Limpia y valida los datos pasados ​​en $ nombre de usuario = filter_input(INPUT_POST, `Nombre de usuario`, FILTER_SANITIZE_STRING)-$ correo electrónico = filter_input(INPUT_POST, "Correo electrónico", FILTER_SANITIZE_EMAIL)-$ correo electrónico = filter_var($ correo electrónico, FILTER_VALIDATE_EMAIL)-si (!filter_var($ correo electrónico, FILTER_VALIDATE_EMAIL)) {// No válida de correo electrónico$ error_msg .= `

    La dirección de correo electrónico que ha introducido no es válido

    `
    -}$ contraseña = filter_input(INPUT_POST, `P`, FILTER_SANITIZE_STRING)-si (strlen($ contraseña) != 128) {// El hash de la contraseña debe tener 128 caracteres.// De lo contrario, algo muy extraño está pasando$ error_msg .= `

    contraseña de configuración no válida.

    `
    -}// El nombre de usuario y contraseña envejecimiento conferidas en el lado del cliente.// No debe haber problemas en este paso, ya que nadie gana // La violación de estas reglas.//$ prep_stmt = "Identificación del SELECT miembros donde el correo electrónico = LÍMITE 1"-$ stmt = $ mysqli-gt;preparar($ prep_stmt)-si ($ stmt) {$ stmt-gt;bind_param(`S`, $ correo electrónico)-$ stmt-gt;corrida()-$ stmt-gt;store_result()-si ($ stmt-gt;num_rows == 1) {// Un usuario con este correo electrónico ya esixte$ error_msg .= `

    Un usuario con esta dirección de correo electrónico ya existe.

    `
    -}} otro {$ error_msg .= `

    er

    De esta manera? Compartir en redes sociales:


    Opiniones y Comentarios

    Artículos Relacionados