Bepaal welke webserver binnen de code wordt gebruikt

Is het mogelijk, pragmatisch, om te vertellen of een ASP.NET-webapp op de Cassini-webserver wordt uitgevoerd in Visual Studio of in IIS?

Achtergrond en reden om te vragen:

In een flink aantal van onze apps omzeilen we de normale inloginstellingen op een inlogpagina door de computernaam te controleren of door te controleren of het IP-adres van de client localhost is. (127.0.0.1 of ::: 1) zodat we kunnen testen en de app zich anders gedragen tijdens het debuggen op onze ontwikkelings-pc's.

De aanpak van de Machinebeschrijving is OK, maar de kleinste noodzaak om de code te veranderen wanneer we een nieuwe Dev PC krijgen. Ik besef dat dit niet al te vaak gebeurt, maar het voelt slordig aan. Ook, met verschillende ontwikkelaars die eraan werken, moeten we al onze machines vermelden in de "als" -instructie.

Wat betreft de "localhost" -benadering vind ik het niet leuk. Het lijkt een ander aanvalsoppervlak toe te voegen. Ik maak me zorgen over iemand die op een van de webservers gaat werken en deze lokaal beheert en dingen ziet.

Dus ik vraag me af of er een manier is om uit de code te detecteren dat de website wordt uitgevoerd vanuit Visual Studio met de Cassini-webserver.

2
Ah ok sorry. Ik vermoed dat je geen HttpRequest.IsLocal wilt gebruiken. beide?
toegevoegd de auteur codingbadger, de bron
Dat is anders - het vraagt ​​om te weten of het in de debug-modus wordt uitgevoerd. Ik zou net zo goed in Visual Studio kunnen zijn in de releasemodus.
toegevoegd de auteur David, de bron
Bedankt, maar niet voor deze vraag. Het is schonere code dan het controleren van het IP-adres, maar heeft nog steeds dezelfde zorg. Maar het is een goede gedachte.
toegevoegd de auteur David, de bron

2 antwoord

Bij gebruik onder IIS rapporteert de eigenschap SERVER_SOFTWARE van de ServerVariables -verzameling iets als Microsoft-IIS/7.5 .

Helaas lijkt dit leeg te zijn bij het draaien onder Cassini.

Ik weet niet of dit je helpt, want het lijkt de omgekeerde weg naar het gewenste gedrag als je je zorgen maakt over de veiligheid.

van reacties:

Controleer het System.Diagnostics.Process.GetCurrentProcess (). ProcessName Voor Cassini is het "WebDev.WebServer40" en voor IIS is het "w3wp"

string processName= System.Diagnostics.Process.GetCurrentProcess().ProcessName;
if (processName == "WebDev.WebServer40")
{
  //testing
  //Insert code that you want to happen if this is running in Visual Studio
}

Als dit in IIS wordt uitgevoerd, is de variabele pName "w3wp. In Visual Studio op een .NET 4.0-app is dit "WebDev.WebServer40". (Ik heb het niet gecontroleerd, maar ik neem aan dat dit WebDev.WebServer20 voor ASP.NET 2.0 zou zijn)

2
toegevoegd
Niet zo veel beveiliging. We gebruiken dit niet voor iets met echt gevoelige informatie. Het ergste wat hier zou gebeuren, is dat een winkelleider informatie ziet die bedoeld is voor een districtsleider. Er is geen financiële situatie en geen prestaties/HR-dingen. Het is op interne sites waar we een gebruikers-ID gebruiken dat is doorgegeven vanuit een ander systeem (vergelijkbaar met OpenId) en we willen het omzeilen om te zien hoe de website er zou uitzien onder een bepaalde gebruiker. Dit is eigenlijk perfect. Ik zal het uitproberen.
toegevoegd de auteur David, de bron
Darn. Werkte niet. Ik neem aan dat dit komt omdat we IIS hebben geconfigureerd om dit niet uit te zenden. Toch bedankt!
toegevoegd de auteur David, de bron
Ik heb het gevonden! Je antwoord was zo dichtbij dat ik het goede pad kon volgen. Ik controleerde de System.Diagnostics.Process.GetCurrentProcess (). ProcessName Voor Cassini is het "WebDev.WebServer40" en voor IIS is het "w3wp" Hoewel je antwoordapparaat niet degene was waarnaar ik op zoek was, leidde je me het goede pad op, dus als je het jouwe wilt aanpassen, accepteer ik het zodat de volgende persoon die het probeert te achterhalen het kan vinden.
toegevoegd de auteur David, de bron
Ja, ik haat het gewoon om mijn eigen vragen te beantwoorden, vooral wanneer anderen de tijd hebben genomen om het te proberen.
toegevoegd de auteur David, de bron
Bedankt David, bedankt!
toegevoegd de auteur starskythehutch, de bron
@David Als het antwoord niet is bijgewerkt, beantwoordt u het zelf en markeert u als correct. Ik vond dat dit een heel mooi stukje code was om weg te stoppen.
toegevoegd de auteur rick schott, de bron

Kun je geen build-symbolen gebruiken? Stel uw build-symbool in en voer vervolgens een #IF PROD uit en voer vervolgens de authenticatie uit. Dus wanneer u zich in de foutopsporingsmodus bevindt, wordt de verificatie volledig overgeslagen. Ik hoop dat het helpt!

0
toegevoegd