Comunidad de diseño web y desarrollo en internet online

Desafio de programación y"juakín"

Ir a página 1, 2  Siguiente

Foros de discusión > Charla

Citar            
MensajeEscrito el 10 Oct 2005 03:46 am
Estoy aburrido en una RIA en PHP, remoting y FAMES (Si, FAMES, saludos al conejo ninja que fue quien me metio en este horrible circulo de imposible escapatoria), asi que, por mil puntos, ¿Por que son necesarias las primeras 4 lineas de la siguiente función en PHP?

Código :

function login($username,$password){
   $username = str_replace("'","",$username);
   $password = str_replace("'","",$password);
   $username = str_replace(";","",$username);
   $password = str_replace(";","",$password);
   $sql = "SELECT COUNT(id_usuario) FROM usuarios WHERE nombre = '".$username."' AND password='".
}
Recuerden, no les estoy preguntando que hacen, sino porque son necesarias; es muy facil y les enseñara algunas cosas muy importantes que pasan desapercibidas por el programador promedio

Por Freddie

BOFH

53 tutoriales
597 articulos
43 ejemplos

Genero:Masculino   Admin

Conserje de Cristalab

firefox
Citar            
MensajeEscrito el 10 Oct 2005 03:49 am
para que no te hackeen el sql?

Por fael

BOFH

2443 de clabLevel

3 tutoriales
2 articulos

 

firefox
Citar            
MensajeEscrito el 10 Oct 2005 03:51 am
ok fael quiere decir que si el usuario ingresa comillas simples y/o ; no alteren la sentencia sql por eso la sustituyes por un espacio en blanco en ambos casos.

Por Maikel

BOFH

5575 de clabLevel

22 tutoriales
5 articulos

Genero:Masculino   Team Cristalab

Claber de baja indefinida

firefox
Citar            
MensajeEscrito el 10 Oct 2005 03:51 am
Pues para evitar inyeccion de codigo

Por skins_say

76 de clabLevel



 

firefox
Citar            
MensajeEscrito el 10 Oct 2005 03:59 am
por cierto str_replace acepta arrays :lol:

Por Maikel

BOFH

5575 de clabLevel

22 tutoriales
5 articulos

Genero:Masculino   Team Cristalab

Claber de baja indefinida

firefox
Citar            
MensajeEscrito el 10 Oct 2005 02:04 pm
Para evitar una inyeccion SQL....

Por rolv

Claber

2000 de clabLevel

3 tutoriales

 

firefox
Citar            
MensajeEscrito el 10 Oct 2005 04:48 pm
No se :?

Por dave73

985 de clabLevel

5 tutoriales

 

Argentina, Córdoba

firefox
Citar            
MensajeEscrito el 10 Oct 2005 05:58 pm
efectivamente, evita que inyecten los caracteres ' y ; a la sentencia de comando de SQL, reemplazandolos por espacios vacios.

aunque, la gente "normal" usa addslashes

Por H3r3j3

290 de clabLevel

1 tutorial

Genero:Masculino  

Desarrollador Multimedia

firefox
Citar            
MensajeEscrito el 11 Oct 2005 12:43 am
Segun yo es por esto:

