iis服务器助手广告
返回顶部
首页 > 资讯 > 精选 >HttpClient使用过程中的安全隐患有哪些
  • 596
分享到

HttpClient使用过程中的安全隐患有哪些

2023-06-17 13:06:52 596人浏览 安东尼
摘要

这篇文章主要介绍HttpClient使用过程中的安全隐患有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!HttpClient使用过程中的安全隐患,这个有些标题党。因为这本身不是HttpClient的问题,而是使用

这篇文章主要介绍HttpClient使用过程中的安全隐患有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

HttpClient使用过程中的安全隐患,这个有些标题党。因为这本身不是HttpClient的问题,而是使用者的问题。

安全隐患场景说明:

一旦请求大数据资源,则HttpClient线程会被长时间占有。即便调用了org.apache.commons.httpclient.HttpMethod#releaseConnection()方法,也无济于事。

如果请求的资源是应用可控的,那么不存在任何问题。可是恰恰我们应用的使用场景是,请求资源由用户自行输入,于是乎,我们不得不重视这个问题。

我们跟踪releaseConnection代码发现:

org.apache.commons.httpclient.HttpMethodBase#releaseConnection()

public   void  releaseConnection() {        try  {            if  ( this .responseStream  !=   null ) {                try  {                     //  FYI - this may indirectly invoke responseBodyConsumed.                     this .responseStream.close();               }  catch  (IOException ignore) {               }           }       }  finally  {            ensureConnectionRelease();       }   }

org.apache.commons.httpclient.ChunkedInputStream#close()

public   void  close()  throws  IOException {         if  ( ! closed) {             try  {                 if  ( ! eof) {                   exhaustInputStream( this );                }           }  finally  {                eof  =   true ;                closed  =   true ;            }        }    }

org.apache.commons.httpclient.ChunkedInputStream#exhaustInputStream(InputStream inStream)

static   void  exhaustInputStream(InputStream inStream)  throws  IOException {        //  read and discard the remainder of the message         byte  buffer[]  =   new   byte [ 1024 ];        while  (inStream.read(buffer)  >=   0 ) {           ;        }   }

看到了吧,所谓的丢弃response,其实是读完了一次请求的response,只是不做任何处理罢了。

想想也是,HttpClient的设计理念是重复使用HttpConnection,岂能轻易被强制close呢。

怎么办?有朋友说,不是有time out设置嘛,设置下就可以下。

我先来解释下Httpclient中两个time out的概念:

public static final String CONNECTION_TIMEOUT = "http.connection.timeout";

即创建Socket连接的超时时间:java.net.Socket#connect(SocketAddress endpoint, int timeout)中的timeout

public static final String SO_TIMEOUT = "http.socket.timeout";

即read data过程中,等待数据的timeout:java.net.Socket#setSoTimeout(int timeout)中的timeout

而在我上面场景中,这两个timeout都不满足,确实是由于资源过大,而占用了大量的请求时间。

问题总是要解决的,解决思路如下:

利用DelayQueue,管理所有请求

利用一个异步线程监控,关闭超长时间的请求

演示代码如下:

public   class  Misc2 {                 private   static   final  DelayQueue < Timeout >  TIMEOUT_QUEUE  =   new  DelayQueue < Timeout > ();                 public   static   void  main(String[] args)  throws  Exception {               new  Monitor().start();  //  超时监控线程                      new  Request( 4 ).start(); //  模拟***个下载                new  Request( 3 ).start(); //  模拟第二个下载               new  Request( 2 ).start(); //  模拟第三个下载          }                          public   static   class  Request  extends  Thread {                   private   long  delay;                   public  Request( long  delay){                  this .delay  =  delay;             }                   public   void  run() {                 HttpClient hc  =   new  HttpClient();                 GetMethod req  =   new  GetMethod( " http://www.python.org/ftp/Python/2.7.1/Python-2.7.1.tgz " );                  try  {                     TIMEOUT_QUEUE.offer( new  Timeout(delay  *   1000 , hc.getHttpConnectionManager()));                     hc.executeMethod(req);                 }  catch  (Exception e) {                     System.out.println(e);                 }                 req.releaseConnection();             }              }                          public   static   class  Monitor  extends  Thread {                  @Override             public   void  run() {                  while  ( true ) {                      try  {                         Timeout timeout  =  TIMEOUT_QUEUE.take();                         timeout.forceClose();                     }  catch  (InterruptedException e) {                         System.out.println(e);                     }                 }             }              }                          public   static   class  Timeout  implements  Delayed {                   private   long                   debut;              private   long                   delay;              private  HttpConnectionManager manager;                   public  Timeout( long  delay, HttpConnectionManager manager){                  this .debut  =  System.currentTimeMillis();                  this .delay  =  delay;                  this .manager  =  manager;            }                   public   void  forceClose() {                 System.out.println( this .debut  +   " : "   +   this .delay);                  if  (manager  instanceof  SimpleHttpConnectionManager) {                     ((SimpleHttpConnectionManager) manager).shutdown();                 }                  if  (manager  instanceof  MultiThreadedHttpConnectionManager) {                     ((MultiThreadedHttpConnectionManager) manager).shutdown();                 }             }                  @Override             public   int  compareTo(Delayed o) {                  if  (o  instanceof  Timeout) {                     Timeout timeout  =  (Timeout) o;                      if  ( this .debut  +   this .delay  ==  timeout.debut  +  timeout.delay) {                          return   0 ;                     }  else   if  ( this .debut  +   this .delay  >  timeout.debut  +  timeout.delay) {                          return   1 ;                     }  else  {                          return   - 1 ;                     }                 }                 return   0 ;            }                @Override            public   long  getDelay(TimeUnit unit) {                 return  debut  +  delay  -  System.currentTimeMillis();            }            }        }

以上是“HttpClient使用过程中的安全隐患有哪些”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注编程网精选频道!

--结束END--

本文标题: HttpClient使用过程中的安全隐患有哪些

本文链接: https://www.lsjlt.com/news/289364.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • HttpClient使用过程中的安全隐患有哪些
    这篇文章主要介绍HttpClient使用过程中的安全隐患有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!HttpClient使用过程中的安全隐患,这个有些标题党。因为这本身不是HttpClient的问题,而是使用...
    99+
    2023-06-17
  • IP免费代理的安全隐患有哪些
    这篇文章主要介绍了IP免费代理的安全隐患有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。伴随着因特网的发展,网站的各种限制越来越多,代理IP的用户也越来越多。但仍有一部分...
    99+
    2023-06-20
  • Linux的安全隐患防范对策有哪些
    这篇文章主要讲解了“Linux的安全隐患防范对策有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Linux的安全隐患防范对策有哪些”吧!Linux启动后出现boot:提示时,使用一个特殊...
    99+
    2023-06-17
  • 美国网站服务器的安全隐患有哪些
    美国网站服务器的安全隐患有:1、美国网站服务器的密码和证书管理不严格,轻易被黑客利用进行入侵;2、使用美国网站服务器进入钓鱼网站造成账户劫持,从而使黑客轻易破解服务器账户;3、使用界面和API来管理与进行互动时,检测不严格容易被黑客入侵;4...
    99+
    2024-04-02
  • 美国服务器主机有哪些安全隐患
    美国服务器主机的安全隐患有:1、物理路径泄露,用户请求出错;2、目录遍历,目录附加其它编码;3、执行任意命令,执行任意操作系统命令;4、缓冲区溢出,没有合适处理用户提交的超长请求;5、拒绝服务,特殊目录、超长URL、超长HTTP Heade...
    99+
    2024-04-02
  • C#中HttpClient使用注意事项有哪些
    小编给大家分享一下C#中HttpClient使用注意事项有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!最近在测试一个第三方API,准备集成在我们的网站应用中...
    99+
    2023-06-29
  • 微信小程序用户隐私和数据安全的规范有哪些
    这篇文章主要介绍“微信小程序用户隐私和数据安全的规范有哪些”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“微信小程序用户隐私和数据安全的规范有哪些”文章能帮助大家解决问题。  【微信小程序用户隐私和数...
    99+
    2023-06-26
  • 操作系统线程管理中的安全隐患:并发执行的潜在威胁
    1. 竞态条件 竞态条件发生在一个共享资源的访问和修改没有得到适当同步的情况下,导致程序的行为不确定。多个线程同时试图访问同一资源,可能会导致意外修改或数据损坏。 2. 死锁 死锁发生当两个或多个线程相互等待对方释放资源的情况。这会导致整...
    99+
    2024-04-02
  • VB.NET中的调用过程有哪些
    VB.NET中的调用过程有哪些,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。VB.NET调用过程一、调用Sub过程与Function过程不同,在表达式中,Sub过程不能用其名字...
    99+
    2023-06-17
  • 使用Ubuntu Audacious过程中问题有哪些
    本篇内容介绍了“使用Ubuntu Audacious过程中问题有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!FlashPlayer乱码...
    99+
    2023-06-17
  • Nginx php安装过程中的技巧有哪些
    这篇文章将为大家详细讲解有关Nginx php安装过程中的技巧有哪些,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。对于每一个网络管理的从业人员,无论是开发人...
    99+
    2024-04-02
  • 使用DBLink过程中遇到的问题有哪些
    这篇文章给大家分享的是有关使用DBLink过程中遇到的问题有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1.     &n...
    99+
    2024-04-02
  • VUE使用中踩过的坑有哪些
    小编给大家分享一下VUE使用中踩过的坑有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1.路由变化页面数据不刷新问题出现这种...
    99+
    2024-04-02
  • OpenBSD中常用的安全功能有哪些
    隔离系统组件:OpenBSD使用类似于沙盒的机制,将系统组件彼此隔离,以防止攻击者利用一个组件的漏洞来进一步攻击其他组件。 ...
    99+
    2024-04-02
  • 使用Docker容器的安全技巧有哪些
    这篇文章将为大家详细讲解有关使用Docker容器的安全技巧有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。首先,让我们看看限制容器的访问权限。访问管理-限制权限启动容器时,Docker将创建一组命名空...
    99+
    2023-06-17
  • mysql使用存储过程的作用有哪些
    这篇文章将为大家详细讲解有关mysql使用存储过程的作用有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。mysql使用存储过程的作用:1、增强SQL语句的功能和灵活性...
    99+
    2024-04-02
  • java中实现线程安全的方法有哪些
    java中实现线程安全的方法有哪些?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Java是什么Java是一门面向对象编程语言,可以编写桌面应用程序、Web应用程序、分布式系统和...
    99+
    2023-06-14
  • 美国VPS使用过程中的注意事项有哪些
    美国VPS使用过程中的注意事项有:1、需要做好美国VPS配置方面的安全管理,比如不要随意安装多余软件、不随意修改防火墙配置、做好密码管理等措施;2、需要对美国VPS信息安全方面做好了解,比如美国VPS主机内部不需要加装杀毒软件、不能使用美国...
    99+
    2024-04-02
  • 使用vue进行渲染的过程有哪些
    使用vue进行渲染的过程有哪些?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。为什么要使用VueVue是一款友好的、多用途且高性能的JavaScript框架,使用vue可以创建可...
    99+
    2023-06-14
  • 使用云服务器的安全提示有哪些
    使用云服务器的安全提示有:1、确保云服务器供应商符合标准;2、审核云服务器供应商的服务项;3、明确云服务器供应商;4、对内部数据进行全面保护;5、实施公共云服务器安全策略;6、保护访问云服务器的物理设备;7、制定完善的云服务器迁移策略;具体...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作