从外部网站root下载(使用href下载?)

时间:2017-08-01 14:29:50

标签: php

我正在处理文件存储,我的设计是从我的数据库中显示有关该文件的数据以及一个带有a href标签的按钮来下载我的文件。当我将存储保存在我的网站根目录中时,我成功完成了所有这些 - 但根据建议,我做了更改。

我现在将我的项目root放在我的C:/驱动器中,但我的存储空间我想在root之外但是我将存储空间保存在我的d:/驱动器中,根据安全性的建议 - 以及我的d:/无论如何,驱动器是我的云存储。从我在网上看到的,这意味着我不能再使用<a href="d:/storage/Username/file download>下载我的文件了!

如果确实如此,您如何从网站外部下载?

如果没有,我如何使用我的href方法克服在root外部下载的安全限制?

谢谢!

2 个答案:

答案 0 :(得分:0)

你可以使用readfile()

是否链接到downloader.php?f = somefile.jpg 使用rewriterules。

在downloader.php中的

执行类似

的操作
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

options = Options()
options.add_argument("start-maximized")
options.add_argument("disable-infobars")
options.add_argument("--disable-extensions")
driver = webdriver.Chrome(chrome_options=options, executable_path="C:\\Utility\\BrowserDrivers\\chromedriver.exe")
driver.get("https://www.footpatrol.co.uk/footwear/274670-nmd_r2-pk.html")
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//ul[@class='attribute_value_list']//a[@href='181']")))
size = driver.find_element_by_xpath("//ul[@class='attribute_value_list']//a[@href='181']")
size.click()
driver.find_element_by_xpath("//button[@id='add-to-basket']").click()

我添加了login_check(),因为你提到了一些安全问题。 此外,建议检查参数是否有非法字符(特别是斜杠) 内容类型可能因所选文件而异

答案 1 :(得分:0)

得到它的工作,感谢Ivo P.的开始。

我开始发送到download.php我的文件名,文件扩展名和文件路径都用*分隔(*不是允许的文件名)。一个例子是:

download.php?f=myTextFile*txt*d:/storage/test/myTextFile.txt

然后,我通过*爆炸$ _GET [&#39; f&#39;],确保数组大小为3,然后设置内容标题:

$file_info = explode("*", $_GET['f'], 3);
if(is_file($file_info[2]) && count($file_info) == 3) {
    header('Content-Description: File Transfer');
    header("Content-Type: " . mime_content_type($file_info[2]));
    header('Content-Disposition: attachment; filename="'.$file_info[0] . '.' .$file_info[1].'"');
    header('Expires: 0');
    header('Pragma: public');
    readfile($file_info[2]);
}

这对我来说是可行的解决方案!在txt,jpg和exe上测试 - 效果很好。我还有其他个性化的项目测试,以确保&#39; f&#39;是有效的(所以用户不能通过去地址栏并制作一堆东西搞砸了,请参阅real_escape_string),但这是它的要点!

感谢Bjorn:请记住这允许完全访问服务器,确保你个性化你自己的download.php接受你自己格式的输入(否则任何人都可以偷你的php文件,js文件,等等) / p>