当前位置 : 主页 > 网络编程 > net编程 >

c# asp.net mvc API接口安全过滤,api域名过滤,api域名+端口过滤

来源:互联网 收集:自由互联 发布时间:2023-09-07
背景 我的项目设置了IIS的请求头允许所有域名都可以跨域访问我的API; 但是我又想通过程序控制某些域名不能访问 Web.config代码 configuration节点下 system.webServer节点 httpProtocol customHeade

背景

我的项目设置了IIS的请求头允许所有域名都可以跨域访问我的API;

但是我又想通过程序控制某些域名不能访问

Web.config代码

<configuration>节点下   <system.webServer>节点

<httpProtocol>
<customHeaders>
<!--*代表任何人域名都可以访问-->
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Headers" value="AuthToken, Authorization, Origin, Content-Type, Accept, X-Requested-With" />
<add name="Access-Control-Allow-Methods" value="GET, PATCH, POST, PUT, DELETE, OPTIONS" />

</customHeaders>
</httpProtocol>

 延伸阅读:

ASP.NET MVC和ASP.NET Web API跨域请求问题解决方案【最全】​

 

第一步:Web.config 修改

在网站根目录打开“Web.config”文件找到<appSettings>节点,

如果没有,就在<configuration>节点下加上<appSettings>节点,

下面是完整代码

<appSettings>
<!--API域名过滤-->
<add key="APICheckDomainName" value="http://192.189.1.181/,http://192.189.1.183/" />
</appSettings>

第二步:新增检查类

APICheckDomainName.cs代码

using System;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using System.Net.Http;
using System.Web;

namespace API
{
/// <summary>
/// 检查请求API的域名是否授权,可以检测“域名”或“域名+端口”是否授权
/// </summary>
public class APICheckDomainName
{


/// <summary>
/// 检查请求的域名是否授权
/// </summary>
/// <param name="Request">当前请求</param>
/// <param name="PortCheck">是否检测端口,如果检测端口,配置文件的域名也必须附带端口号,如http://www.baidu.com:80/</param>
/// <returns>如果未授权返回false,否则true</returns>
public static bool CheckDomainName(HttpRequestMessage Request,bool PortCheck=false)
{
//RequestStatus
bool RequestStatus = false;

string RequestDomainName= string.Empty;

//获取配置
string[] APICheckDomainNameList = ConfigurationManager.AppSettings["APICheckDomainName"].ToString().Split(',');

//协议 http/htts
string scheme = string.Empty;

//域名
string host = string.Empty;

//端口
int Port= 0;


try
{
//获取请求的Scheme
scheme = Request.Headers.Referrer.Scheme;
}
catch (Exception)
{
//获取直接访问的Scheme
scheme = Request.RequestUri.Scheme;
}

try
{
//获取请求的Host
host = Request.Headers.Referrer.Host;
}
catch (Exception)
{
//获取直接访问的Host
host = Request.RequestUri.Host;
}

try
{
//获取请求的Port
Port = Request.Headers.Referrer.Port;
}
catch (Exception)
{
//获取直接访问的Port
Port = Request.RequestUri.Port;
}


if (PortCheck)
{
RequestDomainName = $"{scheme}://{host}:{Port}/";
}
else {
RequestDomainName = $"{scheme}://{host}/";
}



foreach (var item in APICheckDomainNameList)
{
if (item == RequestDomainName)
{
RequestStatus = true;
}
}
return RequestStatus;
}

}
}

 

第三步:调用

//检查是否授权
if (APICheckDomainName.CheckDomainName(Request)==false)
{
return "未授权!";
}

 

 

 

 

 

 


【文章转自韩国多ip站群服务器 http://www.558idc.com/krzq.html处的文章,转载请说明出处】
网友评论