security - medidas - datos personales en internet
¿Mejores formas de proteger datos de formularios de usuarios malintencionados que manejan Firebug? (2)
Aquí hay algunas sugerencias básicas:
Necesita validar las entradas de formulario utilizando un script del lado del servidor (PHP).
En lugar de confiar en datos confidenciales, como la identificación de miembro, desde el formulario, en su lugar, podría almacenar estos datos en la sesión del servidor. De esta forma, no hay forma de que un usuario malintencionado cambie los datos sobre la marcha.
Aún puede usar la validación de jQuery como una conveniencia para detectar problemas de entrada básicos, pero solo puede confiar en los datos que se validan utilizando el código del lado del servidor.
He leído un par de preguntas relacionadas sobre esto, pero no responden mi pregunta directamente. Las herramientas de desarrollo como Firebug permiten a cualquier persona ver y manipular los datos del formulario antes de enviar un formulario. Un buen ejemplo de esto es ajustar el valor de un campo oculto de "ID de miembro" para que el envío del formulario se acredite a otro usuario.
¿Cuáles son las mejores formas de prevenir este tipo de manipulación? Mi investigación sugiere mover entradas de formularios sensibles a un script del lado del servidor, pero ¿hay otras opciones o consideraciones?
Estoy familiarizado con PHP y jQuery, por lo que mi solución ideal utilizaría uno o ambos idiomas.
No puede usar jQuery para seguridad ya que todo se maneja en el lado del cliente.
En su ejemplo, solo use una sesión de PHP en staed de un campo de entrada oculto, porque como ha señalado con razón esto puede ser manipulado.
El uso de sesiones se vería como el siguiente:
página de inicio de sesión
<form action="login.php" method="post">
<input type="text" name="username">
<input type="password" name="password">
<input type="submit" name="submit" value="submit">
</form>
login.php
// you have to include this on every page to be able to user sessions.
// also make sure that you include it before any output
session_start();
//Always sanitize the user input before doing any db actions.
//For example by using: `mysql_real_escape_string()` ( http://php.net/manual/en/function.mysql-real-escape-string.php ).
// check user credentials against db
$_SESSION[''user''] = $dbresult[''username''];
page-where-userid-is-required.php
session_start();
if (!isset($_SESSION[''user''])) {
// user is not logged in!
} else {
// use user info to place order for example
}
La sesión estará activa hasta que el usuario cierre su navegador / hasta que la sesión expire (que es una configuración de PHP)
Lo anterior es solo un código de muestra para darle una idea.
Funciona proyectos más pequeños, sin embargo, a medida que los proyectos se vuelven más complejos, sugiero ir por la forma MVC (Modelo, Vista, Controlador). ( http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller )
Pero eso es solo otra historia :)