合规解决方案
    要对用户请求数据进行控制。
    在文件存储时,设计文件路径映射关系,如文件ID和存储路径的映射关系,在用户请求下载文件时,在请求参数中携带文件ID,服务器端根据文件ID来获取映射的文件路径,然后将文件内容返回客户端;或在请求文件处直接给出文件路径的链接。
    映射文件路径下载:

    1. protected void doPost(HttpServletRequest request,
    2. HttpServletResponse response) throws ServletException, IOException {
    3. try {
    4. ImageDao imgDao = new ImageDao();
    5. byte data[] = new byte[1];
    6. String imgID = request.getParameter("imgID");
    7. String imgName = imgDao.getImage(imgID);
    8. String imgKey = MD5Encrypt.MD5(imgName);//本地
    9. if (imageCache.containsKey(imgKey)) {
    10. data = (byte[]) imageCache.get(imgKey);
    11. } else {
    12. String imagePath = Consts.IMG_LOCAL_PAHT + imgName;
    13. //没有对该参数进行严格的验证和过滤,就拼接成完整的图片路径
    14. InputStream inputStream = null;
    15. File imageFile = new File(imagePath);
    16. logger.debug(imagePath + " " + imageFile.exists());
    17. if (imageFile.exists() && imageFile.isFile()) {
    18. inputStream = new FileInputStream(imagePath);
    19. int i = inputStream.available();
    20. data = new byte[i];
    21. inputStream.read(data);
    22. inputStream.close();
    23. imageCache.put(imgKey, data);
    24. } else {
    25. ……
    26. }
    27. }
    28. response.setContentType("image/*");//将文件内容输出到客户端
    29. OutputStream outputStream = response.getOutputStream();
    30. outputStream.write(data);
    31. outputStream.close();
    32. }
    1. <a href=“http://xx.xx.xx.xx/upload/file1.jpg”>