Quitamos la comilla simple ('), por que si no mysql nos devolveria un error SQL Error 1064
Quitamos el punto y como (;), por que si no tambien tendriamos error en my sql ya que cortaria la sentencia a ese punto.

Segun yo es eso... xD

Por Cep

BOFH

1509 de clabLevel

9 tutoriales

1 ejemplo

Genero:Masculino   REC Bastard Operators From Hell

Web Developer

firefox
Citar            
MensajeEscrito el 11 Oct 2005 03:16 am
Nadie tiene algun ejemplo practico de que es lo que esto evita?

Por Freddie

BOFH

53 tutoriales
597 articulos
43 ejemplos

Genero:Masculino   Admin

Conserje de Cristalab

firefox
Citar            
MensajeEscrito el 11 Oct 2005 04:32 am
me da flojera escribir todo, pero esto es básicamente la respuesta

http://www.ilovejackdaniels.com/security/writing-secure-php/2/

y efectivamente, es mejor utilizar un addslashes o str_replace("'","\'",$var);

Por fael

BOFH

2443 de clabLevel

3 tutoriales
2 articulos

 

firefox
Citar            
MensajeEscrito el 11 Oct 2005 02:45 pm

Antes escribió:

function login($username,$password){
$username = str_replace("'","",$username);
$password = str_replace("'","",$password);
$username = str_replace(";","",$username);
$password = str_replace(";","",$password);
$sql = "SELECT COUNT(id_usuario) FROM usuarios WHERE nombre = '".$username."' AND password='".
}


Despues escribió:


function login($username,$password){
$sql = "SELECT COUNT(id_usuario) FROM usuarios WHERE nombre = '".addslashes($username)."' AND password='".addslashes($password)."';";
}


bueno para empezar el SQL estaba incompleto, XD
ahora explicaré las razónes por las cuales se usan este tipo de precauciones.

contenido escribió:

xpass';
INSERT INTO usuarios FIELDS(usuario,password)VALUES('nuevousuario','nuevaclave');
SELECT COUNT(id_usuario) FROM usuariosWHERE '1

Ejecución:

Código :

archivo.php?usuario=xusuario&password=xpass';INSERT%20INTO%20usuarios%20FIELDS(usuario,password)VALUES('nuevousuario','nuevaclave');SELECT%20COUNT(id_usuario)%20FROM%20usuarios%20WHERE '1

aqui tendriamos el resultado sin addslashes();
si se usa reemplace de igualmanera se puede saltar usando en las comillas doble comillas así: " que de igual manera no afectaría. por ello se usa addslashes.

SELECT COUNT(id_usuario) FROM usuarios WHERE nombre = 'xusuario' AND password='
xpass';
INSERT INTO usuarios FIELDS(usuario,password)VALUES('nuevousuario','nuevaclave');
SELECT COUNT(id_usuario) FROM usuarios WHERE '1
';

el este ejemplo se ha insertado un usuario que antes no estaba permitido a acceder y a demás se ha logueado un usuario con la identificación de el id inferior disponible.
el sistema gestor de bases de datos entendería el query de la siguiente manera:

SGBD escribió:

SELECT COUNT(id_usuario) FROM usuarios WHERE nombre = 'xusuario' AND password='xpass';

INSERT INTO usuarios FIELDS(usuario,password)VALUES('nuevousuario','nuevaclave');

SELECT COUNT(id_usuario) FROM usuarios WHERE '1';


y ahora en el caso de el uso de addslashes() la cosa sería diferente.
SELECT COUNT(id_usuario) FROM usuarios WHERE nombre = 'xusuario' AND password='
xpass\';
INSERT INTO usuarios FIELDS(usuario,password)VALUES(\'nuevousuario\',\'nuevaclave\');
SELECT COUNT(id_usuario) FROM usuarios WHERE \'1
';

y todo el query maligno sería ingresado como un intento de clave, lo cuál retornaría un total de 0 registros ;)

Por jhony192

791 de clabLevel

1 tutorial

Genero:Masculino  

Just Another Programmer

firefox
Citar            
MensajeEscrito el 11 Oct 2005 03:06 pm
por cierto, 1000 puntos son mucho para mí y he pensado que humildemente me podrías mandar una franela de Clab xd
y para que el envio se aproveche al máximo, mandas cualquier cosa que puedas adjuntar (salvo bombas, Anthrax, ni virus desconocidos).
XD XD XD

Por jhony192

791 de clabLevel

1 tutorial

Genero:Masculino  

Just Another Programmer

firefox
Citar            
MensajeEscrito el 11 Oct 2005 03:39 pm
Es un muy buen ejemplo el que pone jhony192 (Al que agradecemos profundamente hacerlo en Español); pero otro mas facil seria...

Imaginemos que tenemos, tradicionalmente, dos campos de login y contraseña, ponemos en el de login

Código :

Administrador

Y en el de password

Código :

' OR TRUE OR '


Si hacemos esto, lo que tendremos en la sentencia total sera

Código :

SELECT COUNT(id_usuario) FROM usuarios WHERE nombre='Administrador' AND password='' OR TRUE OR ''

Esa sentencia es verdadera, por lo que cualquiera puede entrar a la aplicación como admin sin tener el pwd

Por Freddie

BOFH

53 tutoriales
597 articulos
43 ejemplos

Genero:Masculino   Admin

Conserje de Cristalab

firefox
Citar            
MensajeEscrito el 11 Oct 2005 07:24 pm
:cry: :cry: :cry: :cry: :cry:

Por jhony192

791 de clabLevel

1 tutorial

Genero:Masculino  

Just Another Programmer

firefox
Citar            
MensajeEscrito el 11 Oct 2005 07:32 pm
tomando nota de eso ultimo.....

Por rolv

Claber

2000 de clabLevel

3 tutoriales

 

firefox
Citar            
MensajeEscrito el 12 Oct 2005 01:24 am
Toma nota de esto: :twisted:
:punal:
si ya veo que a tí lo que te falta es cariño
asi que toma :bate: toma :bate: toma :bate: toma :bate:
toma :bate: toma :bate: toma :bate: toma :bate:
para que respete :| :| :| y no te doy mas porque estoy cansado a estoy desde la insignia del mal y no me gusta estar aquí :sueno:

Por jhony192

791 de clabLevel

1 tutorial

Genero:Masculino  

Just Another Programmer

msie
Citar            
MensajeEscrito el 12 Oct 2005 01:27 am

jhony192 escribió:

Toma nota de esto: :twisted:
:punal:
si ya veo que a tí lo que te falta es cariño
asi que toma :bate: toma :bate: toma :bate: toma :bate:
toma :bate: toma :bate: toma :bate: toma :bate:
para que respete :| :| :| y no te doy mas porque estoy cansado a estoy desde la insignia del mal y no me gusta estar aquí :sueno:


Me disculpo jhony192....

Por rolv

Claber

2000 de clabLevel

3 tutoriales

 

firefox
Citar            
MensajeEscrito el 12 Oct 2005 02:06 am
:zzz:

Por NEO_JP

BOFH

5724 de clabLevel

13 tutoriales
12 articulos

Genero:Masculino   Anime Bloggers Premio_Secretos Team Cristalab

Front-end Developer en Washington, DC

firefox
Citar            
MensajeEscrito el 12 Oct 2005 03:30 am
NIF();

Por fael

BOFH

2443 de clabLevel

3 tutoriales
2 articulos

 

firefox
Citar            
MensajeEscrito el 12 Oct 2005 04:03 am
Y si los metemos a una caja de galletas de animalitos?...

Por Cep

BOFH

1509 de clabLevel

9 tutoriales

1 ejemplo

Genero:Masculino   REC Bastard Operators From Hell

Web Developer

firefox
Citar            
MensajeEscrito el 12 Oct 2005 04:05 am
DFT();

Por FeNtO

BOFH

5091 de clabLevel

18 tutoriales

1 ejemplo

  Bastard Operators From Hell

FeNtO DataCenter

clabbrowser
Citar            
MensajeEscrito el 12 Oct 2005 04:30 pm
Enttonces tambien hay que filtrar las palabras reservadas como TRUE, OR y demas..?????
digo, por si acaso....

Por rolv

Claber

2000 de clabLevel

3 tutoriales

 

msie
Citar            
MensajeEscrito el 12 Oct 2005 04:51 pm
La unica forma de salir de la cadena es con la comilla simple, filtrando eso no haras nada despues de filtrar la comilla y el punto y coma

Por Freddie

BOFH

53 tutoriales
597 articulos
43 ejemplos

Genero:Masculino   Admin

Conserje de Cristalab

firefox
Citar            
MensajeEscrito el 13 Oct 2005 04:37 pm

Freddie® escribió:

...

Si hacemos esto, lo que tendremos en la sentencia total sera

Código :

SELECT COUNT(id_usuario) FROM usuarios WHERE nombre='Administrador' AND password='' OR TRUE OR ''

Esa sentencia es verdadera, por lo que cualquiera puede entrar a la aplicación como admin sin tener el pwd


habra que probarla más tarde en algun sitio pr0n :love:

Por H3r3j3

290 de clabLevel

1 tutorial

Genero:Masculino  

Desarrollador Multimedia

firefox
Citar            
MensajeEscrito el 13 Oct 2005 05:32 pm
Hola Freddie, tu sentencia de ejemplo tiene un pequeño error. Deberia ser asi :

SELECT COUNT(id_usuario) FROM usuarios WHERE nombre='Administrador' AND password='' OR 'TRUE' OR ''

Si pones la palabra TRUE tal cual (sin las comillas), MySQL pensara que te refieres a una columna y no a un dato. Para lograr el acceso hay que enviar

' OR 'TRUE' OR '

Saludos!

Por tangamampilia

.GAIA Developer

961 de clabLevel


6 articulos

Genero:Masculino   Anime Bloggers

México, D.F.

safari
Citar            
MensajeEscrito el 13 Oct 2005 05:36 pm
Es curioso, revise la documentacion de MySQL y si admite el TRUE sin comillas.
Debe ser un bug del mysql de mac que uso.

Saludos!

Por tangamampilia

.GAIA Developer

961 de clabLevel


6 articulos

Genero:Masculino   Anime Bloggers

México, D.F.

safari
Citar            
MensajeEscrito el 13 Oct 2005 06:30 pm
Así es Daneel, TRUE es una palabra reservada, de hecho con 'TRUE', en casó de que regrese resúltados sería por que no detecta una negación y no tanto por que considere a 'TRUE' como la constante de afirmación. :P

Por Dano

BOFH

4273 de clabLevel

14 tutoriales
4 articulos
10 ejemplos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Lugar estratégico para vigilarte

firefox
Citar            
MensajeEscrito el 14 Oct 2005 04:34 pm
ehh por cierto creo que es mejor dejar ese trabajo del lado del cliente de detectar posibles inyecciones...

Todo lo que pueda hacer el cliente que lo haga, el servidor lo justo y necesario

Por Maikel

BOFH

5575 de clabLevel

22 tutoriales
5 articulos

Genero:Masculino   Team Cristalab

Claber de baja indefinida

firefox
Citar            
MensajeEscrito el 14 Oct 2005 04:38 pm
Cuando de seguridad se trata, nop, todo tiene que controlarlo el servidor. Vamos no esta demás un validador JS o AS, en el cliente, pero para ingresar datos y demás es en el servidor.

Si no válidas en el servidor eres sumamente vulenerable a ataques. Solo como nota te digo un ataque bueno, lo haces desde línea de comandos, y no desde un browser. :wink:

Por Dano

BOFH

4273 de clabLevel

14 tutoriales
4 articulos
10 ejemplos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Lugar estratégico para vigilarte

firefox
Ir a página 1, 2  Siguiente
Foros de discusión > Charla

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.