Trabajar con tokens y sesiones de usuario [cerrado]

0

Estoy tratando de desarrollar una aplicación de redes sociales y un sitio web. El problema es que estoy tratando de encontrar una forma segura de trabajar con inicios de sesión y sesiones, ya que otros métodos no parecen ser buenos o tienen mejores formas.

Para el sitio web, una vez que inicie sesión si la contraseña y el nombre de usuario coinciden, ¿debo guardar una sesión como cookie o crear algún tipo de token? Preferiría que no caduque porque sería inconveniente para los usuarios, pero quiero que sea seguro al mismo tiempo.

Para la aplicación, cuando inicie sesión, ¿también debería guardar una sesión y trabajar con eso? ¿O debería también tener un token que se renueva automáticamente? No quiero que siga solicitando al usuario que inicie sesión, ya que eso alejaría a las personas.

Estoy usando el siguiente software e idiomas:

  • Aplicación: Xamarin.Forms (C #)
  • Sitio web: PHP
  • Base de datos: MySQL
pregunta Dan 28.04.2018 - 23:39
fuente

1 respuesta

1

PHP ha incorporado una administración de sesión que puede utilizar, por ejemplo.

session_start();
<?php
    $_SESSION[] = something;
session_destroy(); <- when you want to end that current session
?>

Para su acción de formulario: <?php echo($_SERVER[PHP_SELF]);> para mitigar xss

si utiliza este método, cada sesión asignará una clave de usuario en la máquina de los usuarios y cuando se abra una sesión en otro lugar, buscará esa clave. Si coincide, accede a esa sesión. Si no es así, comienza una nueva. sesión.

Puedes usar session_destroy() para eliminar todos los datos de sesión de ese usuario o session_unset(); para destruir una sesión en particular.

Si está utilizando una base de datos SQL, debe asegurarse de que se está realizando la validación; de lo contrario, dejará su aplicación web abierta a varios ataques, es decir. XSS, SQLi, etc., que pueden filtrar los datos de sus usuarios, para una aplicación / sitio web de medios sociales que es muy malo por razones obvias. Por ejemplo, para un campo de inicio de sesión, algo como esto sería seguro:

<?php
    function clean($string)                    //custom cleaning with regex
    {
        $string = str_replace(' ', '-' $string);
        $string = preg_replace('/[^A-Za-z0-9\-]/', '', $string);
        return preg_replace('/-+/', '-', $string);
    }

    if(isset($_POST('submit')))               // built in sanitising
    {
        $sanitised_name = filter_input(INPUT_POST, 'username', FILTER_SANITISED_ENCODED, FILTER_FLAG_STRIP_HIGH);
    }

    echo $sanitised_name;                    // print out the sanitised name
    echo .clean($_POST['username']).;        // print out using the custom function

   ?>

Lo anterior muestra dos formas diferentes de lograr resultados muy similares con las funciones integradas. el primer bloque usa expresiones regulares que podría restringir a cualquier conjunto de caracteres que quisiera que los usuarios usaran, mientras que el segundo bloque usa las funciones integradas que tiene PHP: el final solo tiene eco para que pueda ver la diferencia para cualquier entrada que use.

EDITAR: Cuando almacene los nombres de usuario y las contraseñas de sus usuarios, debe guardar el nombre de texto sin formato en su base de datos, pero las contraseñas deben incluirse con sal y hash, así que en lugar de verificar si un nombre de usuario y una contraseña coinciden, verifique si un hash de nombre de usuario y contraseña coinciden. tiene en su base de datos, pero asegúrese de configurar una conexión segura antes de que el usuario envíe algo; de lo contrario, está enviando información a su sitio de forma poco segura, es bastante fácil para alguien que realice MITM y robe credenciales.

En realidad escribí un artículo que trata específicamente sobre la protección de PHP, SQL, cookies y sesiones de ataques como XSS, SQLi, secuestro de sesiones, etc. Si es de alguna utilidad, le dejo un enlace a continuación, ya que se incluye en más detalles: enlace Sólo como un descargo de responsabilidad no trabajo en seguridad - Soy un estudiante que estudia compSec, pero espero trabajar en la industria en los próximos dos años. Si falta algo o es mejor que mi respuesta, edítalo para mejorarlo, ¡ya que algunas personas aquí son muy conocedoras!

Buena suerte con la aplicación de redes sociales y el sitio web. ¡Es bueno ver que está deseando que esté seguro desde el principio!

    
respondido por el Connor J 29.04.2018 - 11:20
fuente

Lea otras preguntas en las etiquetas