asp.net core 参数保护

Intro

asp.net core data protection 扩展,基于 IDataProtector 扩展的数据保护组件,自动化的实现某些参数的保护

ParamsProtection

ParamsProtection 是为了保护 asp.net core 项目的某些参数而设计的,也可以用来做一定程度上的反爬虫。

GetStarted

安装 nuget 包 WeihanLi.DataProtection

通过示例项目查看更多详细信息

services.AddDataProtection()
.AddParamsProtection(options =>
{
options.ProtectParams = new[]
{
"id"
};
});

跑起来示例项目,你可以直接在 sample 项目下运行 dotnet run 命令,在浏览器中访问 /api/values 路径,你会得到类似以下的响应结果

[
{
"id": "CfDJ8MvS3iyCJCJCrNda10tFrJu_HXavFbumMGxov9ly0XkFRG6O-HxgLwoqTnc4GQ27Zpby4kNOZBNlNK-1ctAWfuuBkkfoG96szEHXixZvUl6b2JlV1yt1MVUq5MHSOeYOGw",
"val": "value1"
},
{
"id": "CfDJ8MvS3iyCJCJCrNda10tFrJv9haZxFcv9bx2V3ZUKAMxGVD5aQzdzHfqB3XPfpZvQfzPHqxacA2i--hVnXAqzIBJ9ytQ72alekFFqzSFHjZwOTVwr4SMwOlfqm1zkMqFSUg",
"val": "value2"
}
]

原来的业务代码里你什么都不需要做,还是直接返回原来的内容即可,原来的返回内容如下:

return Ok(new[] {
new
{
id = 1,
val = "value1"
},
new
{
id =2,
val ="value2"
} });

因为在启动的时候已经设置了 id 参数应该被保护,所以当你访问 /api/values/{id} 这个地址的时候,如果没有设置 AllowUnprotectedParamstrue 的话,直接使用原始的 int 类型的 id 去访问就会得到一个 4xx(默认是412) 状态码的响应,如果用从 /api/values 返回的 id 的值去访问就会正常的拿到响应。

除此之外你可以设置被保护的值的过期时间,通过设置一个比较短的过期时间来一定程度上的反爬虫,有个不太友好的地方就是可能会一定程序上的影响用户体检,如果用户打开一个页面长期没有操作就可能会导致某些操作可能会失败,需要用户重新操作。

你也可以是 POSTPUT 请求中使用被保护的值,如果被保护的值已经过期,你会从服务得到一个 4xx(默认 412) 的响应。

More

你可以设置更多参数来更适合你的使用

/// <summary>
/// ProtectorPurpose
/// </summary>
public string ProtectorPurpose { get; set; } = "ParamsProtection"; /// <summary>
/// ExpiresIn, minutes
/// </summary>
public int? ExpiresIn { get; set; } /// <summary>
/// Enabled for paramsProtection
/// </summary>
public bool Enabled { get; set; } = true; /// <summary>
/// Allow unprotected params
/// </summary>
public bool AllowUnprotectedParams { get; set; } /// <summary>
/// Invalid request response http status code
/// refer to https://restfulapi.net/http-status-codes/
/// </summary>
public int InvalidRequestStatusCode { get; set; } = 412; /// <summary>
/// the params to protect
/// </summary>
public string[] ProtectParams { get;set; }

你可以改变一些值来改变参数保护模式:

  • 设置 Enabledfalse 以禁用参数保护
  • 修改 ProtectorPurpose 的值以改变 DataProtector 的 purpose
  • 设置 AllowUnprotectedParamstrue 以允许原始参数的访问
  • 设置 InvalidRequestStatusCode 的值来改变不合法参数访问时响应的 Status Code
  • 修改 ExpiresIn 的值以改变已经保护的参数的值的过期时间
  • 设置 ProtectParams 的值来指定要进行参数保护的参数名称

Contact

Contact me: weihanli@outlook.com

