include::../description.adoc[]

include::../ask-yourself.adoc[]

== Recommended Secure Coding Practices

Do not enable debug features on production servers.

The .Net Core framework offers multiple features which help during debug. ``Microsoft.AspNetCore.Builder.IApplicationBuilder.UseDeveloperExceptionPage`` and ``Microsoft.AspNetCore.Builder.IApplicationBuilder.UseDatabaseErrorPage`` are two of them. Make sure that those features are disabled in production.
 Use ``if (env.IsDevelopment())`` to disable debug code.

== Sensitive Code Example

This rule raises issues when the following .Net Core methods are called: ``Microsoft.AspNetCore.Builder.IApplicationBuilder.UseDeveloperExceptionPage``, ``Microsoft.AspNetCore.Builder.IApplicationBuilder.UseDatabaseErrorPage``. 

----
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;

namespace mvcApp
{
    public class Startup2
    {
        public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            // Those calls are Sensitive because it seems that they will run in production
            app.UseDeveloperExceptionPage(); // Sensitive
            app.UseDatabaseErrorPage(); // Sensitive
        }
    }
}

----

== Compliant Solution

----
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;

namespace mvcApp
{
    public class Startup2
    {
        public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            if (env.IsDevelopment())
            {
                // The following calls are ok because they are disabled in production
                app.UseDeveloperExceptionPage(); // Compliant
                app.UseDatabaseErrorPage(); // Compliant
            }
        }
    }
}

----

== Exceptions

This rule does not analyze configuration files. Make sure that debug mode is not enabled by default in those files.

include::../see.adoc[]
