Безопасность C #: проверьте строку запроса для правильного имени файла .pdf - PullRequest
0 голосов
/ 21 апреля 2011

Я изменяю страницу .aspx, которая использует некоторый JavaScript для загрузки файла на основе атрибута значения в этом теге:

<input type="hidden" id="launchDocument" value="pdf/<%=Settings.LaunchDocument%>" >

Это значение в настоящее время жестко запрограммировано в файле Web.config. Клиент хочет, чтобы эта страница стала страницей загрузки для их архивированных информационных бюллетеней. Я думал о том, чтобы страница извлекала имя файла из строки запроса, чтобы отправляющая страница могла определить, какой файл загружается:

<input type="hidden" id="launchDocument" value="../pdf/<%=Request.QueryString["filename"]%>" />

Но меня беспокоит, есть ли какой-либо риск для безопасности этого метода. Если есть, то как лучше проверить значение строки запроса, чтобы убедиться, что это действительное имя файла .pdf перед добавлением его на страницу?

Заранее спасибо за любую помощь!

Ответы [ 4 ]

3 голосов
/ 21 апреля 2011

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

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

0 голосов
/ 21 апреля 2011

Используйте поиск по форуму, и вы найдете это:

Регулярные выражения в C # для проверки имени файла

0 голосов
/ 21 апреля 2011
  1. Не используйте расширения файлов в поле <input>
  2. Всегда добавляйте .PDF к пути, указанному в вводе.
  3. Расширяйте относительный путь до абсолютного пути.
  4. Проверка абсолютного пути (убедитесь, что он находится в каталоге загрузки PDF)
0 голосов
/ 21 апреля 2011

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

...