2013-05-10 2 views
0

Я работаю над сайтом подписки на онлайн-издание. Я разработал его в ASP.NET MVC 1.Извлеките внешний файл html и надежно отобразите его в браузере

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

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

Я знаю, что вы можете сказать, чтобы загрузить всю папку каталога, но это необоснованно, так как может быть до 200 МБ. Я подумал, что, возможно, вернул путь к файлу, а затем перенаправил на страницу, которая будет загружать публикацию в iframe, но я думаю, что это будет угроза безопасности, а также любой, кто немного разбирается в браузерах, может просматривать исходный код и получать путь от файла ,

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

+0

'FilePath к публикации [..] будет unsecured.' нет уровня это будет отменено. Вы можете запретить маме и попу давать ссылку своим соседям, но любой технический специалист (в основном, кто-то ниже 40 и некоторые выше) получит ваш журнал бесплатно. – nvoigt

+0

Спасибо за ваш вклад, но все эти сайты онлайн-публикаций существуют, и они, похоже, тянут его, поэтому должен быть способ. – Ic3m4n69

ответ

1

Легко! Храните секретные URL-адреса в таблице базы данных и вместо этого ссылайтесь на них по идентификатору.

Настройка нового действия регулятора следующим образом:

public ContentResult ShowNewspaper(long Id) { 
    var mySecretURL = db.SecretURLs.Where(k=>k.Id == Id).FirstOrDefault(); // Grab URL entry the database 
    string htmlCode = ""; 
    if(mySecretURL != null) { 
     WebClient client = new WebClient(); 
     htmlCode = client.DownloadString(mySecretURL.URL); 
    }else{ 
     htmlCode = "Page not found!"; 
    } 
    return Content(htmlCode,"text/html"); 
} 

Так что теперь, если вы звоните:

mysite.com/Home/ShowNewspaper/5 

Это позволит загрузить HTML в URL, хранящейся в базе данных для записи 5

Вы также можете пойти дальше и проверить, было ли это действие контроллера вызвано с вашего сайта (в отличие от прямого), проверив Referrer.

Надеется, что это помогает ...

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

return Redirect("/MyLoginURL"); 
+1

Вы, сэр, настоящий Бог! Я уже сохраняю «секретные URL-адреса» и идентификатор пользователя в таблице в моей базе данных, а также авторизуюсь перед тем, как перейти на страницу. Все, что мне нужно, это ноу-хау, чтобы получить html и выгрузить его в браузер, и вы дали его мне! SN: Если бы я мог купить тебе пиво. – Ic3m4n69

+0

Awesome - рад помочь вам спать :) –

0

Подключить через SFTP к удаленному серверу (где все файлы публикации находятся) через C#. [Этот link показывает, как подключиться к SFTP и загрузить файл через C# .Net] и загрузить файл до конца в сгенерированную случайным числом папку. Теперь вы можете передать файл конечному пользователю.

+0

Awesome. Большое спасибо. Я проверю его и посмотрю, работает ли он. – Ic3m4n69

+0

Я думаю, что я ошибся в объяснении.Когда я сказал внешний, на самом деле это должен быть «html-файл, который не является частью решения, который он просто загружает, а находится в проекте». Поэтому мне не нужно было бы извлекать его с удаленного сервера, поскольку он сидит на моем сервере. – Ic3m4n69

Смежные вопросы