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
package com.servlet; import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URLDecoder;
import java.net.URLEncoder; import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; public class DownloadServlet extends HttpServlet { private static final long serialVersionUID = 1L; public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String filename = request.getParameter("id");
String fileUrl = request.getServletContext().getRealPath("").replace("\\", "/");
fileUrl = fileUrl + "/files/document/" + filename;
System.out.println("fileUrl:"+fileUrl);
String rname = new String(filename.getBytes("utf-8"));
System.out.println("begin:"+rname);
rname = URLEncoder.encode(rname);
System.out.println("end:"+rname);
response.addHeader("Content-Disposition", "attachment;filename="+rname);
response.setContentType("application/octet-stream"); File file = new File(fileUrl);
InputStream is = new BufferedInputStream(new FileInputStream(file));
byte[] buffer = new byte[is.available()];
is.read(buffer);
is.close(); OutputStream os = new BufferedOutputStream(response.getOutputStream());
os.write(buffer);
os.flush();
os.close();
} public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { } }
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即可。
HttpClient使用之下载远程服务器中的文件(注意目录遍历漏洞)的更多相关文章
- centos7远程服务器中redis的安装与java连接
1.下载安装redis 在远程服务器中你想下载的位置执行以下命令来下载redis文件到服务器中 $ wget http://download.redis.io/releases/redis-4.0.9 ...
- 【实操日记】使用 PyQt5 设计下载远程服务器日志文件程序
最近通过 PyQt5 设计了一个下载服务器指定日期日志文件的程序,里面有些有意思的技术点,现在做一些分享. PyQt5 是一套 Python 绑定 Digia Qt5 应用的框架,是最强大的 GUI ...
- shell实践(一)---判断远程服务器中文件是否存在
1.判断一个文件的常见形式为 if [ -f filename ] #此处有-e和-f的区别 注意: 1)中括号之间的空格: 2)filename最好是绝对路径,在判断远程服务器中文件是否存在时尤为 ...
- 附加进程 到远程服务器中Docker容器内 调试
很多时候,我们在本地开发过程中程序运行很正常,但是发布到线上之后由于环境的原因,可能会有一些异常.通常我们会通过日志来分析问题,除了日志还有一种常用的调试手段就是:附加进程. VS中的附加进程非常强大 ...
- Pycharm连接远程服务器并保持文件夹同步
pycharm版本2021 服务器版本 Ubuntu 18 1.连接远程服务器 xxx这部省略了,因为之前就已经连接上了hh,后面用到再补充. 2.保持文件夹同步 1.首先在本地(windows环境创 ...
- 用java 代码下载Samba服务器上的文件到本地目录以及上传本地文件到Samba服务器
引入: 在我们昨天架设好了Samba服务器上并且创建了一个 Samba 账户后,我们就迫不及待的想用JAVA去操作Samba服务器了,我们找到了一个框架叫 jcifs,可以高效的完成我们工作. 实践: ...
- xshell终端向远程服务器上传文件方法
centos-7下在本地终端里向远程服务器上传文件,在命令行中执行的软件. 安装命令如下: 在终端里输入如下命令: 会弹出如下窗口 选择你要上传的文件即可上传成功.
- Java实现打包下载BLOB字段中的文件
概述 web项目的文件打包下载实现:servlet接收请求,spring工具类访问数据库及简化大字段内容获取,org.apache.tools.zip打包. 必要提醒:当前总结是继Java实现下载BL ...
- vs2003 刷新项目失败。无法从服务器中检索文件夹信息
环境: 操作系统:windows server 2003 开发工具:Visual stuadio 2003 FrameWork: 1.1 打开web项目的时候报错 提示 项目刷新失败,无法从服务器 ...
随机推荐
- 软工结对项目之词频统计update
队友 胡展瑞 031602215 作业页面 GitHub 具体分工 111500206 赵畅:负责WordCount的升级,添加新的命令行参数支持(自定义输入输出文件,权重词频统计,词组统计等所有新功 ...
- 11th 本周工作量及进度统计
本周PSP: C(类别) C(内容) S(开始时间) ST(结束时间) I(中断时间) T(实际时间) 文档 11月30日 回顾5个问题 13:00 13:50 2 48 11月30日 如果重新来过 ...
- 转帖 IBM要推POWER9,来了解一下POWER处理器的前世今生
https://blog.csdn.net/kwame211/article/details/76669555 先来说一下最新的POWER 9 在Hot Chips会议上首次提到的IBM Power ...
- Windows 下面简单的同步文件夹工具
1. 微软自己的工具 下载地址 https://www.microsoft.com/en-us/download/confirmation.aspx?id=15155 2. 安装过程忽略 3. 配置与 ...
- Alpha、伪Beta 发布后,夏一鸣的个人感想与体会
伪Beta发布在4月15日拉开了帷幕,夏一鸣代表OneZero团队上台进行了Account的发布.产品发布成功,但依然存在问题和不足.以下就Alpha.伪Beta 发布谈一谈我自己(夏一鸣)的想法. ...
- Java关于Robot类的使用
利用Robot类实现自动操作,实现效果是运行之后鼠标自动定位到整个屏幕坐标系的(635,454)位置,输入wangtianze package com.wtz.util; import java.aw ...
- DELPHI 数据集在内存中快速查询方法
1.Bookmark var p:pointer; procedure TForm1.Button1Click(Sender: TObject);//加个标签 begin p:=cxGrid1DB ...
- JIRA状态为任务结束,但是解决结果为未解决相关配置
1.JIRA状态为任务结束,但是解决结果为未解决,如下图所示: 2.在工作流->界面->结果处理中进行解决结果的配置(首先确保界面配置中有“解决结果”字段). 3.点击“结果处理”,进行结 ...
- Exploring Pyramids UVALive - 3516 (记忆化DP)
题意:给定一个序列 问有多少棵树与之对应 题目连接:https://cn.vjudge.net/problem/UVALive-3516 对于这一序列 分两种2情况 当前分支 和 其它分支 用df ...
- MT【110】巧设法向量解决距离问题
分析:设面的法向量$n=(x,y,z)$