Zabezpečení složky, soubory ke stažení   zodpovězená otázka

ASP.NET/IIS

Zdravím. Standardní zabezpečení složky pomomocí memberships a nastavením webconfigu ve složce, dovolí bez problémů stahovat soubory z této složky. Jak nejlépe a nejjednodušeji zajistit, aby i soubory ke stažení byly stažitelné až po příslušném přihlášení?

Díky

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Tady záleží na použitém webserveru a chová se to trochu odlišně. Pokud to běží na IIS 6, pak s tím nejde nic moc udělat, přes ASP.NET ISAPI filtr se zpracovávají pouze soubory s příponami aspx, ashx atd.

Interní webserver Visual Studia a IIS 7 to dělají jinak, tam přes ASP.NET mechanismus prochází všechny požadavky.

Pokud chcete umožnit soubory stahovat jen po přihlášení, nejlepší je dát je do složky App_Data a napsat si jednoduchý handler (přidat do projektu generic handler), který je bude poskytovat - prostě soubor vypíše třeba přes context.Response.WriteFile a podle přípony nastaví správný context.Response.ContentType. To, jestli je uživatel přihlášen, ověříte pomocí context.User.Identity.IsAuthenticated a pokud není, vyhodíte HttpException s kódem třeba 403.

nahlásit spamnahlásit spam 2 / 2 odpovědětodpovědět

Díky moc za odpověď. Server je IIS 7 - jak a co tam tedy nastavit pro ty zip fajly?

Co se týče toho handleru, tak to se přiznávám je pro mně ještě španělská vesnice. Pomalu projíždím vaše skvělé videotutoriály, ale takové věci tam stejně asi nenajdu?

Ještě jednou díky

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Pokud máte IIS 7, tak by ta oprávnění měla fungovat automaticky a nemělo by být potřeba nic dělat.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Automaticky nefungují, jak u mne na vývojovém serveru tak u hostera (také mám IIS 7) jdou stáhnout zip fajly i ze zabezpečeného adresáře :-(

nahlásit spamnahlásit spam 0 odpovědětodpovědět

V tom případě do projektu přidejte novou položku typu Generic Handler a dovitř napište (do metody ProcessRequest nebo jak se jmenuje):

'ověřit identitu uživatele
If Not context.User.Identity.IsAuthenticated Then
    Throw New HttpException(403, "Forbidden")
End If

'nastavit hlavičku (aby prohlížeč věděl, že soubor má stáhnout a ne zobrazit)
context.Response.ContentType = "application/octet-stream"
        context.Response.AddHeader("Content-Disposition", "attachment; filename=""soubor.zip""")

'poslat soubor
context.Response.WriteFile(IO.Path.Combine(context.Request.PhysicalApplicationPath, "App_Data\soubor.zip"))

Soubory dejte do složky App_Data, aby se k nim nedalo zvenčí dostat jinak než přes ten handler.

Jinak handler můžete volat s parametry v URL, asi budete chtít dát parametr file=název_souboru, hodnoty parametru najdete přes context.Request.QueryString("parametr").

Pro stažení souboru dejte link na název_handleru.ashx?file=soubor.zip třeba.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Díky moc, nová věc pro mně...

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Tak něco není v pořádku. Všechno to funguje, jen když mám pomocí handleru sháhnout větší soubor, je zle. Jako by ho stránka nejdřív "načítala" a při tom to samozřejmě spadne :-(

Ale nakonec to vypadá, že vše řeší tento zápis do webconfigu

<modules runAllManagedModulesForAllRequests="true">

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback