C# 为什么要检查上传的文件';s内容类型,如果发件人可以谎报内容类型?
我正在编写一个隐藏在Azure API管理工具背后的API。除非APIM验证请求者的访问令牌以及Azure订阅,否则无法访问它。在API中,我们希望与请求者确认我们只接受zip文件C# 为什么要检查上传的文件';s内容类型,如果发件人可以谎报内容类型?,c#,api,rest,.net-5,file-type,C#,Api,Rest,.net 5,File Type,我正在编写一个隐藏在Azure API管理工具背后的API。除非APIM验证请求者的访问令牌以及Azure订阅,否则无法访问它。在API中,我们希望与请求者确认我们只接受zip文件 if (request.PayloadFile.ContentType != "application/zip") { throw new BadRequestException("Unable to accept payload content type"); }
if (request.PayloadFile.ContentType != "application/zip")
{
throw new BadRequestException("Unable to accept payload content type");
}
这是而不是一个试图缓解不良行为的过程。其目的只是验证开发人员是否正在发送预期的数据类型。话虽如此,我制作了一个发送非zip格式文件的小客户端,我只需在请求中设置内容类型头:
var fileContent = new ByteArrayContent(await File.ReadAllBytesAsync(filePath));
fileContent.Headers.Remove("Content-Type");
fileContent.Headers.Add("Content-Type", "application/zip");
fileAsFormData.Add(fileContent, "payLoad", fileName: Path.GetFileName(filePath));
API欣然接受了这一点。所以我的问题有两个:
ContentType
,看它是否可以被欺骗内容类型是客户端向服务器指示要发送的内容的一种方式。当然,你可能会恶意地“撒谎”,但这会违背你作为客户的利益。服务器可能实现适当的逻辑来解析文件内容,具体取决于内容类型头 有几件事需要考虑:
这里真正的问题是:为什么会有人恶意欺骗内容类型?还是文件内容?以及需要何种级别的安全措施来避免相关风险?内容类型是客户端向服务器指示希望发送的内容的一种方式。当然,你可能会恶意地“撒谎”,但这会违背你作为客户的利益。服务器可能实现适当的逻辑来解析文件内容,具体取决于内容类型头 有几件事需要考虑:
这里真正的问题是:为什么会有人恶意欺骗内容类型?还是文件内容?需要什么级别的安全措施来避免相关风险?我首先想到的是,它可以防止善意用户意外上传错误的文件类型。zip文件格式在第一个字节中有一个神奇的数字,你可以检查一下,但它本身并不能保证这是一个有效的zip。我首先想到的是,它可以防止善意的用户意外上传错误的文件类型。zip文件格式在第一个字节中有一个神奇的数字,您可以检查它,但它本身不能保证这是一个有效的zip。