HttpClient使用之下載遠程服務器中的文件(注意目錄遍歷漏洞)

參考文獻:

http://bbs.csdn.net/topics/390952011

http://blog.csdn.net/ljj_9/article/details/53306468

1.下載地址

http://hc.apache.org/downloads.cgi

Apache-》Projects-》HttpComponents

2.DownloadServlet

 1 package com.servlet;
 2 
 3 import java.io.BufferedInputStream;
 4 import java.io.BufferedOutputStream;
 5 import java.io.File;
 6 import java.io.FileInputStream;
 7 import java.io.IOException;
 8 import java.io.InputStream;
 9 import java.io.OutputStream;
10 import java.net.URLDecoder;
11 import java.net.URLEncoder;
12 
13 import javax.servlet.ServletException;
14 import javax.servlet.http.HttpServlet;
15 import javax.servlet.http.HttpServletRequest;
16 import javax.servlet.http.HttpServletResponse;
17 
18 
19 
20 public class DownloadServlet extends HttpServlet {
21 
22     private static final long serialVersionUID = 1L;
23     
24     public void doGet(HttpServletRequest request, HttpServletResponse response)
25             throws ServletException, IOException {
26         String filename = request.getParameter("id");
27         String fileUrl = request.getServletContext().getRealPath("").replace("\\", "/"); 
28         fileUrl = fileUrl + "/files/document/" + filename;
29         System.out.println("fileUrl:"+fileUrl);
30         String rname = new String(filename.getBytes("utf-8"));
31         System.out.println("begin:"+rname);
32         rname = URLEncoder.encode(rname);
33         System.out.println("end:"+rname);
34         response.addHeader("Content-Disposition", "attachment;filename="+rname);
35         response.setContentType("application/octet-stream");
36         
37         File file = new File(fileUrl);
38         InputStream is = new BufferedInputStream(new FileInputStream(file));
39         byte[] buffer = new byte[is.available()];
40         is.read(buffer);
41         is.close();
42          
43         OutputStream os = new BufferedOutputStream(response.getOutputStream());
44         os.write(buffer);
45         os.flush();
46         os.close();
47     }
48     
49     
50     public void doPost(HttpServletRequest request, HttpServletResponse response)
51             throws ServletException, IOException {
52         
53         
54     }
55     
56     
57     }
58     
59   

3.ClientA.java

?

package com.tool;import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;public class ClientA {/*** * @param args*/public static void main(String[] args) {// TODO 自動生成的方法存根ClientA client = new ClientA();client.service();}public void service() {// TODO 自動生成的方法存根
        String url = "http://此處填寫ip或網址/download.do";HttpClient client = new DefaultHttpClient();HttpGet get = new HttpGet(url);try {HttpResponse response = client.execute(get);} catch (ClientProtocolException e) {// TODO Auto-generated catch block
            e.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch block
            e.printStackTrace();}}}

4.注意服務器的編碼方式和客戶端的區別

統一為utf-8

5.注意目錄遍歷漏洞

目錄遍歷是通過操作URL強行訪問web目錄以外的文件,目錄和命令,攻擊者可以在目標機器的任何位置訪問文件,執行命令。?
最基本的目錄遍歷攻擊技術是在URL中使用"../"序列,改變訪問資源的路徑,訪問到web目錄以外的文件。?
例如:?
http://example.com/../../../../some/file?
http://example.com/..%255c..%255c/some/file?
正常請求為:?
http://example.com/test.cgi?look=intex.html?
如果存在目錄遍歷漏洞,攻擊者可以訪問?
http://example.com/test.cgi?look=test.cgi

解決辦法:

過濾請求數據中"../"字符序列及其各種變形。?
驗證用戶請求中提交的需要訪問的文件是否在限定的范圍內。

java web使用fliter過濾url即可。

轉載于:https://www.cnblogs.com/landiljy/p/6408382.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/372957.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/372957.shtml
英文地址,請注明出處:http://en.pswp.cn/news/372957.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

HDOJ-1263

水果 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 5303 Accepted Submission(s): 2022 Problem Description夏天來了~~好開心啊,呵呵,好多好多水果~~Joe經營著一個不大的水果店.他認為生存之道就是經營最受顧…

django ajax form表單,Django學習系列之Form表單和ajax(示例代碼)

