Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: viher en 14 Septiembre 2010, 02:41 am



Título: IF dependiendo si hay ID
Publicado por: viher en 14 Septiembre 2010, 02:41 am
hola,resulta que yo tengo una archivo php que reproduce videos por ID,el archivo se llama videos.php y tiene el siguiente código:

Código
  1. <? include ("config.php");
  2. $id = $_GET['id'];
  3. $sql = "select * from videos where id=$id";
  4. $squery = mysql_query($sql);
  5. while($row = mysql_fetch_array($squery)){
  6. echo $row['nombre']; }
  7. ?>

el caso es que si pongo video.php?id=24 me carga el video con la ID 24 y funciona perfectamente,el problema es que si entro en video.php sin poner ninguna ID da errores por todos lados ya que no hay ID,cómo podría hacer un IF detecte si se ha puesto una ID o no y tenga 2 diferentes salidas.He estado intentarlo hacerlo yo pero no se como hacer que detecte lo de la ID. Gracias por la ayuda!


Título: Re: IF dependiendo si hay ID
Publicado por: Dznp en 14 Septiembre 2010, 02:56 am
Es fácil...

Mirá, te lo hago, si necesitas más ayuda mandame un PM


Código
  1. <? include ("config.php");
  2. $id = $_GET['id'];
  3. if($id==NULL){
  4. exit("no se especifico un ID");
  5. } else {
  6. $sql = "select * from videos where id=$id";
  7. $squery = mysql_query($sql);
  8. if(mysql_num_rows($squery){
  9. while($row = mysql_fetch_array($squery)){
  10. echo $row['nombre'];
  11. }
  12. } else {
  13. echo 'No existe ningún video con el ID puesto';
  14. }
  15. }
  16. ?>

Hace casí 5 meses que no toco NADA de PHP, pero no creo que tenga errores.  ;)
Otra cosíta más... Esa consulta es vulnerable a SQL Inyección, busca en Google como hacer una consulta segura.


Suerte  :rolleyes:


Título: Re: IF dependiendo si hay ID
Publicado por: #!drvy en 14 Septiembre 2010, 02:57 am
Código
  1. if(isset($_GET['id']))
  2. {
  3. // codigo
  4. }
  5. else { print "sin id";}
o
Código
  1. if(empty($_GET['id']))
  2. {
  3. print 'sin id';
  4. }
  5. else
  6. {
  7. // codigo
  8. }


Saludos


Título: Re: IF dependiendo si hay ID
Publicado por: Shell Root en 14 Septiembre 2010, 03:14 am
Yo lo haría así,
Código
  1. include ("config.php");
  2. function sVideo($sID){
  3.  if(!empty($sID)){
  4.    $sSQL = "SELECT * FROM videos WHERE sID=".$sID;
  5.    $sQuery = mysql_query($sSQL);
  6.    while($sRow = mysql_fetch_array($sQuery)){
  7.      echo $sRow ['nombre'];
  8.    }
  9.  }else{
  10.    echo 'ID Vacio';
  11.  }
  12. }


Título: Re: IF dependiendo si hay ID
Publicado por: viher en 14 Septiembre 2010, 03:44 am
gracias drvy | BSM tu es funciona perfectamente,losiento Shell Root pero el tuyo daba error.gracias


Título: Re: IF dependiendo si hay ID
Publicado por: tragantras en 14 Septiembre 2010, 11:21 am
que os pasa a todos? estais posteando en un foro de hacking y a ninguno se le ocurre limpiar el input?! xD

buena suerte con la seguridad de la web...


Título: Re: IF dependiendo si hay ID
Publicado por: Franki en 14 Septiembre 2010, 14:18 pm
A lo mejor tiene al principio de cada script una función recursiva que limpia las entradas de datos xDD


Título: Re: IF dependiendo si hay ID
Publicado por: :ohk<any> en 14 Septiembre 2010, 15:17 pm
Bien, pero no te olvides nunca de limpiar tu ID.
Porque nunca se sabe que puede querer un visitante. Si me entiendes.
Para ello la funcion esta en el foro, te la copio aca:

Código
  1. <?php
  2. function addslashes__recursive($var){
  3. if (!is_array($var))
  4. return addslashes($var);
  5. $new_var = array();
  6. foreach ($var as $k => $v)$new_var[addslashes($k)]=addslashes__recursive($v);
  7. return $new_var;
  8. }
  9. $_POST=addslashes__recursive($_POST);
  10. $_GET=addslashes__recursive($_GET);
  11. $_REQUEST=addslashes__recursive($_REQUEST);
  12. $_SERVER=addslashes__recursive($_SERVER);
  13. $_COOKIE=addslashes__recursive($_COOKIE);
  14. ?>
  15.  

