Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/237.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用symfony实现安全的文件管理_Php_File Upload_Symfony1_Download - Fatal编程技术网

Php 使用symfony实现安全的文件管理

Php 使用symfony实现安全的文件管理,php,file-upload,symfony1,download,Php,File Upload,Symfony1,Download,默认情况下,symfony会将文件上载到web/upload文件夹,因此任何人都可以访问这些文件。我需要检查每个文件请求的用户凭据。我应该怎么做呢?将您的上传移到webroot之外,就像在/data/uploads中一样。在这种情况下,您需要将其放入ProjectConfiguration文件中: sfConfig::set('sf_upload_dir' => sfConfig::get("sf_data_dir") . DIRECTORY_SEPARATOR . 'uploads');

默认情况下,symfony会将文件上载到web/upload文件夹,因此任何人都可以访问这些文件。我需要检查每个文件请求的用户凭据。我应该怎么做呢?

将您的上传移到webroot之外,就像在/data/uploads中一样。在这种情况下,您需要将其放入ProjectConfiguration文件中:

sfConfig::set('sf_upload_dir' => sfConfig::get("sf_data_dir") . DIRECTORY_SEPARATOR . 'uploads');
如果您总是使用sf_upload_dir指定上载文件夹,那么您的所有文件都将保存在那里

解决方案的第二部分需要一个新操作,该操作获取文件名,检查用户是否有权访问该文件,并返回:

  • 要么是403错误
  • 或者在设置了正确的内容类型和内容长度标题后,通过
    readfile()
    查看文件内容

将您的上传移动到webroot之外,就像在/data/uploads中一样。在这种情况下,您需要将其放入ProjectConfiguration文件中:

sfConfig::set('sf_upload_dir' => sfConfig::get("sf_data_dir") . DIRECTORY_SEPARATOR . 'uploads');
如果您总是使用sf_upload_dir指定上载文件夹,那么您的所有文件都将保存在那里

解决方案的第二部分需要一个新操作,该操作获取文件名,检查用户是否有权访问该文件,并返回:

  • 要么是403错误
  • 或者在设置了正确的内容类型和内容长度标题后,通过
    readfile()
    查看文件内容

您可以像调用任何其他函数一样调用它-没有“symfony”方法来执行此操作。我的意思是,它直接写入输出缓冲区,如果您只是在实际操作中调用它-那么symfony将无法正确输出头。我是否必须用ob_start()捕捉输出并将其传递给$this->getResponse()->setContent()?内容类型和内容长度都是标题,它们不应该受到
readfile
的影响。使用readfile(根据对的注释)会产生很大的问题。是否有办法将文件保留在web目录中并仍然能够管理它们?是的-您可以使用.htaccess文件来阻止直接访问这些文件。无论如何,您都需要一个操作来检查权限。您像调用任何其他函数一样调用它-没有“symfony”方法来执行此操作。我的意思是,它直接写入输出缓冲区,如果您只是在操作中调用它-那么symfony将无法正确地输出头。我是否必须用ob_start()捕捉输出并将其传递给$this->getResponse()->setContent()?内容类型和内容长度都是标题,它们不应该受到
readfile
的影响。使用readfile(根据对的注释)会产生很大的问题。是否有办法将文件保留在web目录中并仍然能够管理它们?是的-您可以使用.htaccess文件来阻止直接访问这些文件。无论如何,您都需要一个操作来检查权限。