Кодировать или что-то еще, чтобы избежать ввода косой черты (/) в php?

Я стек здесь.

Я хочу создать файл и использую title_input как имя_файла, но у меня проблема при создании файла в определенной папке.

Пример:

$file_name="Multi purpose Day/Night Security";

$myfile = fopen($_SERVER['DOCUMENT_ROOT']."/myweb/product/".$file_name.".php", "wb") or die("Unable to open file!");

Ошибка:

Предупреждение: fopen(C:/Program Files/xampp/htdocs/myweb/product/Multi-Purpose Day/Night Security.php): не удалось открыть поток: нет такого файла или каталога в C:\Program Files\xampp\htdocs\ myweb\admin\process\do_upload.php в строке 28

Невозможно открыть файл!


person Sofyan    schedule 17.01.2016    source источник
comment
использование косой черты, которая является разделителем каталогов в имени файла, является настоящей плохой идеей   -  person    schedule 17.01.2016
comment
Если $file_name исходит от пользовательского ввода, это серьезная уязвимость системы безопасности, поскольку злоумышленник может сделать это чем-то вроде "../../config.php"   -  person Andrea    schedule 17.01.2016
comment
Ответ Sephedo поможет мне, но я должен еще раз подумать о сортировке файла по времени или идентификатору, потому что я помещаю идентификатор, когда файл создается в базе данных. Андреа, это не вулн, потому что $file_name уже закодировано.   -  person Sofyan    schedule 18.01.2016


Ответы (1)


Вы всегда можете просто закодировать имя файла, чтобы сделать действительное имя файла, а затем декодировать имя файла после того, как вы его прочитали, и это может быть так же просто, как base64 для имени файла до и после.

$filename = 'Multi purpose Day/Night Security';

// Raw filename
$filename = base64_encode($filename);

// Original filename
$filename = base64_decode($filename);
person Community    schedule 17.01.2016