Saludos


Título: Re: IF dependiendo si hay ID
Publicado por: Shell Root en 14 Septiembre 2010, 17:29 pm
...,losiento Shell Root pero el tuyo daba error...
Pero si te fijas, es lo mismo que vos tenias principalmente, solo le agregue el IF.  :silbar:
que os pasa a todos? estais posteando en un foro de hacking y a ninguno se le ocurre limpiar el input?! xD
Cof, cof. Que porque es un foro de "hacking", siempre tenemos que hablar de eso?. A ver que le sacas al subforo "Diseño Gráfico".  :P


Título: Re: IF dependiendo si hay ID
Publicado por: viher en 14 Septiembre 2010, 20:30 pm
Bien, pero no te olvides nunca de limpiar tu ID.
Porque nunca se sabe que puede querer un visitante. Si me entiendes.
Para ello la funcion esta en el foro, te la copio aca:

Código
  1. <?php
  2. function addslashes__recursive($var){
  3. if (!is_array($var))
  4. return addslashes($var);
  5. $new_var = array();
  6. foreach ($var as $k => $v)$new_var[addslashes($k)]=addslashes__recursive($v);
  7. return $new_var;
  8. }
  9. $_POST=addslashes__recursive($_POST);
  10. $_GET=addslashes__recursive($_GET);
  11. $_REQUEST=addslashes__recursive($_REQUEST);
  12. $_SERVER=addslashes__recursive($_SERVER);
  13. $_COOKIE=addslashes__recursive($_COOKIE);
  14. ?>
  15.  

Saludos

y éste código se lo tengo que poner en todas las páginas que obtengan una ID para despues limpiarla? y así no habra ningún problema de seguridad en la web? perdonarme pero de seguridad web no entiendo mucho y gracias por la ayuda.


Título: Re: IF dependiendo si hay ID
Publicado por: Franki en 14 Septiembre 2010, 20:52 pm
Si estas utilizando MySQL mejor utiliza mysql_real_escape_string(), es mucho más eficiente y seguro que utilizar addslashes. Addslashes solo lo utilizaria si el gestor de base de datos no tiene una funcion propia para limpiar entradas.

http://www.php.net/manual/es/function.mysql-real-escape-string.php

Ahi te explica como usarla.


Título: Re: IF dependiendo si hay ID
Publicado por: tragantras en 14 Septiembre 2010, 23:58 pm
Si estas utilizando MySQL mejor utiliza mysql_real_escape_string(), es mucho más eficiente y seguro que utilizar addslashes. Addslashes solo lo utilizaria si el gestor de base de datos no tiene una funcion propia para limpiar entradas.

http://www.php.net/manual/es/function.mysql-real-escape-string.php

Ahi te explica como usarla.

muy acertada decisión

Cita de: Shell Root
Cof, cof. Que porque es un foro de "hacking", siempre tenemos que hablar de eso?. A ver que le sacas al subforo "Diseño Gráfico".

no, simplemente creo que una programación segura se debe de tener "interiorizada" uno no programa aplicaciones seguras segun el foro en el que escribe, uno solo debe saber programar aplicacioens seguras... xD

espero que no lo tomes a mal, las ultimas correciones que te he hecho siempre te las tomabas a la tremenda...

un saludo ppl

pd: viher puedes hacer un include de ese php en cada archivo y listo


Título: Re: IF dependiendo si hay ID
Publicado por: ~ Yoya ~ en 15 Septiembre 2010, 00:18 am
http://shiflett.org/blog/2006/jan/addslashes-versus-mysql-real-escape-string


Título: Re: IF dependiendo si hay ID
Publicado por: jdc en 15 Septiembre 2010, 03:08 am
Mejor usa id como entero y que menor o igual que 0 se jodan...
 
(int)$_GET['id']
 
Listo invulnerable...
 
Recuerda comprobar sí es menor o igual a 0 error, también puedes usar un mayor que x error también para que no te ahoguen la variable. Sí vas a usar variables con letras preocupate con lo que han mencionado.
 
Saludos


Título: Re: IF dependiendo si hay ID
Publicado por: viher en 15 Septiembre 2010, 03:36 am
ya he hecho en todas mis páginas un include al archivo con el siguiente código:

