Allow MDB Downloads in IIS7 - ms-access

Currently if I am hosting an Access .MDB file to allow users to download, IIS7 is throwing a 404 error. I know the file is there and the permissions are fine. It appears to be a Handler issue, but I cannot figure out how to change the handler to allow downloading of MDB file. I assume I need to add something to the Handlers section of the web.config, but I am unsure of the syntax.
Thanks.

Or, if you don't want to modify a system-wide configuration file, you could add the following lines to that section in your web.config:
<remove fileExtension=".mdb" />
<add fileExtension=".mdb" allowed="true"/>
For example your Web.config should be similar to this:
<configuration>
<system.webServer>
<security>
<requestFiltering>
<fileExtensions allowUnlisted="true" >
<remove fileExtension=".mdb" />
<add fileExtension=".mdb" allowed="true"/>
</fileExtensions>
</requestFiltering>
</security>
</system.webServer>
</configuration>
Also see http://www.adamwlewis.com/articles/iis-7-not-serving-files-4047-error.

OK, found it.
Just need to remove the following line:
<add fileExtension=".mdb" allowed="false" />
in the "requestFiltering" section from the \Windows\System32\inetserv\config\applicationHost.config file.

Related

PageSpeed Insigths and GoDaddy Windows Hosting

I'm having an issue with cache in my webpage.
My webpage is hosted by GoDaddy, with the Economic Windows Server with Plesk.
conexaomktdigital.com.br
It's a very simple site, I DONT USE PHP on it, only HTML, CSS and simple bootstrap JS.
When I run PageSpeed Insights, the results are telling me to optimize browser cache, including adding expire dates to my .css and images.
Mobile: 60/100
Desktop: 75/100
HOW I DO IT? I seek everywhere and don't see anything, everybody talks about .htaccess, but it's not apache, it's windows with plesk by GoDaddy... What should I do, can someone help me?
Create and use a correct 'Web.Config' file. put it in your root folder.
You can find some information about how to use a web.config file with te right tags here:
https://www.giftofspeed.com/leverage-browser-caching/
I use a very simple configuration, it appears to work nice for me:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.webServer>
<httpErrors errorMode="Detailed" />
<asp scriptErrorSentToBrowser="true"/>
<caching enabled="true" enableKernelCache="true">
<profiles>
<add extension=".html" policy="CacheUntilChange" kernelCachePolicy="CacheUntilChange"/>
<add extension=".css" policy="CacheUntilChange" kernelCachePolicy="CacheUntilChange"/>
<add extension=".js" policy="CacheUntilChange" kernelCachePolicy="CacheUntilChange"/>
<add extension=".jpg" policy="CacheUntilChange" kernelCachePolicy="CacheUntilChange"/>
<add extension=".png" policy="CacheUntilChange" kernelCachePolicy="CacheUntilChange"/>
</profiles>
</caching>
</system.webServer>
<system.web>
<customErrors mode="Off"/>
<compilation debug="true"/>
</system.web>
</configuration>
this will keep the files listed there in cache until it have some change.
No Error 500 for me, I think it will not happen to you too.

Redirect using web.config file when there is no pathname

I've been working on a ASP.NET web application project in Visual Studio. In that project, when the user enters the hostname they get a 404 error but what I would like to happen is for them to be redirected to the index.html when they have just entered the hostname.
Below is the code that I tried using but it didn't work. It said there were too many redirects which I think has something to do with the path value being empty
<location path="">
<system.webServer>
<httpRedirect enabled="true" destination="index.html" httpResponseStatus="Permanent" />
</system.webServer>
</location>
Does anyone have an suggestions?
If you are using MVC you could create a default route but since you asked for a way to do it in web.config try:
<configuration>
<system.web>
<customErrors defaultRedirect="index.html" mode="On">
<error statusCode="404" redirect="index.html"/>
</customErrors>
</system.web>
</configuration>

ASP.NET Razor Site: "This type of page is not served"

