2010-11-15 16 views
21

¿Hay algún escenario en el que un cliente/usuario/pirata informático pueda establecer las variables $_SESSION (excluyendo el software malicioso que se ejecuta en una computadora servidor), principalmente a través del navegador?

La razón por la que pregunto es por this question que pregunté hace unos días. Desde entonces me he confundido mucho sobre el tema, pero tengo una mejor idea de la fijación de sesión y el secuestro.

Para decirlo de la manera más simple posible, si valido cada página con algo como isset($_SESSION['validated']), ¿es seguro?

Respuesta

18

Sí, si estaba asignando variables $_SESSION directamente a la entrada del usuario sin filtro.

Lo que me lleva a mi punto: NUNCA CONFÍE ENTRADA DEL USUARIO. SIEMPRE

Si de hecho está filtrando la entrada, entonces no veo cómo se podría hacer.

+10

De hecho, (suponiendo que la sensibilidad en nombre del programador web) no pudo. Los datos de '$ _SESSION' se guardan en el servidor y se buscan mediante una clave almacenada como cookie. No hay manera de permutar datos en '$ _SESSION', pero un usuario podría adivinar el ID de sesión de otra sesión y enviar la cookie de sesión adecuada. Pero para todos los efectos, para usted (el programador web), serían exactamente los mismos que el otro usuario, por lo que no es su responsabilidad protegerse contra ellos de todos modos. Firesheep (http://codebutler.github.com/firesheep/) hace eso. – Ashe

+0

@Arlen - si miras mi edición, esa es exactamente la respuesta que estaba buscando en la otra pregunta que hice. Algún representante está en juego allí. – Ben

+0

Y si le das a las personas tu clave privada RSA, entonces el cifrado RSA se rompe ... –

-1

Sí, es posible. Lea sobre Session poisoning y otro problema de seguridad bastante común Session fixation en Wikipedia o en Google, la web está llena de artículos sobre eso.

+0

Uhhh ... ese artículo tiene frases como "lo cual es posible si el atacante y la víctima comparten un hotel web" y "tienen los mismos estados de sesión pero donde el uso difiere, causando ambigüedad y condiciones de carrera ".Pero entiendo tu punto y miraré alrededor. – Ben

+4

No estoy seguro de que el envenenamiento de sesión sea relevante aquí. Esos son problemas de codificación independientes del idioma que tienen que ver con la asignación de variables de sesión utilizando la entrada del usuario no optimizado. El hecho es que no hay forma de que los clientes accedan directamente a $ _SESSION. Su aplicación tiene que hacerlo por ellos. Si permite eso o no, es un tema aparte aquí. Puede confiar $ _SESSION para estar a salvo de la manipulación directa del usuario, del mismo modo que puede confiar en que los archivos fuera de su raíz web no pueden ser accedidos directamente por los usuarios, a menos que implemente una forma de permitirlo. –

1

No creo que las variables $ _SESSION se puedan cambiar a menos que el usuario tenga acceso al servidor; de lo contrario, no pueden cambiarlo, pero se recomienda filtrar las variables o desinfectarlas si es algo que el usuario ingresa.

+1

Probablemente no deberías adivinar al responder preguntas, especialmente porque la pregunta de OP podría pertenecer a datos de usuarios privados – vqdave

0

No entiendo muy bien la pregunta, pero esta pregunta explica mi manera de pensar lo que usted desea hacer.

Asegúrese de incluir jQuery.

Código:

<html> 
<head> 
    <title>Tab name</title> 
    <meta charset = "UTF-8" /> 
    <script type = "text/javascript" src = "http://code.jquery.com/jquery-1.1.13.min.js"></script> 
    <script type = "text/javascript" src = "script.js"></script> 
</head> 
<body> 
</body> 

</html> 

a continuación, hacer un archivo llamado addsession.php.

Código de addsession.php:

<?php session_start(); ?> 
<?php 
    if(isset($_POST["name"])){ 
    $name = $_POST["name"]; 
    } else { 
    print '<p style = "color: red; font-weight: bold;">Name not defined!</p>' . "\n"; 
    $name = "unknownsessionvariable"; 
    } 
    if(isset($_POST["value"])){ 
    $value = $_POST["value"]; 
    } else { 
    $value = ""; 
    } 
    $_SESSION[name] = value; 
?> 

Código de script.js: Código

function session(name, value){ 
    $.post(addsession.php, {"name" : name, "value" : value}); 
    window.location.reload(); // This line maybe should be here depending on what you are doing. 
} 
$(document).ready(function(){ 
    session("sessvar", "supervalue"); 
}); 

Ejemplo fragmento:

function session(name, value){ 
 
    $.post("http://www.eastonwerling.com/addsession.php", {"name" : name, "value" : value}); 
 
    //window.location.reload(); 
 
$(document).ready(function(){ 
 
    session("sessvar", "supervalue"); 
 
});
<script src="http://code.jquery.com/jquery-1.11.3.min.js"></script> 
 
<p>This example depends on www.eastonwerling.com (my website).</p>

Cuestiones relacionadas