Autor Tema: [DUDA] Codigo de Registro  (Leído 1051 veces)

Desconectado NDSi

  • PHPero Avanzado
  • ****
  • Mensajes: 410
  • Karma: 8
  • Sexo: Masculino
    • Ver Perfil
[DUDA] Codigo de Registro
« en: 29 de Noviembre de 2009, 22:15:54 pm »
Hola a todos, empeze a hacer mis codigos de 0 sin copiar absolutamente nada. En el registro tengo este codigo.

Código: [Seleccionar]
<?php
include(&#39;connect.php&#39;);
$select=mysql_query("SELECT * FROM users WHERE name=&#39;$_POST[user]&#39;"$conexion);
$user=mysql_fetch_array($select);

if (
$_GET[&#39;id&#39;]!="register") { ?>

AQUI VA UN FORMULARIO
<?php 
} else {
if ($_POST[&#39;pass&#39;]!=$_POST[&#39;pass2&#39;]) {
echo "contraseñas invalidas";
} else {
if(mysql_num_rows($comprovacion)>=1){
echo "ya existe";
} else {
$register"INSERT INTO users (name,pass,money) VALUES (&#39;".$_POST[&#39;user&#39;]."&#39;,&#39;".md5($_POST[&#39;pass&#39;])."&#39;,&#39;0&#39;)";
if (mysql_query($register)){
echo "ya te registraste";
} else {
echo "ocurrio un error, vuelve a intentarlo";
}
}
}
}
?>

Queria preguntar si este codigo es seguro o es vulnerable, gracias.

Comunidad PHPeros

[DUDA] Codigo de Registro
« en: 29 de Noviembre de 2009, 22:15:54 pm »

Desconectado K-chick

  • PHPerit@
  • *
  • Mensajes: 30
  • Karma: 0
  • Nuev@ PHPer@
    • Ver Perfil
Re:[DUDA] Codigo de Registro
« Respuesta #1 en: 29 de Noviembre de 2009, 22:56:26 pm »
No entiendo mucho, pero hace unos días mire en php.net, y las variable $_GET, $_POST, son muy vunerables e inseguras...
En codigos no te puedo ayudar mucho, si pudiera te ayudaria, a modificar las variables, pero no se mucho sobre php...

Desconectado TheGeorge

  • PHPero Avanzado
  • ****
  • Mensajes: 351
  • Karma: 13
  • Sexo: Masculino
    • Ver Perfil
    • websources
Re:[DUDA] Codigo de Registro
« Respuesta #2 en: 30 de Noviembre de 2009, 01:06:29 am »
Efectivamente, en cada consulta que uses $_POST y $_GET te recomiendo que pases esas variables por la funcion mysql_escape_string() o mysql_real_escape_string() para evitar hackeos y tambien usar las funciones stripslahes y addslahes en las variables $_GET

Saludos
¡Solo sé, que nada sé...!

Desconectado NDSi

  • PHPero Avanzado
  • ****
  • Mensajes: 410
  • Karma: 8
  • Sexo: Masculino
    • Ver Perfil
Re:[DUDA] Codigo de Registro
« Respuesta #3 en: 30 de Noviembre de 2009, 04:23:05 am »
Efectivamente, en cada consulta que uses $_POST y $_GET te recomiendo que pases esas variables por la funcion mysql_escape_string() o mysql_real_escape_string() para evitar hackeos y tambien usar las funciones stripslahes y addslahes en las variables $_GET

Saludos

Muchas gracias, eso seria...
$postuser=mysql_escape_string($_POST['user'])
¿Y reemplazo los POST y GET por la variable que 'limpia' el POST y el GET?

Desconectado x.mara.x

  • PHPero Master
  • ******
  • Mensajes: 1.364
  • Karma: 57
  • Sexo: Femenino
    • Ver Perfil
Re:[DUDA] Codigo de Registro
« Respuesta #4 en: 30 de Noviembre de 2009, 11:50:24 am »
si, pero es lo mismo que volver a poner mysql_escape_string($_POST['user'])

Desconectado NDSi

  • PHPero Avanzado
  • ****
  • Mensajes: 410
  • Karma: 8
  • Sexo: Masculino
    • Ver Perfil
Re:[DUDA] Codigo de Registro
« Respuesta #5 en: 03 de Diciembre de 2009, 06:43:10 am »
Muchas gracias Mara y George.

Código: [Seleccionar]
<?php
if ($_GET[&#39;id&#39;]!="register") { ?>

AQUI UN FORMULARIO
<?php } else {
include(&
#39;connect.php&#39;);
$select=mysql_query("SELECT COUNT(*) AS cantidad FROM users WHERE name=&#39;$usua&#39;"$conexion) or die(&#39;Error de conexion.&#39;);
$date=mysql_fetch_array($select) or die(&#39;Error de Conexion.&#39;);

$usua=mysql_escape_string($_POST[user]);
$contra=mysql_escape_string($_POST[pass]);
$verifuser=(!$usua ? die(&#39;Ingresa tu Usuario.&#39;) : "");
$verifpass=(!$contra || !$_POST[&#39;pass2&#39;] ? die(&#39;Ingresa tu Clave.&#39;) : "");
$verifcanuser=($date[&#39;cantidad&#39;]==0 ? "" : die(&#39;Ese nombre de usuario ya existe.&#39;));
$verpass=($contra==$_POST[&#39;pass2&#39;] ? "" : die(&#39;Las claves no coinciden&#39;));
$registrar=mysql_query("INSERT INTO users(name,pass,money) VALUES(&#39;$usua&#39;,&#39;$contra&#39;,0)"$conexion) or die(&#39;Error de Conexion<br>&#39;.mysql_error());

echo $verifuser;
echo 
$verifpass;
echo 
$verpass;
echo 
$verifcanuser;
if(
$registrar){ echo "Te registraste correctamente."; } else { echo "Error Inesperado."; }
}
?>

Modifique casi todo, es mas lo borre y lo empeze de nuevo porque estaba algo desorganizado el otro. ¿Asi es mas seguro? ¿Hay algun error de sintaxis (Aunque lo probe y funciona perfectamente)?

OFF: Lo hice basado en lo que aprendi ultimamente ^^.
« Última modificación: 03 de Diciembre de 2009, 06:52:18 am por NDSi »

Desconectado Focux

  • PHPero Master
  • ******
  • Mensajes: 1.010
  • Karma: 22
    • Ver Perfil
Re:[DUDA] Codigo de Registro
« Respuesta #6 en: 03 de Diciembre de 2009, 19:31:49 pm »
Muchas gracias Mara y George.

Código: [Seleccionar]
<?php
if ($_GET[&#39;id&#39;]!="register") { ?>

AQUI UN FORMULARIO
<?php } else {
include(&
#39;connect.php&#39;);
$select=mysql_query("SELECT COUNT(*) AS cantidad FROM users WHERE name=&#39;$usua&#39;"$conexion) or die(&#39;Error de conexion.&#39;);
$date=mysql_fetch_array($select) or die(&#39;Error de Conexion.&#39;);

$usua=mysql_escape_string($_POST[user]);
$contra=mysql_escape_string($_POST[pass]);
$verifuser=(!$usua ? die(&#39;Ingresa tu Usuario.&#39;) : "");
$verifpass=(!$contra || !$_POST[&#39;pass2&#39;] ? die(&#39;Ingresa tu Clave.&#39;) : "");
$verifcanuser=($date[&#39;cantidad&#39;]==0 ? "" : die(&#39;Ese nombre de usuario ya existe.&#39;));
$verpass=($contra==$_POST[&#39;pass2&#39;] ? "" : die(&#39;Las claves no coinciden&#39;));
$registrar=mysql_query("INSERT INTO users(name,pass,money) VALUES(&#39;$usua&#39;,&#39;$contra&#39;,0)"$conexion) or die(&#39;Error de Conexion<br>&#39;.mysql_error());

echo $verifuser;
echo 
$verifpass;
echo 
$verpass;
echo 
$verifcanuser;
if(
$registrar){ echo "Te registraste correctamente."; } else { echo "Error Inesperado."; }
}
?>

Modifique casi todo, es mas lo borre y lo empeze de nuevo porque estaba algo desorganizado el otro. ¿Asi es mas seguro? ¿Hay algun error de sintaxis (Aunque lo probe y funciona perfectamente)?

OFF: Lo hice basado en lo que aprendi ultimamente ^^.
Solo revise el codigo la primera parte y por lo que veo esta bien, otra cosa te sugiero que hagas una funcion para que pongas todo el codigo antihack y no lo estes repitiendo.
Mixtiqueros.net

<?PHP
define
(_miNombre, &#39;Focux&#39;);
if(_miNombre == &#39;Focux&#39;): printf(&#39;%s es un programador avanzado&#39;, _miNombre); else: printf(&#39;Tu no eres %s&#39;, _miNombre); endif;
?>

Desconectado westwest

  • PHPero Master
  • ******
  • Mensajes: 2.837
  • Karma: 104
  • Sexo: Masculino
    • Ver Perfil
Re:[DUDA] Codigo de Registro
« Respuesta #7 en: 03 de Diciembre de 2009, 19:41:38 pm »
$verifuser=(!$usua ? die('Ingresa tu Usuario.') : "");
$verifpass=(!$contra || !$_POST['pass2'] ? die('Ingresa tu Clave.') : "");
$verifcanuser=($date['cantidad']==0 ? "" : die('Ese nombre de usuario ya existe.'));
$verpass=($contra==$_POST['pass2'] ? "" : die('Las claves no coinciden'));
echo $verifuser;
echo $verifpass;
echo $verpass;
echo $verifcanuser;

Esto es una tonteria, hay es más recomendable usar un if normal...

Desconectado Focux

  • PHPero Master
  • ******
  • Mensajes: 1.010
  • Karma: 22
    • Ver Perfil
Re:[DUDA] Codigo de Registro
« Respuesta #8 en: 03 de Diciembre de 2009, 19:52:29 pm »
$verifuser=(!$usua ? die('Ingresa tu Usuario.') : "");
$verifpass=(!$contra || !$_POST['pass2'] ? die('Ingresa tu Clave.') : "");
$verifcanuser=($date['cantidad']==0 ? "" : die('Ese nombre de usuario ya existe.'));
$verpass=($contra==$_POST['pass2'] ? "" : die('Las claves no coinciden'));
echo $verifuser;
echo $verifpass;
echo $verpass;
echo $verifcanuser;

Esto es una tonteria, hay es más recomendable usar un if normal...
Pienso lo mismo, se podria ahorrar varias lineas.
Mixtiqueros.net

<?PHP
define
(_miNombre, &#39;Focux&#39;);
if(_miNombre == &#39;Focux&#39;): printf(&#39;%s es un programador avanzado&#39;, _miNombre); else: printf(&#39;Tu no eres %s&#39;, _miNombre); endif;
?>

Desconectado NDSi

  • PHPero Avanzado
  • ****
  • Mensajes: 410
  • Karma: 8
  • Sexo: Masculino
    • Ver Perfil
Re:[DUDA] Codigo de Registro
« Respuesta #9 en: 03 de Diciembre de 2009, 20:27:53 pm »
$verifuser=(!$usua ? die('Ingresa tu Usuario.') : "");
$verifpass=(!$contra || !$_POST['pass2'] ? die('Ingresa tu Clave.') : "");
$verifcanuser=($date['cantidad']==0 ? "" : die('Ese nombre de usuario ya existe.'));
$verpass=($contra==$_POST['pass2'] ? "" : die('Las claves no coinciden'));
echo $verifuser;
echo $verifpass;
echo $verpass;
echo $verifcanuser;

Esto es una tonteria, hay es más recomendable usar un if normal...

Si lo se, pero quise aplicar lo ultimo que aprendi.

Desconectado TheGeorge

  • PHPero Avanzado
  • ****
  • Mensajes: 351
  • Karma: 13
  • Sexo: Masculino
    • Ver Perfil
    • websources
Re:[DUDA] Codigo de Registro
« Respuesta #10 en: 03 de Diciembre de 2009, 22:11:30 pm »
Cita de: Focux
Solo revise el codigo la primera parte y por lo que veo esta bien, otra cosa te sugiero que hagas una funcion para que pongas todo el codigo antihack y no lo estes repitiendo.

Si se crea una funcion para poner el codigo antihack, dentro de esa funcion usarías la misma funcion y creo que sería lo mismo o peor, porque se estarían usando 2. no?

Saludos.
¡Solo sé, que nada sé...!

Desconectado NDSi

  • PHPero Avanzado
  • ****
  • Mensajes: 410
  • Karma: 8
  • Sexo: Masculino
    • Ver Perfil
Re:[DUDA] Codigo de Registro
« Respuesta #11 en: 04 de Diciembre de 2009, 07:55:06 am »
Efectivamente, en cada consulta que uses $_POST y $_GET te recomiendo que pases esas variables por la funcion mysql_escape_string() o mysql_real_escape_string() para evitar hackeos y tambien usar las funciones stripslahes y addslahes en las variables $_GET

Saludos

No hay otra forma de 'limpiar' los POST, porque dice que a mysql_real_escape_string se le escapa \ entonces si ponen \' or \'a\'=\'a. Y dicen que mysql_escape_string es obsoleta y que en PHP6 la quitaran. Addslashes se le escapa ", ', entre otros, o sea, no es seguro.

¿Alguna otra?

Desconectado westwest

  • PHPero Master
  • ******
  • Mensajes: 2.837
  • Karma: 104
  • Sexo: Masculino
    • Ver Perfil
Re:[DUDA] Codigo de Registro
« Respuesta #12 en: 04 de Diciembre de 2009, 15:24:54 pm »
mysql_real_escape_string creo que esta preparada contra eso, si no menuda seguridad la de php...

Desconectado x.mara.x

  • PHPero Master
  • ******
  • Mensajes: 1.364
  • Karma: 57
  • Sexo: Femenino
    • Ver Perfil
Re:[DUDA] Codigo de Registro
« Respuesta #13 en: 19 de Diciembre de 2009, 22:06:37 pm »
No hay otra forma de 'limpiar' los POST, porque dice que a mysql_real_escape_string se le escapa \ entonces si ponen \' or \'a\'=\'a. Y dicen que mysql_escape_string es obsoleta y que en PHP6 la quitaran. Addslashes se le escapa ", ', entre otros, o sea, no es seguro.

¿Alguna otra?
yo siempre uso htmlspecialchars()

Desconectado Focux

  • PHPero Master
  • ******
  • Mensajes: 1.010
  • Karma: 22
    • Ver Perfil
Re:[DUDA] Codigo de Registro
« Respuesta #14 en: 20 de Diciembre de 2009, 01:14:50 am »
Si se crea una funcion para poner el codigo antihack, dentro de esa funcion usarías la misma funcion y creo que sería lo mismo o peor, porque se estarían usando 2. no?

Saludos.
No, porque aparte de mysql_real_escape_string se puede usar trim, stripslashes y muchas mas.
Mixtiqueros.net

<?PHP
define
(_miNombre, &#39;Focux&#39;);
if(_miNombre == &#39;Focux&#39;): printf(&#39;%s es un programador avanzado&#39;, _miNombre); else: printf(&#39;Tu no eres %s&#39;, _miNombre); endif;
?>