Niedawno zacząłem kodować mocno obsługiwane skrypty AJAX w PHP, jest tak, że pliki dostępne przez wywołania AJAX również mogą być użyte bezpośrednio, jak to wyłączyć?Dostęp tylko do AJAX
Odpowiedz
Nie można niezawodnie temu zapobiec. Klucz naprawdę nie polega na tym, że ktoś uzyskuje dostęp do tego pliku bezpośrednio jako problem bezpieczeństwa - plan jest możliwy i będziesz w znacznie bezpieczniejszym miejscu.
Niektórzy ludzie mogą polecić kod, który wygląda jak ten (lub podobny):
if(!empty($_SERVER['HTTP_X_REQUESTED_WITH'])
&& strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
// more code here
}
Jednak faktem jest, że nagłówki HTTP mogą zostać sfałszowane dość łatwo i nie są środkiem do zabezpieczania kodu. Podczas testów na obciążonej stronie zauważyłem, że te nagłówki i tak nie są tak niezawodne.
Nie można bezpośrednio zabronić dostępu. Ponieważ zapytanie zawsze można spreparować, aby pasowało do podanych kryteriów.
Jeśli XmlHttpRequest jest używany do kwerendy serwera to dodaje nagłówek, który może być wykryty za pomocą mniej więcej tak:
/* AJAX check */
if(!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
//Do something here
}
Sesji użyte w aplikacji.
Montaż:
Rejestracja witryny w sesji, używam UUID za to.
Ustaw plik cookie o tej samej wartości, którego używasz w sesji.
Wyślij swoje żądanie AJAX z parametrem, który zawiera również tę wartość.
Porównaj wartości z sesji, pliku cookie i parametru.
Jak sugerowali inni ludzie w swoich odpowiedziach, nie jest to możliwe. Wynika to z jednej z podstawowych zasad bezpieczeństwa komputerowego: nigdy nie można ufać klientowi. Właśnie dlatego sprawdzamy wszystkie dane wejściowe od klienta, itp.
Zamiast próbować blokować innym klientom dostęp do twoich usług, zamiast tracić czas na pisanie defensywnych usług internetowych. Co ważne, upewnij się, że złośliwi użytkownicy nie mogą wymsknąć się zastrzykom lub innym atakom za pośrednictwem logiki biznesowej. Np. Upewnij się, że wszystkie wiadomości e-mail są ważne, ludzie nie kupują produktów za ujemne dolary, itp.
O, a fakt, że usługi internetowe są otwarte, to DOBRA RZECZ! Zapewniasz swoim użytkownikom otwarty interfejs API, który jest bardzo czysty! Być może zamiast próbować zablokować swoją społeczność, zaakceptuj ją - daj im trochę dokumentacji, jak połączyć się z twoimi usługami, a oni zdobędą więcej klientów. Zamiast kupować iPhone SDK i spędzać czas na nauce Celu C, może to być jeden z twoich użytkowników.
Jest to możliwe, ale nie jest niezawodne. Poza tym wszystkie ważne punkty –
Może powinieneś użyć techniki XSS-defense, jak przekazanie jakiegoś bezpiecznego klucza wraz z żądaniem ajaxowym. I daj tylko klucz do javascriptu, który tworzy asynchroniczne zapytania wraz z załadowaną stroną.
<script type="text/javascript">
window.csrf_key = '<?php $user->getCsrf(); ?>';
</script>
W tym przypadku nie będzie musiał martwić się o ludzi przechodzących żądań do plików bezpośrednio, tylko jeśli trzymać klucze bezpieczne, użyć postów do wywołania działania i zrobić testów poprawności.
- 1. Dostęp do obiektu DOM po wywołaniu AJAX?
- 2. Zezwalaj na dostęp do pliku PHP tylko przez ajax na serwerze lokalnym
- 3. dostęp do ograniczonej URI odmowa „Kod:” 1012 - domenach Ajax żądania
- 4. Jak ograniczyć dostęp do strony tylko do localhost?
- 5. AJAX: wywoływane jest tylko wywołanie zwrotne błędu
- 6. Dostęp do tylko bezpośredniego poprzedzającego rodzeństwa w xslt
- 7. Ograniczaj dostęp do pliku - czytaj tylko przez PHP
- 8. Serwer SQL: czy możesz ograniczyć dostęp tylko do jednej tabeli
- 9. Jak uzyskać dostęp tylko do iPhone 6 Plus w krajobrazie?
- 10. Tomcat: Ogranicz dostęp do localhost dla/tylko jednej/aplikacji internetowej
- 11. Pozostawić tylko dostęp do urządzenia kamery w HTML5
- 12. Czat Ajax - aktualizacja tylko w przypadku zmiany
- 13. Dostęp dla użytkowników w Jenkins, Jak mogę dać komuś dostęp tylko do wyświetlania zadań
- 14. Jak umożliwić dostęp tylko w kraju
- 15. Dostęp opublikował dane json z ajax w kontrolerze szyn
- 16. Jquery Select2, jak uzyskać dostęp do danych ajax w funkcji on (change)?
- 17. Kanał "tylko do odczytu" tylko do odczytu
- 18. Dostęp do odczytu repozytorium Subversion
- 19. knockout.js zagnieżdżony dostęp do foreach dostęp do własności pętli zewnętrznej
- 20. Widżet Twitter tylko ładować po raz pierwszy na stronie internetowej ajax ajax?
- 21. Dostęp do zmodyfikowanego zamknięcia (2)
- 22. Jak uzyskać dostęp do sesji w webmethod?
- 23. Ograniczać dostęp do zestawu .NET?
- 24. Dynamiczny dostęp do komórki
- 25. Uzyskaj dostęp do danych
- 26. Dostęp do Microsoft.Win32.UnsafeNativeMethods?
- 27. dostęp do obsługi zdarzeń
- 28. Dostęp do folderu WP8
- 29. Ogólny dostęp do DbContext
- 30. Dostęp do zmiennych statycznych
Spot na. Alternatywnie możesz przekazać parametr (np. '? Ajax'), ale jest to jeszcze łatwiejsze do sfałszowania. –