PHP - istek belirli bir dosya geliyor olmadığını belirlemek için nasıl

7 Cevap php

Ben SERVER_B üzerinde SERVER_A ve fileB.php üzerinde fileA.php var

fileB.php bunun içeriğinden fileA.php bir kıvırmak isteği yapar

Nasıl fileA.php istek fileB.php itibaren özellikle geldiğini belirleyebilirsiniz?

-

I ['SCRIPT_NAME'] Birisi fileB.php ya da genel olarak herhangi bir dosya içine gidin ve sadece $ _SERVER yapabilirsiniz beri fileA.php için fileB.php yılında $ _SERVER ['SCRIPT_NAME'] gönderiyor ama düşünmeye = 'fileB.php edildi '; gerçekten bu güvenli değil.

Peki nasıl isteği farklı bir sunucu üzerinde belirli bir dosya geldiğini, güvenlik nedenleriyle, belirleyebilirsiniz?

7 Cevap

Sen güvenilir olamaz. Eğer bir HTTP başlığı ayarı ve diğer tarafta doğrulayarak deneyebilirsiniz; o-kanıt aptal değil, ama çok daha iyi.

Çünkü beyanı, Impossible:

"since someone can go into fileB.php"

Neden gizli bir belirteç kurmak, ve alıcı ucunda bunu doğrulamak değil?

// fileB.php

$url = "http://example.com/fileA.php"
     . "?from=fileB"
     . "&token=" . sha1('fileB' . 'myaw3som3_salt!')
;
// then make the cURL request.


// fileA.php
if (sha1($_GET['from'] . 'myaw3som3_salt!') != $_GET['token']) {
    die();
}

Bu burada basit bir örnek, ama fikir olsun.

Eğer sunucu dışında istemek kez gerçekten hiçbir kontrole sahip. Diğer sunucuda fileA adam-in-the-orta halli fileB olasılığı varsa, güvenlik modelini yeniden gözden geçirmek gerekir. Özel durumu nedir?

Bir yolu kontrol etmek olacaktır

$_SERVER['HTTP_REFERER']

PHP değişken, ancak bu yüzden tam olarak güvenilir olamaz doldurmak için tarayıcının karardır.

3. parti fileB.php erişimi varsa biraz yapılabilir. REFERER size hiçbir koruma sağlar. REMOTE_ADDR parodi olarak önemsiz değildir, bu sana isteği okunaklı bir güvence verebilir.

Burada ben ne yapardım, nickf nokta olduğunu düşünüyorum, ama sadece onun cevabını üzerinde biraz genişletmek için:

  • Sunucu1'i fileB.php Sunucu2'ın fileC.php istekleri
  • Sunucu2'ın fileC.php bir zaman damgası ile bir dosya veya veritabanında depolar, rasgele üretilen bir tuz verir
  • Sunucu1'i fileB.php Sunucu2'ın fileA.php talep, istek ve vücut olarak rasgele tuz eklenir ve tekrar karma karma önceden yapılandırılmış bir anahtar, gönderir (örneğin sha1 (sha1 ('parolam'). $ tuz))
  • Bir tuz son 60 saniye içinde üretilmiş olup olmadığını bir hata döndürür değilse fileA.php, denetler
  • fileB.php tarafından gönderilen gibi istek gövdesi ile karşılaştırıldığında bu, bir daha sha1 (sha1 ('mypassword') $ tuzu.) - fileA.php, son rasgele bir tuzu ve önceden yapılandırılmış anahtar ile aynı karma gerçekleştirir. Eğer uyarsa, fileA.php fileB.php erişim verir.
  • fileA.php oluşturulan son tuz siler.