Я все еще новичок и самоучка в области сетевых технологий, поэтому, пожалуйста, простите меня, если то, что я собираюсь спросить, просто неправильно.
У меня есть веб-приложение на основе JavaScript и PHP, которое обслуживается моим веб-сервером Apache.
Я реализовал систему входа в систему на PHP, и теперь клиенты могут получить через нее доступ к моему приложению. При входе в систему приложение обслуживает некоторые веб-службы, которые пользователи не могли видеть, пока не вошли в систему. Ну, теоретически ...
Действительно, на данный момент, если пользователь знает прямой URL-адрес этих служб (который может быть получен, например, через веб-консоль), он / она может получить доступ к ресурсу, независимо от того, вошел ли он / она в систему.
Веб-службы создаются программой CGI.
Я хотел бы найти способ защитить эти службы, чтобы никто, кроме моего веб-приложения (а еще лучше, также зарегистрированных пользователей) не мог получить к ним доступ.
Я думал об обратном прокси-сервере, но, поскольку я новичок в этом (пока я делаю это только для того, чтобы научиться) и никогда не пытался его реализовать, я не совсем уверен, что это правильный путь.
Итак, я сделал иллюстрацию, показывающую, что я имею в виду (надеюсь, что это понятно). Будет ли это (один) правильный способ решить мою проблему?
Некоторая информация:
mysite.com
и для доступа к веб-службе URL-адрес похож на mysite.com/cgi-bin/...
Очевидно, я решил реализовать другое решение: HTTP Basic Auth.
Я в основном следил это руководство и:
sudo apt-get update
sudo apt-get install apache2-utils
Создал .htpasswd
файл с пользователем и паролем в /etc/apache2
папка
sudo htpasswd -c /etc/apache2/.htpasswd <my_user>
Изменил конфигурацию моего виртуального хоста, добавив эти строки (в смелый)
<Directory "/usr/lib/cgi-bin/">
AuthType Basic
AuthName «Запрещенный контент»
AuthUserFile /etc/apache2/.htpasswd
AllowOverride All
Options +ExecCGI -MultiViews +FollowSymLinks
Order allow,deny
Allow from all
AddHandler fcgid-script .fcgi
Требовать действительного пользователя
</Directory>
sudo systemctl restart apache2
А теперь что происходит:
Очевидно, все по протоколу SSL / TLS.
Все идет нормально. Теперь мне нужно реализовать способ не запрашивать учетные данные защищенного ресурса, когда пользователь входит в мое приложение, но это другая проблема.