[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: О загрузке....pdf
m4a1fox
Господа, сразу извините, что поленился поискать в великом google, но, как разрешить, загрузку только pdf документов через форму????????



Спустя 17 минут, 48 секунд m4a1fox написал(а):
Ха! А в великом google то мало что есть на эту тему!



Спустя 57 минут, 15 секунд m4a1fox написал(а):
эво как! Неужели никто не сталкивался?



Спустя 57 минут, 30 секунд (17.08.2011 - 23:35) Kusss написал(а):
pdf php upload - Запрос в Google
<form action="<?php print $PHP_SELF?>" enctype="multipart/form-data" method="post">
Last Name:<br /> <input type="text" name="name" value="" /><br />
Class Notes:<br /> <input type="file" name="classnotes" value="" /><br />
<p><input
type="submit" name="submit" value="Submit Notes" /></p>
</form>

<?php

define ("FILEREPOSITORY","./");

if (is_uploaded_file($_FILES['classnotes']['tmp_name'])) {

if ($_FILES['classnotes']['type'] != "application/pdf") {
echo "<p>Class notes must be uploaded in PDF format.</p>";
} else {
$name = $_POST['name'];
$result = move_uploaded_file($_FILES['classnotes']['tmp_name'], FILEREPOSITORY."/$name.pdf");
if ($result == 1) echo "<p>File successfully uploaded.</p>";
else echo "<p>There was a problem uploading the file.</p>";
} #endIF
} #endIF
?>


Работоспособность не проверял

Спустя 7 минут, 28 секунд (17.08.2011 - 23:43) m4a1fox написал(а):
Kusss
Есть тут баг один! Маленький баг но есть.
Если взять картинку, и сменить разрешение с jpg=>pdf, то скрипт благополучно пропустит его творение. про этот способ я знал, пришлось вернуться к нему!



Спустя 5 минут, 9 секунд m4a1fox написал(а):
Ха! Нашел выход! Поделиться???

Спустя 6 минут, 3 секунды (17.08.2011 - 23:49) neadekvat написал(а):
Цитата (m4a1fox @ 18.08.2011 - 00:43)
Если взять картинку, и сменить разрешение с jpg=>pdf

Тут же по mime-типу проверка.
Кроме того, запрети выполнять любые скрипты в каталоге, в которых загружается pdf, вот и все. А когда отдаешь на скачку пользователям - предупреждай, что загружен файл таким же пользователем и там может быть вирус.

Спустя 4 минуты, 2 секунды (17.08.2011 - 23:53) Invis1ble написал(а):
m4a1fox
Цитата
Ха! Нашел выход! Поделиться???

ну-ка, убей нас smile.gif

Спустя 4 минуты, 1 секунда (17.08.2011 - 23:57) m4a1fox написал(а):
Invis1ble
Вот ты меня убиваешь! Думаешь я ни на что не годен? smile.gif

Спустя 53 секунды (17.08.2011 - 23:58) m4a1fox написал(а):
Короче дело такое. методы. Ловите

public $allowType = array('image/jpeg', 'image/jpg', 'image/png', 'image/gif');
public function TypeOfFile(){
if($_FILES["filename"]["type"]=="application/pdf" && $this->GetImageSize() === TRUE){
return true;
}
}


public function GetImageSize() {
if(!empty($_FILES["filename"]["name"])){
$type = getimagesize($_FILES['filename']['tmp_name']);
if(in_array($type['mime'], $this->allowType)){
return false;
}else{
return true;
}
}
}


Скажите где не прав, знать то хоть буду!

Спустя 27 секунд (17.08.2011 - 23:58) Invis1ble написал(а):
m4a1fox
Нееееет!!! smile.gif
Я пощутил )

Спустя 41 секунда (17.08.2011 - 23:59) neadekvat написал(а):
Какое это имеет отношение к pdf?

Спустя 3 минуты, 41 секунда (18.08.2011 - 00:02) Invis1ble написал(а):
ахаха
это же проверка для картинок, и то, далеко - не панацея

Спустя 1 минута, 48 секунд (18.08.2011 - 00:04) m4a1fox написал(а):
Invis1ble
Ваше предложение?

Спустя 8 секунд (18.08.2011 - 00:04) neadekvat написал(а):
Invis1ble, getimagesize вернет false, если "изображение" - не изображение. И уж если вернуло массив, то можно просто пересоздать изображение, избавившись тем самым от потенциальных скриптов.

