Безопасность C#: проверьте строку запроса для правильного имени файла.pdf
Я изменяю страницу.aspx, которая использует некоторый javascript для загрузки файла на основе атрибута value в этом теге:
<input type="hidden" id="launchDocument" value="pdf/<%=Settings.LaunchDocument%>" >
Это значение в настоящее время жестко запрограммировано в файле Web.config. Клиент хочет, чтобы эта страница стала страницей загрузки для их архивированных информационных бюллетеней. Я думал о том, чтобы страница извлекала имя файла из строки запроса, чтобы отправляющая страница могла определить, какой файл загружается:
<input type="hidden" id="launchDocument" value="../pdf/<%=Request.QueryString["filename"]%>" />
Но я обеспокоен тем, есть ли какой-либо риск безопасности для этого метода. Если есть, каковы наилучшие практики для проверки значения строки запроса, чтобы убедиться, что это действительное имя файла.pdf перед добавлением его на страницу?
Заранее благодарю за любую помощь!
4 ответа
Используйте поиск по форуму, и вы найдете это:
Почему фактическое имя файла должно быть там? Создайте таблицу, которая связывает имя файла с guid, и передайте его.
Когда придет время для загрузки, перейдите к сценарию, который загружает и выплевывает файл обратно.
Вы можете создать обработчик HTTP для отслеживания этих запросов и в обработчике проверить, существует ли файл и не перенаправляет ли он на соответствующую страницу ошибки...
- Не используйте расширения файлов в
<input>
поле - Всегда добавляйте.PDF к пути, указанному на входе.
- Разверните относительный путь до абсолютного.
- Проверьте абсолютный путь (убедитесь, что он находится в каталоге загрузки PDF)