Hola , soy relativamente nuevo en la creacion web , y lo que quiero hacer es que los usuarios puedan subir textos a mi pagina , osea como este tema que estoy creando ahora , pero que aparezca en mi web , nose si me explico bien
Upload1.html:
<form method="post" action="imagenes/upload.php" enctype="multipart/form-data"><!-- Pasar el archivo por method POST -->
<input type="file" size="75" name="file" id="file">
<input type="submit" value="Subir">
</form>
Upload.php:
<?php
header("Content-Type: text/html;charset=utf-8");
$allowedExts = array("gif", "jpeg", "jpg", "png", "txt");
$temp = explode(".", $_FILES["file"]["name"]);
$extension = end($temp);
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/jpg")
|| ($_FILES["file"]["type"] == "image/pjpeg")
|| ($_FILES["file"]["type"] == "text/plain")
|| ($_FILES["file"]["type"] == "image/x-png")
|| ($_FILES["file"]["type"] == "image/png"))
&& in_array($extension, $allowedExts))/** Con esto compruebas si el tipo de archivo está permitido, y si la extensión está permitida **/
{
if ($_FILES["file"]["error"] > 0)
{
echo "Código de error: " . $_FILES["file"]["error"] . "<br>";
}
else
{
if (file_exists("/" . $_FILES["file"]["name"]))
{
echo $_FILES["file"]["name"] . " ya existe. ";
}
else
{
move_uploaded_file($_FILES["file"]["tmp_name"], "" . $_FILES["file"]["name"]);/** Guardar el archivo **/
}
}
}
else
{
echo "Archivo inválido.";
}
?>
</body>
Te lo comenté un poco. Ese es el código que tengo yo en mi web. Lo reduje lo máximo posible xD
Si tienes alguna otra duda, pregunta :p
Una consulta ivancea96, también implementaste seguridad pues según leo te pueden subir un PHP Shells. Si la tienes, puedes comentarnos?.
Saludos.
Bueno. Haí hay un if:
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/jpg")
|| ($_FILES["file"]["type"] == "image/pjpeg")
|| ($_FILES["file"]["type"] == "text/plain")
|| ($_FILES["file"]["type"] == "image/x-png")
|| ($_FILES["file"]["type"] == "image/png"))
&& in_array($extension, $allowedExts))
Los "$_FILES["file"]["type"]" coprueban que tipo de archivo me están subiendo.
La segunda parte, "in_array" comprueba si la extensión del archivo está entre las permitidas.
Como nota sobre todo esto, recordar que a veces, por muy "seguro" que tengas el script de subida, te pueden meter una shell y que no te enteres.
Como referencia a lo que hablo dejo este link:
Tema: shell archivo.php.jpg se ejecuta sin problema
http://foro.elhacker.net/nivel_web/shell_archivophpjpg_se_ejecuta_sin_problemas-t410407.0.html
Saludos
Siempre puedes analizar el nombre del archivo. O el contenido incluso.
Enviado desde mi ST21i mediante Tapatalk
#!drvy por otro lado al subirse el archivo puedes revisar los bytes iniciales y finales para asegurarte que sea un formato valido, y renombrarlo con la extensión que deba tener... incluso puedes analizarlo un poco más (por lo menos las imágenes) y pasarlas por GD y cosas así... dudo que con estas medidas pase una shell y siga siendo ejecutable
Como te comentan, ten cuidado con los archivos que te suben.
¿Por qué no te creas un foro? ¿POr qué no creas, si no, un blog y dejas los comentarios abiertos? o usas un CMS.
No permitas subir archivos y menos a cualquiera.
Tambien podrias utilizar una api de terceros.
Subir archivos con dropbox y para imagenes imgur es bastante descente(siempre que el contenido que suban los ususarios no viole los terminos y servicio de la api).