Спустя 48 секунд (18.08.2011 - 00:05) m4a1fox написал(а):
neadekvat
Цитата
избавившись тем самым от потенциальных скриптов.
Спасибо! Я бы не смог обосновать!

Спустя 11 секунд (18.08.2011 - 00:05) Invis1ble написал(а):
m4a1fox
Ты этот код хоть пробовал запустить? Это же бред полный smile.gif



Спустя 1 минута, 18 секунд Invis1ble написал(а):
neadekvat
Цитата
getimagesize вернет false, если "изображение" - не изображение. И уж если вернуло массив, то можно просто пересоздать изображение, избавившись тем самым от потенциальных скриптов.

я в курсе насчет этого хака, но ты присмотрись к коду повнимательней wink.gif

Спустя 2 минуты, 34 секунды (18.08.2011 - 00:08) m4a1fox написал(а):
Invis1ble
Цитата
коду повнимательней
Ну скажи баг коли нашел! У меня то он работает!

Спустя 55 секунд (18.08.2011 - 00:09) Invis1ble написал(а):
m4a1fox
покажи, как ты пользуешься этим добром

Спустя 1 минута, 22 секунды (18.08.2011 - 00:10) m4a1fox написал(а):
Invis1ble
Всмысле показать? Не догоняю! Если файл не картинка и с типом aplication/pdf то перемещаю его в папку, иначе false.

Спустя 2 минуты, 33 секунды (18.08.2011 - 00:13) Invis1ble написал(а):
В смысле как объект создаешь, какие методы вызываешь. Т.е. код полностью приведи

Спустя 1 минута, 54 секунды (18.08.2011 - 00:15) m4a1fox написал(а):
Invis1ble
Не вопрос

class downloadPdf {
private $path = 'file/'; // path for load on the folder
private static $table = 'journal_numbers'; // table in the DB
private $allowType = array('image/jpeg', 'image/jpg', 'image/png', 'image/gif');
private $ok = '<div style="background-color: #AEF9F8;
width: 110px; padding: 5px;"><font color=green>
file download. Ok</font></div>'
;
private $error = '<div style="background-color: grey;
width: 450px; padding: 5px;"><font color=red>
Some error isset. Please chenge format of dowload file or download file</font></div>'
;


public function downloadFile(){
if($this->CheckIsUploadedFile() === true && $this->TypeOfFile() === true){
$this->MoveFile();
$this->chengePdfLoad();
return $this->ok;
}else{
return $this->error;
}
}




/**
* check the file is isset
*/

private function CheckIsUploadedFile() {
if(is_uploaded_file($_FILES["filename"]["tmp_name"])) {
return true;
}
}


/**
* method for moove file in the folder
*/

public function MoveFile() {
move_uploaded_file($_FILES["filename"]["tmp_name"], "".$this->path."".$_POST['pdf_number'].".pdf");
return true;
}


/**
* method for chanche the field 'lpdf_load'=>1
*/

public function chengePdfLoad(){
$sql = "UPDATE `".self::$table."` SET
`pdf_load` = '1'
WHERE `number` = '"
.$_POST['pdf_number']."'
"
;
return connectDb::sql($sql);
}

public function TypeOfFile(){
if($_FILES["filename"]["type"]=="application/pdf" && $this->GetImageSize() === TRUE){
return true;
}
}


public function GetImageSize() {
if(!empty($_FILES["filename"]["name"])){
$type = getimagesize($_FILES['filename']['tmp_name']);
if(in_array($type['mime'], $this->allowType)){
return false;
}else{
return true;
}
}
}
}


Подскажите, если что!

Спустя 6 минут, 51 секунда (18.08.2011 - 00:21) Invis1ble написал(а):
1. при загрузке любой не-картинки getimagesize() вернет false
2. индекса 'mime' у булева значения быть не может (как и любого другого индекса) - здесь получаем Notice
3. булево false не содержится в массиве запрещенных mime-типов
и..... бинго! ф-ция GetImageSize() возвращает true!

А теперь попробуй загрузить тотже exe-шник wink.gif

Спустя 4 минуты, 22 секунды (18.08.2011 - 00:26) m4a1fox написал(а):
Invis1ble
Цитата
А теперь попробуй загрузить тотже exe-шник

Ок! Попробую поспорить biggrin.gif Но exe-шник не будет
Цитата
$_FILES["filename"]["type"]=="application/pdf"

Значит условие вернет false соответственно дальше действие скрипта остановится и будет error
Там же по сути двойная проверка!

