it-swarm-tr.com

Bir uzman kullanıcının ajax işlevlerimi çağırmasını nasıl önleyebilirim?

Bir dizi işlevi gerçekleştirmek için ajax çağrıları kullanan bir sitem var. Web tarayıcısını bir komut dosyasına geri çağırıyorlar - ajax.php. Verileri iletmek için post verilerini kullanıp ajax betiğinin arayabileceği komutları sınırlandırsam da, kullanıcıların siteyi manipüle etmek için ajax çağrılarını aldatmasını engelleyen hiçbir şey yoktur. Kullanıcıların aramaları aldatmalarını önlemenin bir yolu var mı? Bir ajax çağrısının aslında başka bir komut dosyasından veya siteden değil, web sitemden gelmesini sağlamanın bir yolu var mı?

Yoksa sadece php betiğindeki sınır koşullarını kontrol etmem ve kullanıcıların izin vermeyecekleri şeyleri sahtecilik yapmalarını engellemem gerekir, ancak izin verilecekleri yerlere girmelerine izin vermem.

12
Daniel Bingham

Bunu güvenilir bir şekilde yapmanın bir yolu olduğunu sanmıyorum;.

Sayfanızdan aramayan basit bir insan bloğu istiyorsanız, yönlendireni kontrol edebilir, bir çerez kullanabilir veya belirli bir süre sonra sona eren arama sayfası tarafından gönderilen rastgele bir gizli alan ekleyebilirsiniz. Ancak, kullanıcı gerçekten belirlenirse, bunlar taklit etmek kolaydır.

12
delete

Kısacası hayır. Bir URL’ye GET veya POST üzerinden yapılan herhangi bir istek, herhangi bir yazılım kullanan herkes tarafından yapılabilir. Aslında, bir AJAX isteği, URL’yi doğrudan yüklemekten gerçekten farklı değildir; ikincisi dışında, döndürülen veriler bir web sayfası gibi tarayıcıda gösterilmesi dışında.

Javascript doğrulama yapsanız da yapmasanız da, sunucudaki gönderilen verileri her zaman doğrulamanızın nedeni budur.

Sunucu tarafı betiğinin ne yaptığı ve neyin yanlış gidebileceği tam olarak belli değil, ancak kullanıcılar betiğinizi kötü verilerle çağırarak "siteyi manipüle edebiliyorsa" Yanlış Yapıyorsunuz demektir.

Muhtemelen en iyi çözüm, bir tür kimlik doğrulama yöntemini tanıtmak olacaktır.

6
DisgruntledGoat

Yani temelde ajax.php dosyasını sadece AJAX isteklerine cevap verecek şekilde sınırlamak mı istiyorsunuz?

Php uzmanı değilim, ancak verilen bir isteğin AJAX veya "normal" bir tarayıcı isteğinden $_SERVER['HTTP_X_REQUESTED_WITH'] değerini kontrol ederek gelip gelmediğini belirlemek mümkün gibi görünüyor.

Kaynak

3
theycallmemorty

Başkasının işaret ettiği gibi ... ajax çağrıları sadece $ _GET veya $ _POST alıcısıdır, bu yüzden yaklaşımım her zaman sadece herhangi bir eylem sayfasını yaptığım gibi davranmak ve girdiyi filtrelemek/sterilize etmek olmuştur. Örneğin, bir ay gibi beklediğiniz gibi küçük bir çeşitlemeniz varsa ve bunun her zaman "Jan, Feb, Mar ..." biçiminde olduğunu biliyorsanız, beklenen değerlerin bir dizisini ayarlayabilir ve buna karşı süzebilirsiniz. Eşleşmeyen her şeyi yakala ve isteğe bağlı olarak "Bzzt ... oynadığın için teşekkürler ..." gibi bir şeyi geri at.

Ajax betiğimin bir form gönderiminden daha güvenli olması gereken bir örnek düşünemiyorum.

HTH

1
digit1001

Bence çözümünüzün büyük bir bölümü belirli bir kullanıcı parmak izinden elde edilen trafik sınırlaması olacaktır. Belki bir IP adresi, Kullanıcı Ajan dizesi ve gönderilen veriler bir karma.

Ayrıca, ajax'ı çağıran sayfayı ajax'a döndürülen verileri daha yakından bağlamak yardımcı olabilir. Bu nedenle, söz konusu sayfada, sayfa yüklenirken X oturumu için iyi bir oturum anahtarı gönderin; her bir ajax talebi için, JavaScript'inizin bu anahtarı geri göndermesi gerekir veya ajax bir hata döndürür. Sayfanız X+1 ajax çağrılarına bastıktan sonra, kullanıcıyı yeni bir oturum göndermeden önce bir miktar işlem (zorlu üyelerden belki bir mousemove veya tap etkinliği gibi) yapmaya zorlar kabloyu (orijinal ajax'taki bant dışı) aşağıya bastırın ve işlemi tekrar başlatın.

Düşündüğüm kadarıyla, probleminizin bir kısmının gönderilen parametrelerin gevşek doğrulanması olabilir. Eğer insanlar sadece gönderilen parametrelerle oynayabilir ve geçerli verileri geri alabilirlerse, bunu daha da zorlaştırın. Bunun nasıl yapılacağı, müşteri tarafından ne tür değerler gönderildiğine ve kötü bir aktörün kötü değerler göndererek ne tür bir yaramazlık yapabileceğine bağlıdır.

0
artlung