Coder Social home page Coder Social logo

apisecurity's Introduction

API security extensions

๐Ÿ“ฆ On NuGet: Recaffeinate.ApiSecurity

Background

๐ŸŒŽ Read more in my blog post: Enforce HTTPS correctly in ASP.NET Core APIs

It's easy to enforce HTTPS (with automatic redirects) in browser apps using the [RequireHttps] attribute. However, the ASP.NET Core docs have this to say about using the attribute in API projects:

Do not use RequireHttpsAttribute on Web APIs that receive sensitive information. RequireHttpsAttribute uses HTTP status codes to redirect browsers from HTTP to HTTPS. API clients may not understand or obey redirects from HTTP to HTTPS. Such clients may send information over HTTP.

Unfortunately there isn't a version of the attribute that closes or rejects the connection without redirecting. You can always enforce HTTPS at the API gateway or reverse proxy layer, but sometimes you want more control.

Usage

Returning an HTTP status code for insecure requests

Use [RequireHttpsOrClose] on controllers or actions to return HTTP code 400 (Bad Request) for insecure requests:

[RequireHttpsOrClose]
public class HomeController

Or, if you want to return a different status code:

[RequireHttpsOrClose(505)]
public class HomeController

Aborting insecure connections

Use the AbortIfNotHttps() middleware if to reject all insecure (HTTP) requests across your entire application.

โš ๏ธ Whenever possible, reject insecure requests at the server or reverse proxy layer. Use this middleware only if you need to enforce this at the ASP.NET Core pipeline level.

Place the middleware at the top of your Configure method:

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    app.AbortIfNotHttps();

    if (env.IsDevelopment())
    // The rest of your pipeline...
}

Feedback

Questions, comments, and PRs are welcome! Feel free to post an issue or ask me questions on Twitter.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.