2012-07-09 10 views
5

Czy zmienna PHP $ _SERVER ['SERVER_NAME'] może być sfałszowana lub sfałszowana? Miałem zamiar użyć tego jako środka bezpieczeństwa dla wysyłania formularzy. Sprawdziłbym, czy zmienna jest nazwą mojej witryny (www.example.com). Wiem, że HTTP_REFERRER można sfałszować, ale nie byłem tego pewien.

Dzięki!

+1

Bez względu na to, co zawsze będzie takie samo ... Twój serwer. Nie serwer, z którego pochodzi żądanie. – sachleen

Odpowiedz

2

Nie da się podrobić, persay, ale to zawsze będzie przywrócić nazwę witryny. Jest to przydatne, jeśli uruchamiasz wiele witryn z tego samego skryptu i, na przykład, używasz innej bazy danych w zależności od podanej nazwy hosta.

PHP documentation mówi:

'SERVER_NAME' 
    The name of the server host under which the current script is executing. If the script is running on a virtual host, this will be the value defined for that virtual host. 
+3

Mylicie 'SERVER_NAME' z' HTTP_HOST'. – BalusC

3

Przez gościa zwykle nie można go sfałszować. Ale podejrzewam, że chciałbyś wymusić na pewnej maszynie SERVER_NAME licencjonowanie skryptów, aby mogły być używane tylko przez określone domeny. W tym przypadku odpowiedź brzmi: tak, ta zmienna może być na pewno podrobiona.

Powód jest prosty, serwer ustawia tę wartość. W większości przypadków PHP będzie działało jako moduł Apache, ale czasami masz inne moduły Apache, czasami masz PHP działające w trybie CGI z NGINX lub IIS, czasami masz nawet PHP działające jako rozwidlenie CLI jako proces potomny przez niestandardowe -budowany serwer wdrożony w chmurze. Te serwery byłyby odpowiedzialne za ustawienie tej zmiennej.

Co więcej, zawsze jest ręczne przypisanie.

$_SERVER['SERVER_NAME'] = ... // this can go above all your scripts 
Powiązane problemy