asp.net core webApi 参数保护
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}
这个地址的时候,如果没有设置 AllowUnprotectedParams
为 true
的话,直接使用原始的 int
类型的 id 去访问就会得到一个 4xx(默认是412) 状态码的响应,如果用从 /api/values
返回的 id 的值去访问就会正常的拿到响应。
除此之外你可以设置被保护的值的过期时间,通过设置一个比较短的过期时间来一定程度上的反爬虫,有个不太友好的地方就是可能会一定程序上的影响用户体检,如果用户打开一个页面长期没有操作就可能会导致某些操作可能会失败,需要用户重新操作。
你也可以是 POST
或 PUT
请求中使用被保护的值,如果被保护的值已经过期,你会从服务得到一个 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; }
你可以改变一些值来改变参数保护模式:
- 设置
Enabled
为false
以禁用参数保护 - 修改
ProtectorPurpose
的值以改变DataProtector
的 purpose - 设置
AllowUnprotectedParams
为true
以允许原始参数的访问 - 设置
InvalidRequestStatusCode
的值来改变不合法参数访问时响应的 Status Code - 修改
ExpiresIn
的值以改变已经保护的参数的值的过期时间 - 设置
ProtectParams
的值来指定要进行参数保护的参数名称
Contact
Contact me: weihanli@outlook.com
asp.net core webApi 参数保护的更多相关文章
- ASP.NET Core WebApi 返回统一格式参数(Json 中 Null 替换为空字符串)
相关博文:ASP.NET Core WebApi 返回统一格式参数 业务场景: 统一返回格式参数中,如果包含 Null 值,调用方会不太好处理,需要替换为空字符串,示例: { "respon ...
- Asp.Net Core WebAPI入门整理(四)参数获取
一.总结整理,本实例对应.Net Core 2.0版本 1.在.Net Core WebAPI 中对于参数的获取及自动赋值,沿用了Asp.Net MVC的有点,既可以单个指定多个参数,右可以指定Mo ...
- ionic + asp.net core webapi + keycloak实现前后端用户认证和自动生成客户端代码
概述 本文使用ionic/angular开发网页前台,asp.net core webapi开发restful service,使用keycloak保护前台页面和后台服务,并且利用open api自动 ...
- Asp.net Core WebApi 使用Swagger做帮助文档,并且自定义Swagger的UI
WebApi写好之后,在线帮助文档以及能够在线调试的工具是专业化的表现,而Swagger毫无疑问是做Docs的最佳工具,自动生成每个Controller的接口说明,自动将参数解析成json,并且能够在 ...
- Asp.Net Core WebApi学习笔记(四)-- Middleware
Asp.Net Core WebApi学习笔记(四)-- Middleware 本文记录了Asp.Net管道模型和Asp.Net Core的Middleware模型的对比,并在上一篇的基础上增加Mid ...
- Asp.net core WebApi 使用Swagger生成帮助页
最近我们团队一直进行.net core的转型,web开发向着前后端分离的技术架构演进,我们后台主要是采用了asp.net core webapi来进行开发,开始每次调试以及与前端人员的沟通上都存在这效 ...
- ASP.Net Core WebApi几种版本控制对比
版本控制的好处: (1)助于及时推出功能, 而不会破坏现有系统. (2)它还可以帮助为选定的客户提供额外的功能. API 版本控制可以采用不同的方式进行控制,方法如下: (1)在 URL 中追加版本或 ...
- ASP.NET Core WebApi使用Swagger生成api说明文档看这篇就够了
引言 在使用asp.net core 进行api开发完成后,书写api说明文档对于程序员来说想必是件很痛苦的事情吧,但文档又必须写,而且文档的格式如果没有具体要求的话,最终完成的文档则完全取决于开发者 ...
- Asp.Net Core WebApi (Swagger+EF Core/Code First)
Swagger简介: Swagger™的目标是为REST APIs 定义一个标准的,与语言无关的接口,使人和计算机在看不到源码或者看不到文档或者不能通过网络流量检测的情况下能发现和理解各种服务的功能. ...
随机推荐
- [SQL]LeetCode185. 部门工资前三高的员工 | Department Top Three Salaries
SQL 架构 Create table If Not Exists Employee (Id ), Salary int, DepartmentId int) Create table If Not ...
- [Swift]LeetCode217. 存在重复元素 | Contains Duplicate
Given an array of integers, find if the array contains any duplicates. Your function should return t ...
- 一文掌握 Linux 性能分析之网络篇(续)
本文首发于我的公众号 Linux云计算网络(id: cloud_dev),专注于干货分享,号内有 10T 书籍和视频资源,后台回复「1024」即可领取,欢迎大家关注,二维码文末可以扫. 这是 Linu ...
- 死磕 java集合之WeakHashMap源码分析
欢迎关注我的公众号"彤哥读源码",查看更多源码系列文章, 与彤哥一起畅游源码的海洋. 简介 WeakHashMap是一种弱引用map,内部的key会存储为弱引用,当jvm gc的时 ...
- 『骑士精神 IDA*』
骑士精神(SCOI2005) Description 在一个5×5的棋盘上有12个白色的骑士和12个黑色的骑士, 且有一个空位.在任何时候一个骑士都能按照骑 士的走法(它可以走到和它横坐标相差为1,纵 ...
- JAVA日志的前世今生
这世界上很多事情,看起来就像彩虹一样炫目而神奇,实际上背后蕴含着随处可见的原理.就好像静儿几年前买过一件超贵的防辐射服,当时销售人员把手机严严实实的包在防辐射服里,然后让我打电话测试,果然没有信号. ...
- C语言数组操作和指针操作谁更高效
在上一篇博文 代码优化小技巧(持续更新......) 第三条关于数组和指针谁更高效, 意犹未尽, 决定单独拉出一篇来讲 1. 数组和指针操作对比 #include <stdio.h> i ...
- Java开发知识之Java入门
Java开发知识之Java入门 一丶了解JAVA的版本 JAVA 有三个版本 JAVA SE: 标准版,开发桌面跟商务应用程序 JAVA SE 包括了Java的核心类库,集合,IO 数据库连接 以及网 ...
- Docker系列01—容器的发展历程---Docker的生态圈
本文收录在容器技术学习系列文章总目录 Docker 和容器技术的发展可谓是日新月异,本文试图以全局的视角来梳理一下 docker 目前的生态圈.既然是概览,所以不会涉及具体的技术细节. Docker ...
- Aooms_微服务基础开发平台实战_003_配置文件与简单的web环境搭建
一.前言 本篇文章介绍两个重点 (1) 工程核心配置文件application.yml (2) 如何在一个标准的的SpringCloud工程上构建起一个基本的web结构 二.配置文件applicati ...