Korzystanie z przekazywania proxy jest rzeczywiście najłatwiejszym i najbardziej zalecanym rozwiązaniem. Ma także tę zaletę, że filtruje okropnie nieprawidłowe żądania, zanim dotrze do twojego samouka serwera.
Jeśli twoja aplikacja używa adresu IP użytkownika do czegoś, pamiętaj, aby pobrać go z dowolnego nagłówka, którego używa twój serwer sieciowy (X-Client-IP
itd.). Możesz to jednak zrobić tylko w przypadku żądań, które naprawdę pochodzą z Twojego serwera internetowego, w przeciwnym razie użytkownicy mogą podszyć swój adres IP. Możesz to zrobić, sprawdzając, czy żądanie pochodzi z twojego adresu IP i tylko sprawdzasz nagłówek w tym przypadku lub po prostu przypisuj powiązanie aplikacji do localhost.
Innym rozwiązaniem byłoby przyznanie temu programowi zdolności CAP_NET_BIND_SERVICE
. To wymaga, aby root używał setcap cap_net_bind_service=ep /path/to/the/executable
- ponieważ flaga jest przechowywana w atrybucie systemu plików, zostanie utracona podczas kopiowania pliku do innego systemu lub rekompilacji aplikacji.
Oczywiście można również ustawić program jako root, a następnie przełączyć się do nieuprzywilejowanego użytkownika zaraz po wywołaniu bind()
. Jednak w zależności od tego, jak działa twój program i co robi, może to nie być dobry pomysł - na przykład, jeśli z jakiegoś powodu musi zamknąć i ponownie otworzyć gniazdo nasłuchu, konieczne będzie pełne ponowne uruchomienie procesu.
+1 dla możliwości, chociaż nie są one przenośne dla żadnego innego systemu UNIX. – dwalter
Większość osób korzysta z Linuksa. I chyba * BSD ma coś podobnego. – ThiefMaster