2013-03-15 27 views
13

Kullanıcı etkileşimine dayanan bir veritabanında değerleri artırması gereken bir web sitem var. Kullanıcılar bir düğmeyi tıkladığında, değeri artıran bir php komut dosyası denir. Bu betiği dış komut dosyalarından erişilmekten korumak istiyorum. Şu anda bir kullanıcı kendi web sayfasını veritabanındaki değeri havaya uçurmak için tekrar tekrar aynı php dosyasına vuran bir javascript işlevi ile yazabilir.Yerel sunucuda sadece ajax üzerinden PHP dosyasına erişime izin ver

jQuery(function(){ 
$('.votebtn').click(function(e){ 
    var mynum = $(this).attr('id').substring(0,5); 
    $.ajax({ 
      url:"countvote.php", 
      type:"GET", 
      data: { 
       thenum:mynum 
      }, 
      cache: false, 
      success:function(data) { 
       alert('Success!'); 
       } 
      } 
     }); 
}); 
}); 

nasıl 'countvote.php' erişebilirsiniz yerel sunucuda ajax/jquery sadece çağrı böylece onu yapma konusunda giderdim:

İşte artımlı sayı yapar benim jquery kodu? Bu konuda gitmek için doğru yol değilse, php komut dosyasının dış komut dosyaları tarafından kötüye kullanılmasını önleyecek herhangi bir öneriye açığım.

+0

adınızda sadece olanlarda countvote.php erişebilir siteleri kısıtlamak Can ikinci bölümü ile sadece çalışabilir? – user829323

+0

@ user829323 Bu, tarayıcının dışına 'wget' –

cevap

3

$_SERVER['HTTP_X_REQUESTED_WITH']'un xmlhttprequest'a eşit olup olmadığını kontrol edebilirsiniz, ancak bir isteğin AJAX isteği olup olmadığını belirlemek için güvenilir bir yöntem değildir, bunun için her zaman bir yol vardır. Ancak, yanlış girilen URL'ler, tarayıcılar vb. Gibi rastgele isabetlerden sizi korur.

2

Gerçekten böyle bir% 100 yöntemi yoktur. AJAX istekleri her zaman bir müşteriden gelecektir. GET yerine POST isteklerini kullanın ve bu, tüm sorunları engellemeye yardımcı olacak, ancak bunları tamamen durdurmayacak ve php'nizde tüm istekleri reddedecektir.

+2

ile işlem yapmak için önemsizdir Ne yazık ki bu bir seçenek değil. IOS 6'nın JQuery/AJAX'dan POST isteği sonuçlarını önbelleğe almanın zor yolunu keşfettim. Böylece mobil cihazlarda yanıt bilgisi yanlıştır. – LoneWolfPR

+0

Bunu düzeltmek için bu cevabı kontrol edin. http://stackoverflow.com/questions/12506897/is-safari-on-ios-6-caching-ajax-results – castis

+1

Yanılmıyorsam, üstbilgi denetimini kullanmak için JQuery 1.5 veya üstü sürümlere ihtiyacınız olduğunu düşünüyorum. Ne yazık ki bunu desteklemeyen 1.3 kullanarak hamstung. Şu anda güncelleme yeteneğine sahip olmadığım bir CMS'nin parçası. Yine de teşekkürler. – LoneWolfPR

33

Çözüm iki adım gerektirir.

Öncelikle ajax dosyası, bu kodla yalnızca ajax isteğinde erişime izin vermelidir.

define('IS_AJAX', isset($_SERVER['HTTP_X_REQUESTED_WITH']) &&  strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest'); 
if(!IS_AJAX) {die('Restricted access');} 

İkincisi ajax dosya komut $ _SERVER [ 'HTTP_REFERER'] ile diyoruz dosyanın adına erişimi vardır. Böylece, yalnızca ana makine sunucusunda erişimi kısıtlayabilirsiniz.

$pos = strpos($_SERVER['HTTP_REFERER'],getenv('HTTP_HOST')); 
if($pos===false) 
    die('Restricted access'); 

Belki kod

+1

bu gerçekten iyi bir fikir. ve çalışıyor. – Kiwy

+3

Bu işe yaramıyor. Herkes istediği değerlere sahip bir X-Talep Edilen ve Yönlendirici üstbilgisini gönderebilir. – Quentin

+0

@Quentin, yani gereksinimleri çözmek için çözümünüz nedir? Initalsite verilen bir sır? –

İlgili konular