Geçenlerde ağır AJAX şey nasıl devre dışı bırakılacağı, AJAX çağrıları tarafından erişilen dosyaları doğrudan da kullanılabilir olduğunu, PHP komut desteklenen kod başladı?
Sen güvenilir Bunu önlemek olamaz. Anahtarı gerçekten bir güvenlik sorunu olarak doğrudan bu dosyaya erişen birisi dikkate değil - bu mümkün olduğu için planı ve size çok daha güvenli bir yerde olacaktır.
Bazı insanlar bu (veya benzeri) gibi görünüyor kodu önerebilir:
if(!empty($_SERVER['HTTP_X_REQUESTED_WITH'])
&& strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
// more code here
}
Ancak, işin gerçeği HTTP başlıklarını oldukça kolay sahte ve kod güvence aracı değildir olmasıdır. Yoğun bir sitede benim test bir süre önce ben bu başlıklar zaten aslında güvenilir olmadığını fark ettim.
Diğer insanların cevaplarda önerilen gibi, bu mümkün değildir. Bunun nedeni bilgisayar güvenliği ayağı ilkelerinden biri: Eğer müşteri asla güvenemem. Biz müşteri, vb tüm giriş doğrulamak Bu yüzden
Bunun yerine hizmetlerine erişimde diğer müşterilerine engellemeye çalışmakla yerine savunma web hizmetleri yazmaya vakit geçirmek. Anlamı, kötü niyetli kullanıcılar sizin iş mantığı ile enjeksiyonları ya da diğer saldırıları kayma değil emin olun. Ör., Tüm e-postalar insanlar, vb negatif dolar için ürün satın değil, geçerli olduğundan emin olun
Oh, ve web hizmetleri açık olması iyi bir şeydir! Sen çok düzgün, hangi kullanıcılara açık bir API sağlayan ediyoruz! Belki yerine topluluk kilitlemek için çalışmakla bunu benimsemesi - Onlara hizmetleri ile arayüzü için nasıl bazı belgeleri vermek ve onlar daha fazla müşteri yapacağız. Bunun yerine iPhone SDK satın alma ve Objective C öğrenme zaman harcama, kullanıcıların bir olabilir.
Doğrudan erişim izin vermeme hiçbir yolu yok. Bir sorgu her zaman gelip kriterlere uygun hazırlanmış olabilir beri.
XmlHttpRequest sunucusunu sorgulamak için kullanılan ediliyorsa gibi bir şey kullanılarak tespit edilebilir bir başlık ekler:
/* AJAX check */
if(!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
//Do something here
}
Belki ajax isteği ile birlikte bazı güvenli anahtarını ileterek gibi, bazı XSS-savunma tekniği kullanmak gerekir. Ve sadece yüklenen sayfa ile birlikte uyumsuz sorgularını yapan javascript anahtarını verir.
<script type="text/javascript">
window.csrf_key = '<?php $user->getCsrf(); ?>';
</script>
Bu durumda insanların eylemleri çağırmak ve sağlık kontrolleri yapılacak mesajlarını kullanmak, güvenli anahtarları tutmak sadece, doğrudan dosyaları isteklerini geçen hakkında endişelenmenize gerek olmayacaktır.