나는이 질문을 여러 번 보았지만 강제로 다운로드 할 수있는 코드로 많은 작업을해야하며, 그로 인해 발생할 수있는 "보안"문제에 대해 아무 것도 발견하지 못했습니다. 나는 사람들이 로그인 후 물건을 다운로드하기를 원한다. (hotlinking을 막기 위해). htaccess와 PHP로이 문제를 해결하려고합니다. PHP 파일은 로그인을 검사하고 OpenId (무언가)도 가지고 있습니다.안전하게 다운로드 할 수있는 파일
$url = "{$_SERVER['DOCUMENT_ROOT']}/myfolder/{$myfile}";
if(!is_file($url)) {
//whatever
}elseif (is_file($url)){
switch($url['extension']) {
case 'pdf': $ext = 'application/pdf'; break;
case 'zip': $ext = 'application/zip'; break;
case 'pps': $ext = 'application/vnd.ms-powerpoint'; break;
case 'pptx': $ext = 'application/vnd.openxmlformats-officedocument.presentationml.presentation'; break;
case 'docx': $ext = 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'; break;
default: $ext = 'application/force-download';
}
header('Pragma: public');
header('Expires: 0');
header("Content-Type: application/force-download");
header("Content-Type: application/octet-stream");
header("Content-Type: application/download");
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Cache-Control: private',false);
header('Content-Type: '.$ext);
header('Content-Disposition: attachment; filename="'.basename($url).'"');
header('Content-Transfer-Encoding: binary');
header('Connection: close');
readfile($url);
exit();
}
Myfolder
가 모두 거부 htaccess로 보호되어 다음과 같이 다운로드 부분이다. 나는 이것이 충분히 안전한지 불확실하다. 그래서 나는 끔찍하게 불안전 한 것을하기 전에 내가 묻는다. 나는 그 사람들이 "당신의 소중한 스크립트"를 다운로드 할 수 있다는 것을 읽었지 만 나는 (PHP는, 내가 아는 한, 다운로드 할 수 없다) 어떻게 보이지 않는다. 제가 XSS를 제외하고 심각한 취약점이 있다고 생각합니까? 그렇다면이 페이지의 어딘가에서 처리되고 있습니까? 미리 감사드립니다.
이 스크립트가 작동한다고 생각하지 않습니다. 헤더 앞에는 어떤 것을 울릴 수 없습니다. – Dexa
죄송합니다. 디버그되었습니다. 하지만 실제로 불행하게도 작동합니다. – tattvamasi