I've created an empty ASP.NET website (i.e. razor web pages) but I'm unable to reach the index.cshtml page.
This is true whether I have 'index.cshtml' in the URL or not.
The error pages says:
Server Error in '/' Application.
This type of page is not served.
Description: The type of page you have requested is not served because
it has been explicitly forbidden. The extension '.cshtml' may be
incorrect. Please review the URL below and make sure that it is
spelled correctly.
Requested URL: /index.cshtml
Here is the entire contents of the web.config
<?xml version="1.0"?>
<configuration>
<appSettings>
<add key="webpages:Enabled" value="true"/>
<add key="webpages:Version" value="3.0.0.0"/>
</appSettings>
<system.web>
<compilation debug="true" targetFramework="4.5"/>
<httpRuntime targetFramework="4.5" enableVersionHeader="false" requestValidationMode="2.0"/>
<pages validateRequest="false"/>
</system.web>
<system.webServer>
<security>
<requestFiltering allowDoubleEscaping="true">
<fileExtensions>
<remove fileExtension=".cshtml"/>
<add fileExtension=".cshtml" allowed="true"/>
</fileExtensions>
</requestFiltering>
</security>
<defaultDocument>
<files>
<remove value="index.cshtml"/>
<add value="index.cshtml"/>
</files>
</defaultDocument>
</system.webServer>
</configuration>
Can anyone tell me what I'm missing (or what I've added and which shouldn't be there)?

Azure deployment with .json file extension

We are deploying an azure package where we have a static .json file. We have this working through the azure emulator and locally. but our application just spins when we run it in azure. We are getting a 404 on the app.json file. We have added the mime type to our local iis with the appropriate handler, below is what we have in our web.config. We have set the mime type of application/x-javascript but that didnt work either.
<system.webServer>
<staticContent>
<mimeMap fileExtension=".json"
mimeType="text/html" />
</staticContent>
<handlers>
<add name="JSON"
path="*.json"
verb="*"
modules="IsapiModule"
scriptProcessor="%path%\asp.dll"
resourceType="Unspecified"
preCondition="bitness64" />
</handlers>
</system.webServer>
Adding
<configuration>
<system.webServer>
<staticContent>
<mimeMap fileExtension=".json" mimeType="text/html" />
</staticContent>
</system.webServer>
</configuration>
to my web.config in an Azure instance worked just fine. Most likely, your deployed web.config isn't configured properly. To check it out, enable RDP, connect to your Azure instance and browse to your web.config. Then you can fiddle with your web.config until you get things working.
Because you're serving up a static .json file, you don't need to add a .json HTTP handler. Also, the offical mime type for .json is application/json.

Publishing .cs extensions and others in IIS 7.0

