The Situation
Ben geleneksel LAMP yığınını (RACKSPACE bulut Windows ve LAMBA yığınları hem vardır) kullanarak Rackspace Cloud üzerinde bir müşteri için bir video eğitim sitesi oluşturma. Müvekkilim onlara ulaşmak için para ücretleri gibi ben bu sitede hizmet ediyorum video ve diğer medya dosyalarını korunması gerekir. Böyle hiçbir DRM veya komik iş aslında biz web kök dışındaki dosyaları depolamak ve PHP ile isteği çalıştırmak için mod_rewrite kullanarak dosyalara erişmek mümkün önce kullanıcının kimliğini doğrulamak için PHP kullanmak vardır.
Yani kullanıcı bu URL bir dosya istediğinde diyelim:
http://www.example.com/uploads/preview_image/29.jpg
Ben o url yeniden yazma mod_rewrite kullanıyorum:
http://www.example.com/files.php?path=%2Fuploads%2Fpreview_image%2F29.jpg
İşte files.php komut basitleştirilmiş bir versiyonu:
<?php
// Setups the environment and sets $logged_in
// This part requires $_SESSION
require_once('../../includes/user_config.php');
if (!$logged_in) {
// Redirect non-authenticated users
header('Location: login.php');
}
// This user is authenticated, continue
$content_type = "image/jpeg";
// getAbsolutePathForRequestedResource() takes
// a Query Parameter called path and uses DB
// lookups and some string manipulation to get
// an absolute path. This part doesn't have
// any bearing on the problem at hand
$file_path = getAbsolutePathForRequestedResource($_GET['path']);
// At this point $file_path looks something like
// this: "/path/to/a/place/outside/the/webroot"
if (file_exists($file_path) && !is_dir($file_path)) {
header("Content-Type: $content_type");
header('Content-Length: ' . filesize($file_path));
echo file_get_contents($file_path);
} else {
header('HTTP/1.0 404 Not Found');
header('Status: 404 Not Found');
echo '404 Not Found';
}
exit();
?>
The Problem
Bana bu benim için mükemmel çalışır söyleyerek başlayalım. Yerel test makineleri üzerinde bir cazibe gibi çalışır. Ancak bir kez bu çalışma durur bulut konuşlandırıldı. Bazı ayıklama sonra çıkıyor bu bulut bir istek. JPG,. PNG veya. SWF (genellikle statik medya dosyalarının yani uzantıları.) Isteği Vernik adında bir önbellek sistemine yönlendirilir gibi bazı dosya uzantıları varsa. Bu yönlendirme sonuç zaman bütün bu süreç oturumu mevcut değil benim PHP komut dosyası yapar olmasıdır.
Hatta Vernik atlanır bir sorgu parametresi ve PHP komut dosyası eklerseniz. PHP URL uzantısı değiştirmek veya eğer oturumu alabilirsiniz. Sorun yok değil mi? Ben sadece benim isteklerine anlamsız bir sorgu parametresi ekleyeceğiz!
Here is the rub: Ben bu sistem sayesinde hizmet ediyorum ortam dosyaları sıfır kontrole sahip derlenmiş SWF dosyaları ile talep edilmektedir. Bunlar üçüncü parti yazılım tarafından oluşturulan ve onlar talep URL'leri ekleme veya değiştirme umudumuz yok.
Ben bu konuda herhangi bir başka seçenekler var mı?
Update: Ben Rackspace desteği ile bu davranış doğrulanmış ve onlar bu konuda yapabileceği bir şey yok dedi dikkat etmelisiniz.