目录

介绍

背景

使用代码

兴趣点


演示了一个简单的Web请求示例,以及在登录之前需要进行哪些后期处理。记录完整的Web请求可能会导致安全问题,但是有通用/可重用的方法可以防止此问题。显示了使用这种方式的代码。

介绍

这些天,安全性非常重要。隐私法规越来越严格,黑客越来越聪明,数据的价值也在增加。在培训和课程中,经常会告诉开发人员使用https和使用身份验证。作为开发人员,您还需要了解其他事项。在本文中,将解释这些事情之一。

背景

如果您对.NET开发有一定的了解,这将非常有帮助,最好使用.NET Core,因为这是我们在这里使用的技术。如果您使用Xamarin或.NET Framework,则本文可能也很清楚,并且对您的日常工作很有用。

使用代码

在此处显示的代码中,Web请求被发送到外部服务。就本文而言,与什么服务无关。重要的是完成了一些Web请求并使用了授权。

static async Task Main()
{using (var httpClient = new HttpClient(new SafeHandler())){httpClient.BaseAddress = new Uri("https://www.google.com/");httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", "DummyToken");var response = await httpClient.GetAsync("");Console.WriteLine($"Returned status code: {response.StatusCode}");Console.WriteLine("END");}
}

从逻辑上讲,Web请求很重要,重要事件需要记录,日志输出需要测试。如果您想了解更多有关此的知识,则可能需要阅读这篇文章。我们在这里可以做的只是添加执行完整请求记录的代码。但是,这不是一个好计划。

日志记录需要与我们需要能够跟踪的数据一起完成,以防出现生产问题。不应该使用只有黑客才想知道的数据进行日志记录。这就是为什么上面提到的SafeHandler是在实现上面的代码之前实现的。这是SafeHandler的代码。出于演示目的,我们仅直接使用序列化方法并登录到控制台。最有可能的是,您希望使用更高级的日志记录方式,但这超出了本文的范围。

public class SafeHandler : DelegatingHandler
{public SafeHandler(){InnerHandler = new HttpClientHandler();}protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken){var result = base.SendAsync(request, cancellationToken);if (request.Headers.Authorization != null){request.Headers.Authorization = new AuthenticationHeaderValue(request.Headers.Authorization.Scheme, "***");}var toLog = JsonConvert.SerializeObject(request);Console.WriteLine(toLog);return result;}
}

从该代码中可以清楚地看出,请求在发送后会稍作修改。授权标头的实际值由星号代替。记录后将无法跟踪该值,但是很可能不需要它来解决生产问题。如果您的日志记录中存在安全问题,那么黑客也无法跟踪它,这才是重要的。您希望用星号替换的数据可能有所不同,但是很高兴认识到使用DelegatingHandler的方法可以帮助您。您如何以及在何处执行Web请求没有问题,如果你使用具有相同DelegatingHandler的HttpClient的代码将在所有情况下执行。如果您直接想要一个工作示例,则代码在GitHub上。

兴趣点

有关安全性的课程通常不会过多地关注日志记录。有关日志记录的课程通常不会过多地关注安全性。当我发现有问题的地方(在日志中看到令牌)时,我开始意识到需要缩小这一差距,这激发了我撰写本文的灵感。