I'm developing a Web application and running it using IIS. My application is a file server. I need to visualize files in the web browser and I have some troubles viewing some files or directories.
For example, I'm not able to view files with .cs extension or the content of directories called bin. The Web server returns a 404 for those URLs:
Server Error
HTTP Error 404 - File or directory not found.
Description: The resource you are looking for might have been removed,
had its name changed, or is temporarily unavailable.
Server Version Information: Internet Information Services 7.0.
I guess that this is a kind of protection that IIS has. My questions are:
Do you know why IIS is filtering those files?
Do you know how to configure IIS to allow retrieving those URLS?
And the most important question for me:
I need to deploy my Web application for many costumers, so I would like to configure it programatically. Do you know if it can be configured in the Web application, instead the IIS properly? In other case, how could I configure it with a script or similar?
Well,
Finally I had to change the IIS settings, allowing to override the requestFiltering:
In file %systemroot%\System32\inetsrv\config\applicationHost.config change:
<section name="requestFiltering" overrideModeDefault="Allow" />
And then I used the following configuration in my Web.config:
Note that now all the files in the Web server are unprotected. You need to setup your rules in order to protect your bin directory, and also your code files, or whatever you want.
<system.webServer>
<security>
<!-- Very important, the IIS configuration must have the
overrideModeDefault to allow in the file
%systemroot%\System32\inetsrv\config\applicationHost.config -->
<!-- section name="requestFiltering" overrideModeDefault="Allow" /> -->
<requestFiltering>
<fileExtensions allowUnlisted="true">
<remove fileExtension=".asa" />
<remove fileExtension=".asax" />
<remove fileExtension=".ascx" />
<remove fileExtension=".master" />
<remove fileExtension=".skin" />
<remove fileExtension=".browser" />
<remove fileExtension=".sitemap" />
<remove fileExtension=".config" />
<remove fileExtension=".cs" />
<remove fileExtension=".csproj" />
<remove fileExtension=".vb" />
<remove fileExtension=".vbproj" />
<remove fileExtension=".webinfo" />
<remove fileExtension=".licx" />
<remove fileExtension=".resx" />
<remove fileExtension=".resources" />
<remove fileExtension=".mdb" />
<remove fileExtension=".vjsproj" />
<remove fileExtension=".java" />
<remove fileExtension=".jsl" />
<remove fileExtension=".ldb" />
<remove fileExtension=".dsdgm" />
<remove fileExtension=".ssdgm" />
<remove fileExtension=".lsad" />
<remove fileExtension=".ssmap" />
<remove fileExtension=".cd" />
<remove fileExtension=".dsprototype" />
<remove fileExtension=".lsaprototype" />
<remove fileExtension=".sdm" />
<remove fileExtension=".sdmDocument" />
<remove fileExtension=".mdf" />
<remove fileExtension=".ldf" />
<remove fileExtension=".ad" />
<remove fileExtension=".dd" />
<remove fileExtension=".ldd" />
<remove fileExtension=".sd" />
<remove fileExtension=".adprototype" />
<remove fileExtension=".lddprototype" />
<remove fileExtension=".exclude" />
<remove fileExtension=".refresh" />
<remove fileExtension=".compiled" />
<remove fileExtension=".msgx" />
<remove fileExtension=".vsdisco" />
</fileExtensions>
<hiddenSegments>
<remove segment="web.config" />
<remove segment="bin" />
<remove segment="App_code" />
<remove segment="App_GlobalResources" />
<remove segment="App_LocalResources" />
<remove segment="App_WebReferences" />
<remove segment="App_Data" />
<remove segment="App_Browsers" />
</hiddenSegments>
</requestFiltering>
</security>
...
</system.webServer>
When you install the .NET Framework and register ASP.NET will will by default tell IIS to not serve these files. If you REALLY want around this you will need to modify the Request Filtering section in IIS.
The bellow example shows how you would enable .cs extensions:
<system.webServer>
<security>
<requestFiltering>
<fileExtensions>
<remove fileExtension=".cs" />
<add fileExtension=".cs" allowed="true" />
</fileExtensions>
</requestFiltering>
</security>
</system.webServer>
This is a security measure due to asp.net being installed on the system.
From Microsoft
All requests with /bin in the URL are
rejected and return a 404 error (IIS
6.0)
This occurs when IIS 6.0 and ASP.NET are both installed. In order
to take a more proactive stance
against malicious users and attackers,
the ASP.NET ISAPI filter,
aspnet_filter.dll, blocks incoming
request containing /bin in the URL.
This behavior occurs server-wide,
regardless whether the request is for
static or dynamic content.
The
preferred solution to this issue is to
modify the path to content on the
server so that /bin is not necessary
in any request.
If the content URL
cannot be modified, an alternative
solution is to set a registry key that
stops the ASP .NET ISAPI filter from
filtering requests containing /bin in
the URL. This is a server-wide
setting.
Better to avoid all /bin folders than enable that on your server
To enable serving .cs files try this Serverfault article
https://serverfault.com/questions/175499/serving-cs-csproj-files-on-iis7-5
As their suggestion is a webconfig fix, you can apply it on a per site basis as you wanted.
I would suggest that you're doing things wrong. You don't want IIS to serve your files directly from disk for a variety of reasons (for example, any .html or .xml file will get renedered then, rather than downloading its contents).
What you want to do is have your code send the files to the user, rather than letting IIS do it. This will bypass IIS's restrictions (beacuse it's you sending the code, not it) and it will still keep IIS's restrictions in place for your applications folder structure.
Those files are filtered for security, for example if I know your website has a page at http://example.com/default.aspx I might be able to just download the code for that page by entering http://example.com/default.aspx.cs in my browser. Same goes for the bin folder.
How are you trying to display these files is it through your own UI or enabling directory browsing?