Защита CSV-файлов, используемых для динамического построения визуализаций с помощью PHP - PullRequest
0 голосов
/ 09 марта 2012

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

Вот ситуация. Я разрабатываю сайт для пользователей, чтобы визуализировать данные.

У меня есть публичная php-страница, сидящая по пути /var/www/thepage/index.php (да, сервер Linux + apache). Это главная страница сайта, на которой пользователи выбирают форму.

При отправке формы будет вызвана вторая страница php, и здесь выбор форм с первой страницы php передается в javascript, который создает визуализацию. Чтобы это произошло, CSV-файлы сначала записываются в этот каталог с помощью php-скрипта, который запрашивает базу данных MySQL.

Дело в том, что я хочу, чтобы пользователи могли видеть визуализации, но не могли загружать файлы CSV (если они не являются администраторами). Как разрешить администратору загружать файлы, это создать защищенный ( .htaccess ) подкаталог /var/www/thepage/secure/, имеющий индекс html, который запускает сценарий cgi после входа администратора (запрашивается) при нажатии на ссылку для скачивания). Этот скрипт копирует последние файлы (с динамическими именами) из каталога /var/www/thepage/ и перемещает их в каталог secure/ со статическими именами файлов. Ссылки на скачивание, указывающие на эти файлы со статическими именами, находятся в защищенном index.html. Однако, если пользователь просматривает исходный код 2-й страницы php, он также может загрузить файлы, поскольку они знают пути и не защищены.

Если удалить права доступа к файлу, скрипт php также не сможет читать файлы, что приведет к сбою визуализации (я хочу, чтобы обычные пользователи могли видеть визуализации). Также важно иметь файлы, потому что у меня есть cgi-скрипт (bash + awk), выполняющий математическую функцию для файлов, которая также требует разрешения

Затенение имен файлов на самом деле тоже не работает, так как файлы пишутся на лету, а исходный код html-страницы покажет записанные скрытые имена файлов csv.

Как я могу обойти эту проблему? Я бы предпочел , а не , чтобы создавать сеансы и входить в систему для обычных пользователей и т. Д ...

Ответы [ 2 ]

0 голосов
/ 11 марта 2012

Как уже говорилось, трудно спрятать что-либо в сети, особенно если вам нужно отправить это в javascript. Вы можете попытаться взломать его немного, может стоить вам немного производительности, но это будет сдерживающим фактором против людей, которые не разбираются в Интернете ... Но другие также могут воспринимать это как вызов :)

Грубый пример будет что-то вроде ..

$csv = fgetcsv("/var/www/thepage/secure/file.csv");

echo "<script type'text/javascript'>";
echo json_encode($csv);
echo "</script>";

Здесь немного ржаво, но javascript должен интерпретировать json как объект, который вы можете использовать в своем коде. Вы можете пойти еще дальше и разбить массив php на разделы, прежде чем отправлять его, что затруднит понимание того, что происходит.

Как я и сказал. Это грубо, но это может быть решением.

0 голосов
/ 09 марта 2012

Я бы подумал, что лучший способ - это хранить файлы в защищенном каталоге, который недоступен в веб-браузере (вне корневого каталога).Затем вы можете показать список доступных файлов для аутентифицированных пользователей со ссылкой на скачивание.Когда они нажимают на ссылку, вы можете проверить, что они вошли в систему, и если это так, то начать загрузку файла.

PHP readfile - Может помочь

...