Lo que pasa es que tengo una web de upload de fotos para comparacion, pero tengo un error, se pueden subir shells, se suben ejemplo.php.jpg, y quiero una funcion que cuando pongas ejemplo.php.jpg, te sobreescriba a .jpg nada mas, para evitar esa vunerabilidad...
Aca le pego el código de mi upload.php
Cita:
Ahh, una pregunta...<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<link rel="stylesheet" href="styles.css" type="text/css" media="screen" />
<link rel="shortcut icon" href="favicon.ico" />
<meta http-equiv="imagetoolbar" content="false" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Quien se ve mejor? - Sube tu foto</title>
<script language="JavaScript">
<!--
function isValid() {
var isOK = false;
if ((document.upload.name.value != '') && (document.upload.name.value.length > 1)) {
isOK = true;
}
else {
alert ('por favor, su nombre.')
isOK = false;
}
var fileName = document.upload.upfile.value.toLowerCase();
if((fileName.indexOf('.jpeg') != -1) ||
(fileName.indexOf('.jpe') != -1) ||
(fileName.indexOf('.jpg') != -1) ||
(fileName.indexOf('.gif') != -1) ||
(fileName.indexOf('.png') != -1) ) {
isOK = true;
}
else {
alert ('Unknown file type. Must be GIF, PNG or JPG/JPEG/JPE.');
isOK = false;
}
if(isOK) {
showProgress();
}
return isOK;
}
function showProgress() {
document.getElementById("progress").style.visibili ty = 'visible';
document.getElementById("submit").disabled = true;
}
function hideProgress() {
document.getElementById("progress").style.visibili ty = 'hidden';
document.getElementById("submit").disabled = false;
}
//-->
</script>
</head>
<body>
<? include('includes/header.php'); ?>
<div id="main">
<table cellpadding="0" cellspacing="0" border="0" width="100%">
<?
if(isset($_FILES['upfile'])) {
require_once('mysqlvalues.inc.php');
require_once('mysqlfunc.inc.php');
open_conn();
$Name=my_addslashes($_POST[name]);
$LinkText=my_addslashes($_POST[linktext]);
$LinkUrl = trim(preg_replace('/http:\/\//', '', $_POST[linkurl], 1));
if($LinkUrl != '') {$LinkUrl="http://$LinkUrl";}
$res=mysql_query("INSERT INTO Models SET DateTime=NOW(), Name='$Name', Wins='0', Loses='0', Draws='0', Status='0', LinkText='$LinkText', LinkUrl='$LinkUrl'");
$id=mysql_insert_id();
$extension=explode('.', $_FILES['upfile']['name']);
$imagename=str_replace(' ', '', "$id" . ".$extension[1]");
if (move_uploaded_file($_FILES['upfile']['tmp_name'], "images/uploads/$imagename")) {
chmod("images/uploads/$imagename", 0777);
mysql_query("UPDATE Models SET Thumbnail='$imagename' WHERE ID='$id'");
$message="<br><strong>Archivo Recibido!<br/></strong>Sera revisado y publicado en linea, por lo general dentro de 24 horas.<br/><br/><strong>Puede ver su publicacion en: <br/><a href=\"http://www.quiensevemejor.co.cc.com/stats.php?id=$id\">http://www.quiensevemejor.com/stats.php?id=$id</a> <font color='red'>(guarda este link)</font></strong><br/><br/><br/>";
}else{mysql_query("DELETE FROM Models WHERE ID='$id'"); $message="<strong>Error recibiendo el archivo.</strong><br/><br/><br/>";}
close_conn();
echo"<tr>
<td width=\"150\" id=\"results\">
</td>
<td width=\"550\" id=\"vote\" align=\"left\">
<p>
$message
<br/>
<p><a href=\"upload.php\">Upload another picture</a>.</p>
</p>
<p align=\"center\"><a href=\"index.php\"><u>Siniciar una nueva votacion!</u></a></p>
</td>
<td width=\"150\" id=\"sponsor\">";
include('includes/rightbanners.php');
echo"<p align=\"center\">
</p>
</td>
</tr>";
}else{
echo"<tr>
<td width=\"150\" id=\"results\">
</td>
<td width=\"550\" id=\"vote\" align=\"left\">
<p>
<form action=\"upload.php\" onSubmit=\"return isValid()\" method=\"post\" name=\"upload\" enctype=\"multipart/form-data\">
<br/>
<strong>Submit your model for battle!</strong>
<ul>
<li>Nosotros evaluaremos su imagen antes de que sea visible en linea.</li>
<li>Las imagenes deben ser de al menos 250x250 pixeles (se recortaran a esta dimension).</li>
<li>Por favor, no incluir a criaturas menores de 12.</li>
<li>Imagenes necesita ser girada a la orientacion correcta.</li>
<li>El tema sera el texto que aparece debajo de la foto</li>
<li>El Link del tema es el Link donde se llevara cuando den click al texto (Tema)</li>
<li>.jpg .gif o .png <strong><em>SOLO</em></strong> esos formatos, por favor.</li>
</ul>
<p>
<br/><label><strong>Tu Nombre:</strong> </label><input type=\"text\" name=\"name\" id=\"name\" maxlength=\"20\"/> <em>Obligatorio</em>
<br/><label><strong>Tema:</strong> </label><input type=\"text\" name=\"linktext\" id=\"lintext\"/>
<br/><label><strong>Link del tema:</strong> </label><input type=\"text\" name=\"linkurl\" id=\"linkurl\"/>
<br/><label><strong>Archivo:</strong> </label><input type=\"file\" name=\"upfile\" id=\"upfile\" />
<br/><label> </label><input type=\"submit\" id=\"submit\" name=\"submit\" value=\"Subir Foto\"/> <span id=\"progress\"><img src=\"images/busy_blue.gif\"/> <strong>Subiendo archivo...</strong></span>
<script language=\"JavaScript\">
hideProgress();
</script>
</p>
</form>
<p><strong>Aviso:</strong> Al enviar material a este sitio, usted acepta los terminos de nuestra <a href=\"legal.php\">privacidad y politicas</a>.</p>
</p>
<p align=\"center\"><a href=\"index.php\"><u>Empezar una nueva votacion!</u></a></p>
</td>
<td width=\"150\" id=\"sponsor\">";
include('includes/rightbanners.php');
echo"<p align=\"center\">
</p>
</td>
</tr>";
}
?>
</table>
</div>
<? include('includes/footer.php'); ?>
</div>
</body>
</html>
<html>
<head>
<link rel="stylesheet" href="styles.css" type="text/css" media="screen" />
<link rel="shortcut icon" href="favicon.ico" />
<meta http-equiv="imagetoolbar" content="false" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Quien se ve mejor? - Sube tu foto</title>
<script language="JavaScript">
<!--
function isValid() {
var isOK = false;
if ((document.upload.name.value != '') && (document.upload.name.value.length > 1)) {
isOK = true;
}
else {
alert ('por favor, su nombre.')
isOK = false;
}
var fileName = document.upload.upfile.value.toLowerCase();
if((fileName.indexOf('.jpeg') != -1) ||
(fileName.indexOf('.jpe') != -1) ||
(fileName.indexOf('.jpg') != -1) ||
(fileName.indexOf('.gif') != -1) ||
(fileName.indexOf('.png') != -1) ) {
isOK = true;
}
else {
alert ('Unknown file type. Must be GIF, PNG or JPG/JPEG/JPE.');
isOK = false;
}
if(isOK) {
showProgress();
}
return isOK;
}
function showProgress() {
document.getElementById("progress").style.visibili ty = 'visible';
document.getElementById("submit").disabled = true;
}
function hideProgress() {
document.getElementById("progress").style.visibili ty = 'hidden';
document.getElementById("submit").disabled = false;
}
//-->
</script>
</head>
<body>
<? include('includes/header.php'); ?>
<div id="main">
<table cellpadding="0" cellspacing="0" border="0" width="100%">
<?
if(isset($_FILES['upfile'])) {
require_once('mysqlvalues.inc.php');
require_once('mysqlfunc.inc.php');
open_conn();
$Name=my_addslashes($_POST[name]);
$LinkText=my_addslashes($_POST[linktext]);
$LinkUrl = trim(preg_replace('/http:\/\//', '', $_POST[linkurl], 1));
if($LinkUrl != '') {$LinkUrl="http://$LinkUrl";}
$res=mysql_query("INSERT INTO Models SET DateTime=NOW(), Name='$Name', Wins='0', Loses='0', Draws='0', Status='0', LinkText='$LinkText', LinkUrl='$LinkUrl'");
$id=mysql_insert_id();
$extension=explode('.', $_FILES['upfile']['name']);
$imagename=str_replace(' ', '', "$id" . ".$extension[1]");
if (move_uploaded_file($_FILES['upfile']['tmp_name'], "images/uploads/$imagename")) {
chmod("images/uploads/$imagename", 0777);
mysql_query("UPDATE Models SET Thumbnail='$imagename' WHERE ID='$id'");
$message="<br><strong>Archivo Recibido!<br/></strong>Sera revisado y publicado en linea, por lo general dentro de 24 horas.<br/><br/><strong>Puede ver su publicacion en: <br/><a href=\"http://www.quiensevemejor.co.cc.com/stats.php?id=$id\">http://www.quiensevemejor.com/stats.php?id=$id</a> <font color='red'>(guarda este link)</font></strong><br/><br/><br/>";
}else{mysql_query("DELETE FROM Models WHERE ID='$id'"); $message="<strong>Error recibiendo el archivo.</strong><br/><br/><br/>";}
close_conn();
echo"<tr>
<td width=\"150\" id=\"results\">
</td>
<td width=\"550\" id=\"vote\" align=\"left\">
<p>
$message
<br/>
<p><a href=\"upload.php\">Upload another picture</a>.</p>
</p>
<p align=\"center\"><a href=\"index.php\"><u>Siniciar una nueva votacion!</u></a></p>
</td>
<td width=\"150\" id=\"sponsor\">";
include('includes/rightbanners.php');
echo"<p align=\"center\">
</p>
</td>
</tr>";
}else{
echo"<tr>
<td width=\"150\" id=\"results\">
</td>
<td width=\"550\" id=\"vote\" align=\"left\">
<p>
<form action=\"upload.php\" onSubmit=\"return isValid()\" method=\"post\" name=\"upload\" enctype=\"multipart/form-data\">
<br/>
<strong>Submit your model for battle!</strong>
<ul>
<li>Nosotros evaluaremos su imagen antes de que sea visible en linea.</li>
<li>Las imagenes deben ser de al menos 250x250 pixeles (se recortaran a esta dimension).</li>
<li>Por favor, no incluir a criaturas menores de 12.</li>
<li>Imagenes necesita ser girada a la orientacion correcta.</li>
<li>El tema sera el texto que aparece debajo de la foto</li>
<li>El Link del tema es el Link donde se llevara cuando den click al texto (Tema)</li>
<li>.jpg .gif o .png <strong><em>SOLO</em></strong> esos formatos, por favor.</li>
</ul>
<p>
<br/><label><strong>Tu Nombre:</strong> </label><input type=\"text\" name=\"name\" id=\"name\" maxlength=\"20\"/> <em>Obligatorio</em>
<br/><label><strong>Tema:</strong> </label><input type=\"text\" name=\"linktext\" id=\"lintext\"/>
<br/><label><strong>Link del tema:</strong> </label><input type=\"text\" name=\"linkurl\" id=\"linkurl\"/>
<br/><label><strong>Archivo:</strong> </label><input type=\"file\" name=\"upfile\" id=\"upfile\" />
<br/><label> </label><input type=\"submit\" id=\"submit\" name=\"submit\" value=\"Subir Foto\"/> <span id=\"progress\"><img src=\"images/busy_blue.gif\"/> <strong>Subiendo archivo...</strong></span>
<script language=\"JavaScript\">
hideProgress();
</script>
</p>
</form>
<p><strong>Aviso:</strong> Al enviar material a este sitio, usted acepta los terminos de nuestra <a href=\"legal.php\">privacidad y politicas</a>.</p>
</p>
<p align=\"center\"><a href=\"index.php\"><u>Empezar una nueva votacion!</u></a></p>
</td>
<td width=\"150\" id=\"sponsor\">";
include('includes/rightbanners.php');
echo"<p align=\"center\">
</p>
</td>
</tr>";
}
?>
</table>
</div>
<? include('includes/footer.php'); ?>
</div>
</body>
</html>
Tengo los permisos 777 en la carpeta UPLOAD para que los usuarios puedan subir las fotos a la carpeta, ¿eso implica mucho?, le cambie los permisos y le quite los de ejecutar, fue inutil, otra vez me la hackearon... pero suerte q fue un amigo...
Gracias de antemano.