PHP - ¿Cómo implementar seguridad en PHP?

 
Vista:
Imágen de perfil de Max

¿Cómo implementar seguridad en PHP?

Publicado por Max (19 intervenciones) el 11/06/2015 21:57:03
Si pudieran pasarme algunos trucos para evitar inyecciones SQL, ataques XSS, inyección PHP e inyección HTML, además de algunos trucos para evitar manipulación de la URL y un buen método para encriptar contraseñas además de los hash ya conocidos.

Gracias de antemano.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de xve
Val: 3.943
Oro
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

inyecciones SQL

Publicado por xve (6935 intervenciones) el 12/06/2015 08:02:36
Hola Max, las inyecciones SQL varian dependiendo del conector que utilices y el motor de base de datos...

Que base de datos vas a utilizar, y con que conector? por ejemplo, si utilizas el conector PDO con los interrogantes, ya te aseguras de no tener inyection, o si utilizas las base de datos MongoDB, tampoco vas a tener.

Un ejemplo de PDO sacado de la página de PHP:
1
2
3
4
$sth = $dbh->prepare('SELECT name, colour, calories
    FROM fruit
    WHERE calories < ? AND colour = ?');
$sth->execute(array(150, 'red'));
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Max

inyecciones SQL

Publicado por Max (19 intervenciones) el 12/06/2015 17:26:12
Utilizo MySQL como lenguaje de consulta, ¿cómo podría evitar las inyecciones SQL?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve
Val: 3.943
Oro
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

inyecciones SQL

Publicado por xve (6935 intervenciones) el 13/06/2015 08:23:26
Con el ejemplo que te puse lo evitas...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Max

inyecciones SQL

Publicado por Max (19 intervenciones) el 14/06/2015 17:58:37
Ok, ya entiendo; gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Vainas
Val: 34
Ha aumentado su posición en 3 puestos en PHP (en relación al último mes)
Gráfica de PHP

inyecciones SQL

Publicado por Vainas (262 intervenciones) el 14/06/2015 11:08:12
Buenas: Añado mi corta experiencia en esto.

Si utilizas algun framework esto pueden venir ya echo, asi que solo tienes que seguir las pautas que te marquen.

Una vez escuche decir a alguien que hay que utilizar GET y POST para lo que son. No envies datos, a ser posible ya que luego en la practica hacemos las cosas como las hacemos, por GET sino es para listar y cosas por el estilo. Usa POST para modificar cosas en el servidor.

No uses solamente javascript para validar los campos en el cliente y pienses que ya vienen bien....

Usa mysqli en vez de mysql ya que este ultimo esta siendo sustituido por el primero.

En fin, es poco lo que pongo pero para el que no sepa estas cosas....

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Max

inyecciones SQL

Publicado por Max (19 intervenciones) el 14/06/2015 17:30:56
Gracias por el dato, había leído sobre mysqli pero como este se usa más en POO (y aún no la domino) no lo he visto a fondo, empezaré a usarlo desde ahora.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve
Val: 3.943
Oro
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

ataques XSS

Publicado por xve (6935 intervenciones) el 12/06/2015 08:03:12
Para los ataques XSS, lo suyo es utilizar htmlentities(), de esta manera, nunca ejecutaras código de javascript o html.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de xve
Val: 3.943
Oro
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

manipulación de la URL

Publicado por xve (6935 intervenciones) el 12/06/2015 08:03:44
No se muy bien a que te refieres con manipulación de la URL... nos puedes comentar con mas detalle?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Max

manipulación de la URL

Publicado por Max (19 intervenciones) el 12/06/2015 17:27:59
Me refiero a manipular las variables pasadas por el metodo GET en caso de que alguien descubra los criterios para pasar las variables.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve
Val: 3.943
Oro
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

manipulación de la URL

Publicado por xve (6935 intervenciones) el 13/06/2015 08:26:18
Nosotros siempre sanitizamos las variables que nos vienen del navegador, tanto las que vienen por get como por post, ya que todas son susceptibles de modificar una vez se han enviado del formulario y antes de recibirlas en el servidor.

Sanitizar los valores, quiere decir, que te aseguras que si esperas un entero, sea un entero, y si esperas una cadena, solucione el problema de las comillas, etc...

Revisa esta clase:
http://www.lawebdelprogramador.com/codigo/PHP/2208-Clase-para-sanitizar-los-parametros-de-un-formulario.html
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve
Val: 3.943
Oro
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

método para encriptar contraseñas

Publicado por xve (6935 intervenciones) el 12/06/2015 08:10:42
En este punto, yo utilizo el md5 con una key... me explico.

Código la contraseña del usuario con md5 añadiendole una cadena siempre fija que unicamente nosotros sabemos.
por ejemplo, el usuario pone como contraseña cielo, entonces, nosotros añadimos nuestra key a la cadena, supongamos que nuestra key es: asklfhweoalksdf

md5("asklfhweoalksdf"."cielo");

De esta manera, aunque consigan recuperar la lista de contraseñas, si no disponen de la key, no podrán acceder nunca.

Espero que te sirva.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 729
Bronce
Ha aumentado 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

método para encriptar contraseñas

Publicado por Gonzalo (615 intervenciones) el 13/06/2015 01:34:26
acerca de la inyeccion sql.

hay varias utilerias en php que te ayudar a evitar este tipo de problemas.

y tambien tu puedes crear tu propia funcion para detectar y evitar inyecciones sql.

solo debes entender la mecanica del inyection en un punto muy fundamental:

es tu propia propia pagina la que hace la inyeccion, asi que eres tu quien facilita el trabajo del hacker.

hay mucha documentacion acerca de esto pero te lo voy a comentar de manera basica

todo esta en encontrar el punto en el que puedes manipular el string que contiene el comando sql.

algo tan simple como:

$UserId=$_POST["TexUserid"];
sql command = "select * from usuarios where userid=" & $UserId & "'";

esto puede permitir tantas inyecciones sql como el hacker quiera, borrar, insertar, modificar, etc, ya que UserId es manipulable de esta forma

$_POST["TexUserId"]="0'; delete from usuarios; -- (esto fue lo que se capturo en el campo de texto del id del usuario)

la cadena sql que ejecuta tu pagina web queda asi

select * from usuarios where idusuario='0'; delete * from usuarios; --'

asi de sencillo.

que tienes que hacer?
validar que no capturen --
validar que no capturen ;
validar que no capturen delete, execute, drop, insert, create, from, join etc.
y algo que me ha ayudado bastante para evitar esto es:

limita el TextBox al numero maximo indispensable del dato que se debe capturar.

si el userid es de 8 digitos limita el textbox a 8 digitos, eso dificulta el inyection.
si el textbox es para capturar un numero validalo a que solo haya numeros, +-,
si es un nombre, limitalo solo a texto.

cualquier caracter detectado como no permitido debe borrar loq ue se capturo ANTES de ejecutar el query

$UserId=""; (y se acabo)

de ahi en mas, usa tu imaginacion, piensa como hacker y reduciras las posibilidades de hack.

2 cocineros que siguen una misma receta da como resultado 2 pasteles iguales ... la experiencia de los cocineros se detecta con solo probar los pasteles.

y para encryptar contrase;as no han dada mejor que el hash
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de xve
Val: 3.943
Oro
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

método para encriptar contraseñas

Publicado por xve (6935 intervenciones) el 13/06/2015 08:28:23
Buena explicación Gonzalo!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar