Как хранить конфиденциальные документы PDF (файловая система или SQL), если мы используем только аутентификацию форм - PullRequest
1 голос
/ 09 февраля 2012

Так вот моя ситуация.У нас есть веб-приложение, которое занимается управлением делами.Для каждого случая обычно есть несколько документов PDF.Моя компания ранее хранила эти документы в стандартном картотеке.Это вызвало головную боль, когда нам пришлось искать дело, когда мы заходили в веб-приложение, находили информацию о деле, а затем шли в шкаф.Я хочу разработать метод, позволяющий пользователям загружать документы через веб-приложение и связывать их вместе, чтобы, когда вы найдете его в веб-приложении, вы могли просто щелкнуть ссылку, чтобы получить связанные файлы.

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

Тем не менее, я сейчас столкнулся с препятствиемЯ планировал просто загрузить PDF-файлы на сервер и создать столбец в таблице «Случаи», который будет возвращать ссылку на документ на файловом сервере.Тогда возникает проблема: если пользователь не вошел в систему (или он покинул компанию), и он просто скопировал и вставил ссылку в адресную строку, и BAM теперь он имеет доступ к информации файла этого дела.Этого не может быть.

Другое решение - просто хранить файлы в SQL Server 2008 R2.Тем не менее, я прочитал много информации о проблемах производительности и т. Д. Поэтому я не совсем уверен, что это лучшее решение.На данный момент это единственный.

Если у кого-то есть мысли о том, как еще я мог бы справиться с этим сценарием, я был бы очень признателен за любые отзывы.

Спасибо, Андрей

Ответы [ 5 ]

1 голос
/ 10 февраля 2012

Здесь вы на самом деле имеете дело с двумя разными проблемами: система хранения документов и безопасность документов.

С точки зрения места хранения вы можете хранить их непосредственно в файловой системе или сохранять их с помощью SQL.Функция FileStream 2008 года.

С точки зрения их защиты я хотел бы использовать нечто похожее на то, что предложил FreudianSlip.У вас должна быть страница, на которой вы передаете ему имя документа (или какой-то другой ключ, такой как идентификатор, если храните его в SQL Server), и пусть эта страница проверяет авторизацию пользователя, читает файл и возвращает его обратно в поток ответов.

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

1 голос
/ 10 февраля 2012

Вы можете использовать событие Global.asax Application_AuthenticateRequest и написать собственную логику на основе статической папки (например, / assets /) и выполнить там свою собственную проверку.

Аналогично, вы также можете зарегистрировать модуль HTTP исделать то же самое.http://support.microsoft.com/kb/307996

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

См. http://support.microsoft.com/kb/308001

1 голос
/ 10 февраля 2012

как то так.

using System.Net;

string pdfPath = Server.MapPath("~/SomePDFFile.pdf");
WebClient client = new WebClient();
Byte[] buffer = client.DownloadData(pdfPath);
Response.ContentType = "application/pdf";
Response.AddHeader("content-length", buffer.Length.ToString());
Response.BinaryWrite(buffer);

эта опция позволит вам полностью скрыть истинное местоположение файла.

1 голос
/ 10 февраля 2012

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

http://link.to.pdf/servePDF.asp?docname=mycasedoc.pdf

servePDF.asp проверяет все сеансы / файлы cookie и, если все в порядке, выдвигает документ.

0 голосов
/ 10 февраля 2012

Я бы предложил хранить PDF-файлы в отдельном каталоге.Затем создайте дополнительный файл web.config в том же каталоге, чтобы указать доступ для проверки подлинности формы.Например:

<system.web>
    <authorization>
        <allow users="Foo"/>
        <deny users="*"/>
    </authorization>
</system.web>
...