昵 稱:生 日:性 別: 男 女地 址:手 機 號:郵 箱:[修改]{% csrf_token %}$(\#jsEditUserBtn\).on(\click\, function(){var _self $(this),$jsEditUserForm $(\#…

git push 的符號筆有什么用_如何同步多個 git 遠程倉庫

點擊上方“后端技術精選”,選擇“置頂公眾號”技術文章第一時間送達!作者:taadismy.oschina.net/taadis/blog/3073220題外話,開發中遇到問題或者學習新技術時缺少交流環境,可以點擊加入【后端技術交流群】日常需求以前…

Java EE重新審視設計模式:觀察者

除了以多種語言和許多應用程序實現之外,Observer Pattern自1.0版以來一直是Java的一部分。 觀察者模式也是好萊塢原則的良好實施。 就像好萊塢的特工喜歡回調候選人以代替某個職位,而不是每天被要求詢問可用工作一樣,大多數服務器端資源&…

POI搜索簡介

用戶輸入——用戶輸出-----------------------------------------------------------而POI搜索引擎,需要做的就是拿到輸入條件,給出用戶比較滿意的結果。用戶角度:輸入:盡量簡單,且符合心意輸入時的假設:假…

2、Spring的 IoC詳解(第一個Spring程序)

Spring是為了解決企業應用開發的復雜性而創建的一個輕量級的控制反轉(IoC)和面向切面(AOP)的容器框架。在這句話中重點有兩個,一個是IoC,另一個是AOP。今天我們講第一個IoC。 一. IoC理論的背景 我們都知道…

排除服務器簡單系統故障方法,引導CD排除服務器故障方法有哪些?

盡管Linux系統以穩定可靠著稱,但由于硬件問題有時仍會崩潰/或無法引。針對這一問題,最好的解決辦法就是使用Linux系統引導CD。為了方便讀者,筆者在下面列出了安裝Red Hat Linux 8。0的最必須步驟。為安裝過程作筆記在Red Hat Linux系統典型安…

js 獲取father_(原創)Node.JS實戰26:強大的工作池。收藏吧!你一定會用的到。...

在實際項目中,如果遇到需要大計算量的操作,按需fork(分叉)其實不是一個好的選擇。因為fork的子進程也是V8(NodeJS的核心引擎)的新實例,每創建一個新實例,需要約30毫秒啟動時間&#…

具有ReadWriteLock的Java并發

編寫多線程Java應用程序并不是小菜一碟。 必須格外小心,因為同步不良會使您的應用程序一s不振。 JVM堆由所有線程共享。 如果多個線程需要同時使用相同的對象或靜態類變量,則必須謹慎管理對共享數據的線程訪問。 從1.5版開始,JSDK中包含了在并…

修復steam服務器失敗,steam服務器鏈接失敗

steam服務器鏈接失敗 內容精選換一換當NTP服務器異常時產生該告警。當NTP服務器異常消除時,該告警恢復。主OMS節點配置的NTP服務器異常,可能會導致主OMS節點與外部服務器不能同步時間,集群時間可能會產生飄移。NTP服務器網絡異常。與NTP服務器…

qemu-kvm簡單使用

qemu-kvm主要有以下幾個選項: -snapshot: 創建快照-m: 指定內存大小-smp: 指定處理器個數-cpu: 指定CPU類型-name: 設置虛擬機名稱-vnc: 使用vnc連接-boot: 指定啟動相關的選項-net: 指定網卡相關的選項-drive: 指定硬盤/光盤相關的選項qemu-kvm -m 128 -name first -smp 2 -dr…

將jar添加到發布目錄_第32批免購置稅新能源車型目錄發布;通用BEV3平臺將入華...

1、第32批免購置稅新能源車型目錄發布,幾何X/理想ONE等283款車型入選6月2日,工信部發布《免征車輛購置稅的新能源汽車車型目錄(第三十二批)》,共有283款新能源車型入選。其中新能源乘用車方面包括,一汽大眾Q2L/e-BORA、東風風神E7…

HPROF –內存泄漏分析教程

本文將為您提供有關如何通過生成和分析Sun HotSpot JVM HPROF堆轉儲文件來分析JVM內存泄漏問題的教程。 一個現實的案例研究將用于此目的:Weblogic 9.2內存泄漏影響Weblogic Admin服務器。 環境規格 Java EE服務器:Oracle Weblogic Server 9.2 MP1 中…

mq服務器與客戶端消息同步,使用 ActiveMQ 實現JMS 異步調用

目錄簡介服務之間的同步調用,可以使用 HTTP 或 RPC 來完成,但并非所有的調用都需要同步,有些場景下,當客戶端調用服務端時,并不需要等待服務端做出響應,此時就應該使用異步調用。異步調用的常用方式是基于 …

多個數字數組_七個問題幫助初學者深入理解Java數組

短文漲姿勢,看了不白看,不關注等啥?幾乎所有的高級語言當中,都提供了一種叫做”數組”的東西,Java語言當然也不例外。我們通過數組可以很方便的存儲和管理一組數據。因為在Java語言當中使用數組非常的方便,…

java 異常練習題1

建立exception包,建立Bank類,類中有變量double balance表示存款,Bank類的構造方法能增加存款,Bank類中有取款的發方法withDrawal(double dAmount),當取款的數額大于存款時,拋出InsufficientFundsException,取款數額為負數,拋出Nag…

大話設計模式讀書筆記--6.原型模式

簡單的復制粘貼極有可能造成重復代碼的災難, 但是java中提供了克隆的功能, 如果一個對象創建過程復雜,又要頻繁使用, 在初始化信息不發生變化的情況下,應當采取克隆而不是new一個對象 定義 原型模式: 用原型實例指定創建對象的種類,并且通過拷貝這些原型創建新的對象 也就是說,…

Java 7#8:測試臺上的NIO.2文件通道

關于新JDK 7功能的另一篇博客文章。 這次我正在寫有關新的AnsynchronousFileChannel類的文章。 我將在兩周內深入分析新的JDK 7功能,并決定連續編號我的帖子。 只是為了確保我不會感到困惑:-)這是我關于Java 7的第七篇文章(我承認–碰巧–這也…

5頁面title樣式修改_認識html:實現網站頁面是這么簡單的一回事

互聯網時代人們通過上網瀏覽信息,打開瀏覽器上網看到豐富的圖文、視頻、音樂等多媒體信息,一系列信息反饋和視覺沖擊之后,您有沒有想過,互聯網這么發達的時代,您覺得花一點點時間學會做個網站頁面不真香?概…

iOS指南針

前言: 這個小項目使用到了CoreLocation框架里面的設備朝向功能,對CoreLocation感興趣的可以翻一下之前的文章 在另一個博客站有朋友發現一個尷尬的問題(圖片的東西2個方向是不對的),原諒我的大意,趕時間就直…