Спустя 2 минуты, 35 секунд (18.08.2011 - 00:28) Invis1ble написал(а):
m4a1fox
Цитата
$_FILES["filename"]["type"]=="application/pdf"
Значит условие вернет false

да, тут ты прав. Но вторая часть условия не имеет смысла никакого, кроме того, там полный бред

Спустя 1 минута, 33 секунды (18.08.2011 - 00:30) m4a1fox написал(а):
Invis1ble
Ну дык картинки не проходят, не проходят и картинки с расширение pdf, а вот pdf проходит! Мне кажется, это нормально! Но! Ваше предложения какие? Что бы вы изминили?

Спустя 3 минуты, 49 секунд (18.08.2011 - 00:34) Invis1ble написал(а):
m4a1fox
Мое предложение - выкинуть ВЕСЬ этот УГ в топку и оставить условие
if ($_FILES["filename"]["type"]=="application/pdf") {
// move_uploaded_file();
}

и предупреждать юзверей о возможности того, что файлы содержат вирусы. Ну либо все таки заливать их на сервер и проверять антивирусом, но тоже не панацея.

Спустя 5 минут, 58 секунд (18.08.2011 - 00:40) m4a1fox написал(а):
Invis1ble
Считаете? Хм. Но это будет админка! :)! Окей. Я ваше предложение понял! Еще вопрос не по теме ветки.
Есть подключение к БД

class connectDb extends defaultVar {

private $connection;

function __construct() {
$this->open_connection();
//echo "Connection is set";
}

private function open_connection() {
$this->connection = mysql_connect($this->DB_HOST, $this->DB_USER, $this->DB_PASS);
if(!$this->connection) {
die("Database connection faild: ".mysql_error());
}
else {
$db_select = mysql_select_db($this->DB_NAME);
if(!$db_select) {
die ("Database selected faild: ".mysql_error());
}
}

mysql_query("set names utf8") or die ("set names utf8 faild");
}

static function sql ($query) {
$result = mysql_query($query) or die(mysql_error());
if(!$result) {
die("Database query failed: ".mysql_error());
}
return $result;
}
}


Говорят что там не хватает
Цитата
в классе работы с базой нет real_escape

но где он должен быть - я не в курсе! Полдскажите, а, если не трудно!

Спустя 5 минут, 43 секунды (18.08.2011 - 00:45) Invis1ble написал(а):
Цитата
в классе работы с базой нет real_escape

речь идет очевидно об экранировании данных, но что у тебя там экранировать - я лично не вижу

Спустя 43 секунды (18.08.2011 - 00:46) waldicom написал(а):
Если свой хостинг, то можно использовать никсовую утилитку file

Спустя 1 минута, 32 секунды (18.08.2011 - 00:48) Invis1ble написал(а):
waldicom
ты о проверке mime? но ведь по идее и file можно "обмануть"... unsure.gif

Спустя 5 минут, 55 секунд (18.08.2011 - 00:54) m4a1fox написал(а):
Invis1ble
Цитата
экранировании данных

Я правильно понял, имеется ввиду mysql_real_escape_string?

Спустя 1 минута, 32 секунды (18.08.2011 - 00:55) Invis1ble написал(а):
m4a1fox
А чтоб я так знал smile.gif
Наверное да.

Спустя 7 минут, 7 секунд (18.08.2011 - 01:02) waldicom написал(а):
Цитата (Invis1ble @ 17.08.2011 - 22:48)
ты о проверке mime? но ведь по идее и file можно "обмануть"... unsure.gif

Если я не ошибаюсь, утилитка file смотрит по заголовкам файла. Так легко как проверку выше file не обойти.
Вот из документации:
Цитата
There are three sets of tests, performed in this order: filesystem tests, magic number tests, and language tests. The first test that succeeds causes the file type to be printed.

Я когда использовал её для одного проекта (продажа музыки) игрался с ней. Просто переименование файлов, удаление/изменение расширения программке не помеха - узнает спокойно. Но не исключаю, что и её можно обойти.

Спустя 1 минута, 49 секунд (18.08.2011 - 01:04) m4a1fox написал(а):
Invis1ble
Лады! Вот и поговорили! Что то вы сударь не в настроении сегодня!

Спустя 2 минуты, 44 секунды (18.08.2011 - 01:07) Invis1ble написал(а):
m4a1fox
Цитата
Что то вы сударь не в настроении сегодня!

это с чего еще ты взял? )

Спустя 3 минуты, 53 секунды (18.08.2011 - 01:11) m4a1fox написал(а):
Invis1ble
Да так... кажется просто мне!
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.