Código
  1. <?php
  2. function addslashes__recursive($var){
  3. if (!is_array($var))
  4. return addslashes($var);
  5. $new_var = array();
  6. foreach ($var as $k => $v)$new_var[addslashes($k)]=addslashes__recursive($v);
  7. return $new_var;
  8. }
  9. $_POST=addslashes__recursive($_POST);
  10. $_GET=addslashes__recursive($_GET);
  11. $_REQUEST=addslashes__recursive($_REQUEST);
  12. $_SERVER=addslashes__recursive($_SERVER);
  13. $_COOKIE=addslashes__recursive($_COOKIE);
  14. ?>

y con ésto ya limpio mi ID siempre y no hay ya ninguna fallo de seguridad,no es cierto? gracias


Título: Re: IF dependiendo si hay ID
Publicado por: Shell Root en 15 Septiembre 2010, 03:38 am
Si es un ID supongo que es numerico, porque no te pasaste por la sección de  Bugs y Exploits - Nivel Web, para ver como evitarlo?
:http://foro.elhacker.net/nivel_web/temas_mas_destacados_fallas_y_explotaciones_a_nivel_web_actualizado_31510-t244090.0.html


Título: Re: IF dependiendo si hay ID
Publicado por: ~ Yoya ~ en 15 Septiembre 2010, 21:20 pm
ya he hecho en todas mis páginas un include al archivo con el siguiente código:

Código
  1. <?php
  2. function addslashes__recursive($var){
  3. if (!is_array($var))
  4. return addslashes($var);
  5. $new_var = array();
  6. foreach ($var as $k => $v)$new_var[addslashes($k)]=addslashes__recursive($v);
  7. return $new_var;
  8. }
  9. $_POST=addslashes__recursive($_POST);
  10. $_GET=addslashes__recursive($_GET);
  11. $_REQUEST=addslashes__recursive($_REQUEST);
  12. $_SERVER=addslashes__recursive($_SERVER);
  13. $_COOKIE=addslashes__recursive($_COOKIE);
  14. ?>

y con ésto ya limpio mi ID siempre y no hay ya ninguna fallo de seguridad,no es cierto? gracias

Lo que estas haciendo, lo hace magic_quotes_gpc(GET, POST, COOKIE) mejor dejarlo On, así no tienen que hacer una función que realice el mismo trabajo y funcionara mas rápido.

(http://img718.imageshack.us/img718/120/imgnf.png)

Y en PHP >= 6, esta directiva ah sido removida, por algo sera no¿?. Lla forma CORRECTA para evitar SQLI es la funcion que menciono Franki mysql_real_escape_string() (http://www.php-es.com/function.mysql-escape-string.html).

Saludos.


Título: Re: IF dependiendo si hay ID
Publicado por: viher en 18 Septiembre 2010, 17:35 pm
ok entonces usare mysql_real_escape_string().

he hecho el siguiente code,porfavor echenle un ojo aver si lo hice bien

Código
  1. <? include ("config.php");
  2.        if(empty($_GET["id"]))
  3. {
  4. echo "Selecciona un video para reproducir";
  5. }
  6. else{
  7. $id = $_GET["id"];
  8. $sql = "select * from videos where id=$id";
  9. //Instrucción a ejecutarse en la bbdd.
  10.  
  11. $squery = mysql_query($sql);
  12. //Ejecución de la instrucción
  13.  
  14. while($row = mysql_fetch_array($squery)){
  15. //Recuperar los datos de un registro o hilera (row) y meterlo a un array
  16. $nombre = mysql_escape_string($row['nombre']);
  17. echo $nombre; }}
  18. ?>

gracias!


Título: Re: IF dependiendo si hay ID
Publicado por: Franki en 18 Septiembre 2010, 20:42 pm
Esta mal, sigue siendo vulnerable porque utilizas la función despues para mostrar los datos. Tienes que filtrarlos antes de ejecutar la consulta a la base de datos.

Código
  1. <? include ("config.php");
  2.        if(empty($_GET["id"]))
  3. {
  4. echo "Selecciona un video para reproducir";
  5. }
  6. else{
  7. $id = mysql_real_escape_string($_GET["id"]);
  8. $sql = "select * from videos where id=$id";
  9. //Instrucción a ejecutarse en la bbdd.
  10.  
  11. $squery = mysql_query($sql);
  12. //Ejecución de la instrucción
  13.  
  14. while($row = mysql_fetch_array($squery)){
  15. //Recuperar los datos de un registro o hilera (row) y meterlo a un array
  16. $nombre =$row['nombre'];
  17. echo $nombre; }}
  18. ?>


Título: Re: IF dependiendo si hay ID
Publicado por: viher en 19 Septiembre 2010, 17:40 pm
gracias franki!  ;-)