asp.net core webApi 参数保护的更多相关文章

  1. ASP.NET Core WebApi 返回统一格式参数(Json 中 Null 替换为空字符串)

    相关博文:ASP.NET Core WebApi 返回统一格式参数 业务场景: 统一返回格式参数中,如果包含 Null 值,调用方会不太好处理,需要替换为空字符串,示例: { "respon ...

  2. Asp.Net Core WebAPI入门整理(四)参数获取

    一.总结整理,本实例对应.Net Core 2.0版本 1.在.Net Core WebAPI 中对于参数的获取及自动赋值,沿用了Asp.Net  MVC的有点,既可以单个指定多个参数,右可以指定Mo ...

  3. ionic + asp.net core webapi + keycloak实现前后端用户认证和自动生成客户端代码

    概述 本文使用ionic/angular开发网页前台,asp.net core webapi开发restful service,使用keycloak保护前台页面和后台服务,并且利用open api自动 ...

  4. Asp.net Core WebApi 使用Swagger做帮助文档,并且自定义Swagger的UI

    WebApi写好之后,在线帮助文档以及能够在线调试的工具是专业化的表现,而Swagger毫无疑问是做Docs的最佳工具,自动生成每个Controller的接口说明,自动将参数解析成json,并且能够在 ...

  5. Asp.Net Core WebApi学习笔记(四)-- Middleware

    Asp.Net Core WebApi学习笔记(四)-- Middleware 本文记录了Asp.Net管道模型和Asp.Net Core的Middleware模型的对比,并在上一篇的基础上增加Mid ...

  6. Asp.net core WebApi 使用Swagger生成帮助页

    最近我们团队一直进行.net core的转型,web开发向着前后端分离的技术架构演进,我们后台主要是采用了asp.net core webapi来进行开发,开始每次调试以及与前端人员的沟通上都存在这效 ...

  7. ASP.Net Core WebApi几种版本控制对比

    版本控制的好处: (1)助于及时推出功能, 而不会破坏现有系统. (2)它还可以帮助为选定的客户提供额外的功能. API 版本控制可以采用不同的方式进行控制,方法如下: (1)在 URL 中追加版本或 ...

  8. ASP.NET Core WebApi使用Swagger生成api说明文档看这篇就够了

    引言 在使用asp.net core 进行api开发完成后,书写api说明文档对于程序员来说想必是件很痛苦的事情吧,但文档又必须写,而且文档的格式如果没有具体要求的话,最终完成的文档则完全取决于开发者 ...

  9. Asp.Net Core WebApi (Swagger+EF Core/Code First)

    Swagger简介: Swagger™的目标是为REST APIs 定义一个标准的,与语言无关的接口,使人和计算机在看不到源码或者看不到文档或者不能通过网络流量检测的情况下能发现和理解各种服务的功能. ...

随机推荐

  1. [Swift]LeetCode65. 有效数字 | Valid Number

    Validate if a given string is numeric. Some examples:"0" => true" 0.1 " => ...

  2. [Swift]LeetCode97. 交错字符串 | Interleaving String

    Given s1, s2, s3, find whether s3 is formed by the interleaving of s1 and s2. Example 1: Input: s1 = ...

  3. [Swift]LeetCode679. 24点游戏 | 24 Game

    You have 4 cards each containing a number from 1 to 9. You need to judge whether they could operated ...

  4. [Swift]LeetCode700. 二叉搜索树中的搜索 | Search in a Binary Search Tree

    Given the root node of a binary search tree (BST) and a value. You need to find the node in the BST ...

  5. python-正则表达式练习

    1.匹配普通URL ^(http://)([a-z]+)\.([a-z]+)\.(com|cn|net|edu)(/(\w)+)+(.+) 2.匹配type返回的字符串中的类型 import re r ...

  6. Mysql的两种“排名第几且有可能为空的记录”写法(力扣176)

    编写一个 SQL 查询,获取 Employee 表中第二高的薪水(Salary) . +----+--------+ | Id | Salary | +----+--------+ | 1 | 100 ...

  7. 解决SpringMVC中文乱码问题 -----这是服务器返回参数到前端中文乱码

    方法一,使用(produces = "application/json; charset=utf-8"): @RequestMapping(value="/getUser ...

  8. Scala安装教程

    首先去Java官网下载Java的安装包 jdk-8u121-windows-x64.exe 再去Scala官网下载Scala的安装包 Scala2.12.1 安装Java: 配置Java环境变量(系统 ...

  9. BBS论坛(二十六)

    26.发布帖子前台代码逻辑完成 (1)front/hooks.py from .views import bp from flask import session,g from .models imp ...

  10. mockjs,json-server一起搭建前端通用的数据模拟框架

    无论是在工作,还是在业余时间做前端开发的时候,难免出现后端团队还没完成接口的开发,而前端团队却需要实现对应的功能,不要问为什么,这是肯定存在的.本篇文章就是基于此原因而产出的.希望对有这方面的需求的同 ...