如何使您的HttpClient安全?相关推荐

  1. feign的性能优化、Feign的使用-最佳优化两种方案

    性能优化基础: feign底层客户端实现默认使用的是URLConnection,这是jdk自带的发送http请求的包,不支持连接池: 这样在发送http请求时,每次都要建立连接(三次握手),发送数据, ...

  2. hyperf中使用w7corp/easywechat

    ​ EasyWeChat 是一个开源的微信非官方 SDK.安装非常简单,因为它是一个标准的Composer包,这意味着任何满足下列安装条件的 PHP 项目支持Composer都可以使用它.在php-f ...

  3. Effective C++连载

     第一章 从C转向C++ 对每个人来说,习惯C++需要一些时间,对于已经熟悉C的程序员来说,这个过程尤其令人苦恼.因为C是C++的子集,所有的C的技术都可以继续使用,但很多用起来又不太合适.例如,C+ ...

  4. HttpClient 使用时,出现「no trusted certificate found」的原因 (JDK没有安装相应的证明书)

    ■前言 访问的对象网站时 HTTPS 的. (A程序,访问B中的HTTPS) ■原因 证明书,不识别 (A程序所在的服务器,不认可,HTTPS的证明书) ■解决 (仅仅是理论,没有实际操作过.参照使用 ...

  5. HttpURLConnection与HttpClient浅析---转

    HttpURLConnection与HttpClient浅析 1. GET请求与POST请求 HTTP协议是现在Internet上使用得最多.最重要的协议了,越来越多的Java应用程序需要直接通过HT ...

  6. 通过HTTPS使用HttpClient信任所有证书

    最近在Https上发布了有关HttpClient的问题( 在此处找到 ). 我取得了一些进展,但遇到了新问题. 与我的最后一个问题一样,我似乎找不到任何适合我的示例. 基本上,我希望我的客户端接受任何 ...

  7. HttpClient 中文官方教程----第一章基础知识-只收录,未测试

    2019独角兽企业重金招聘Python工程师标准>>> 第一章基础知识 英文链接:http://hc.apache.org/httpcomponents-client-ga/tuto ...

  8. 《HttpClient官方文档》2.1 连接持久性-2.2 HTTP连接路由

    2.1. 连接持久性 一个主机与另一个主机建立连接的过程是相当复杂的,并且涉及两个端点之间的多个分组交换,这可能相当耗时.尤其是对于较小的HTTP消息来说,连接握手的开销是很大的.如果打开的连接能够重 ...

  9. httpclient 登录人人,并且发表说说。

    (大家有什么意见或者,更好的学习方式,解决问题的方法欢迎提出,小弟好改进) 前段时间,感觉模拟登录人人挺有意思的. 代码调用的是叫做httpclient相关的包,随后便下载中文文档打印出来,开始全方位 ...

最新文章

  1. 在使用stl中的ifstream出错时如何快速排错?
  2. 嵌入式开发中DSP与FPGA的关系
  3. Android Studio开发RecyclerView遇到的各种问题以及解决
  4. Harbor容器仓库的镜像上传
  5. python数据分析-数据准备
  6. 思源高拍仪万能驱动_动态展示和教学 良田YL1050AF高拍仪评测
  7. H.264中POC类型之探讨
  8. www.cnblog.org无法访问了
  9. CentOS 6.9 下安装DB2
  10. 2017年最优秀的七大开源网络监控工具
  11. 名编辑电子杂志大师教程 | 文本复制按钮
  12. JavaWeb学习笔记4
  13. Windows系统中Word文档在插入公式时,公式按钮是灰色的(无法插入公式)的解决办法
  14. 手机模拟器安装证书抓包
  15. 为什么?为什么?Java处理排序后的数组比没有排序的快?想过没有?
  16. execl筛选去重_Excel去除重复项的三种常用技巧
  17. java微信小程序、APP 西门子PLC通信,java S7-S200、java S7-300、java S7-400,java与PROFINET协议通信 Java与西门子PLC通信
  18. OpenFOAM量纲及常用物理量的表达形式
  19. LabView2014的串口使用之--VISA 驱动下载安装篇
  20. 2022中国科学技术大学计算机考研复试分数线是多少

热门文章

  1. php调用ruby,ruby、javascript、php中的观察者模式实现代码
  2. mysql是bsd协议吗_freebsd下实现mysql的自动备份
  3. 单纯形表的matlab输出,自编MATLAB版单纯性算法 可以列出单纯形表以及其他相关数据...
  4. 素材 | 3D立体设定数据多彩数据统计图元素PSD模板
  5. android获取错误原因,从http读取数据时发生OutOfMemory错误获取请求android
  6. mysql检查存在_如何检查MySQL中是否存在行?(即检查MySQL中是否存在电子邮件)...
  7. 爬虫项目之爬取页面并按界面样式导入excel表格
  8. Linux 2.6中基于Sysenter的系统调用机制
  9. 【Linux内核之旅】eBPF C语言入门架构
  10. get_mempolicy(2) /set_mempolicy(2)/mbind(2)/numa(3) — Linux manual page