Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Pessoal, tenho o seguinte script para upar arquivos em meu site:
<?php
set_time_limit(0);
if (!empty($_FILES)) {
$tempFile = $_FILES['Filedata']['tmp_name'];
$targetPath = $_SERVER['DOCUMENT_ROOT'] . $_GET['folder'] . '/';
$targetFile = str_replace('//','/',$targetPath) . $_FILES['Filedata']['name'];
$allowedExtensions = array("jpg", "ai", "pdf", "cdr", "psd","zip","rar","indd","ps","gif","tiff","eps","obj","slt");
foreach ($_FILES as $file) {
if ($file['tmp_name'] > '') {
if (!in_array(end(explode(".",strtolower($file['name']))),$allowedExtensions)) {
die($file['name'].' is an invalid file type!<br/>');
}else{
move_uploaded_file($tempFile,$targetFile);
}
}
}
move_uploaded_file($tempFile,$targetFile);
}
echo "1";
?>
Problema é que estou recebendo muitos ataques, pessoas upando arquivos php e etc. Sendo que tentei fazer que ele só envia-se arquivos com as extenções que está na array $allowedExtensions. Como posso resolver isso e melhorar a segurança de meu sistema de uploads?
normalmente nao se verifica extensao e sim mimetype...
Desculpa minha ignorância. Faz anos que não programo. Como faço para não aceitar request de outros sites? Ou melhor, existe uma forma de bloquear o servidor de receber outros request?
$_FILES['Filedata']
você esta usando alguma tecnologia flash/flex/Air?
Uma das maneiras de evitar CSRF é usar uma token, chamada de nonce, basicamente você coloca um campo hidden em seu form com o valor da mesma, e a salve na seção, quando alguém enviar o form, verifique se a token enviada é a mesma contida na seção, caso contrário alguém está fazendo requisição a partir de outro site. Você também poderia verificar o header Referrer, mas não é uma boa alternativa.
>
$_FILES['Filedata']
você esta usando alguma tecnologia flash/flex/Air?
Estou sim. Flash...
existe uma configuracao no flash(sei pq uso flex q eh praticamente a mesma tecnologia) chaaamda de crosdomain, onde você permite ou nao sites q podem enviar dados atravez de sua aplicacao flash/flex/Air, tenta compilar o swf com esta configuracao...
outra alternativa eh fazer um filtro de selecao de arquivos no proprio flash, de la mesmo ele filtra q tipos de arquivos podem ser enviados
Bah, não tenho o arquivo fla pq comprei o sistema e não lembro mais de quem comprei. hahahah.
sei q eh errado, mas pode-se usar o flashdecompiler..
você pode fazer o seu sistema aceitar apenas request vindo do seu site, se identificar que esta vindo de outro endereço ele bloqueia...
Eu já tive um probleminha dessa forma e com isso resolveu, e você tb pode colocar os captcha pra aumentar a segurança...