HttpClient使用之下载远程服务器中的文件(注意目录遍历漏洞)
来源:互联网 发布:sql语句建立数据库 编辑:程序博客网 时间:2024/06/01 09:12
参考文献:
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即可。
阅读全文
0 0
- HttpClient使用之下载远程服务器中的文件(注意目录遍历漏洞)
- PHP远程任意文件读取及目录遍历漏洞
- xshell从远程服务器下载文件目录
- xshell从远程服务器下载文件目录
- Struts2 结合HttpClient 实现远程服务器文件下载
- 文件上传下载中的安全问题(上传漏洞与目录遍历攻击)
- 文件上传下载中的安全问题(上传漏洞与目录遍历攻击)
- 使用ganymed-ssh2-build.jar来操作linux服务器(上传、下载文件,远程创建目录,远程删除文件等等)
- 使用httpclient下载文件
- C#访问远程服务器共享目录下载文件到本地
- 使用PHP遍历目录中的文件
- 遍历目录中的文件
- 一个应该注意的分析点----目录遍历漏洞
- 渗透测试之目录遍历漏洞
- phpBB附件模块HTTP POST注入远程目录遍历漏洞
- ssh之远程文件或目录的上传和下载
- 从远程服务器下载文件
- java下载远程服务器文件
- Kafka使用Java进行Producer和Consumer编程
- Java开发之JSP行为
- 『实践』Java Web开发之分页(ajax)
- Java Web开发之Servlet获取ckeditor内容
- CKEDITOR最新版不能上传图片的解决
- HttpClient使用之下载远程服务器中的文件(注意目录遍历漏洞)
- 『实践』Yalmip+Ipopt+Cplex使用手册
- hdu5781[ATM Mechine] 浅尝期望概率DP
- Android Studio之代码提示快捷键冲突设置
- Android --- 布局结构属性(一)
- 排序算法总结
- Android Studio引用第三方jar包(例如:使用LitePal)
- 『实践』Android之短信验证码(用的Mob短信验证)
- 『记录』Android参考资料