Рубрики
Uncategorized

Простая настройка разрешений для файлов веб-ресурсов

Автор оригинала: David Wong.

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

Возьмите Apache в качестве примера, создайте. htaccess в разделе путь к файлу

# Single file
# Multiple files (write no access)

   Order allow,deny
   Deny from all

Если это так IIS.net, вы можете задать имя суффикса доступного файла ресурсов в “Тип MIME”

Таким образом, следующие два пути не могут быть открыты:

1、

http://localhost/images/qwert.jpg

2、

Предполагая, что таблица данных спроектирована следующим образом

qwerty_ooo 12345_ооо пользователь1
12345_ооо 12345_ооо пользователь2

Прочтите файл. PHP считывает файлы

php

$file_id = $_GET ["file_id"]; // Get the file ID in the web site
// Find the true path of the file based on $file_id, such as images/qwert.jpg; further permission validation can be done here, such as whether it belongs to user user1
$file_url = "images/qwert.jpg"; 

if (file_exists($file_url)) {
    ob_start();
    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename='.basename($file_url));
    header('Content-Transfer-Encoding: binary');
    header('Expires: 0');
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
    header('Pragma: public');
    header('Content-Length: ' . filesize($file_url));
    ob_clean();
    flush();
    readfile($file_url);
    exit;
}

Замечания:

1.Содержание-Диспозиция:

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

2. Приведенный выше код, ob_start () и ob_clean () необходимо использовать вместе или нет, в противном случае вы не сможете выводить какие-либо файлы, даже если информация в заголовке верна.

Официальный документ: Буфер вывода должен быть запущен ob_start() с тегом PHP_OUTPUT_HANDLER_CLEANABLE. В противном случае ob_clean() не будет работать.

Прочтите файл. Выходной файл HTML




    
    


    

1、

http://localhost/fileread.html

2、

http://localhost/fileread.php?file_id=qwert_ooo