Сделать сокет принимать запросы только от указанных c клиентов - PullRequest
0 голосов
/ 06 апреля 2020

У меня есть сервер, который обрабатывает запросы от клиента к базе данных sql. Сервер принимает запросы и выдает ответы в json. Я написал код для сервера и клиента, и все работает. Хотя это только для внутреннего инструмента, у меня есть опасения, что некоторые люди могут попытаться обойти клиента и отправить свои собственные сообщения json на сервер, чтобы потенциально манипулировать данными в базе данных sql.

Я не гуру безопасности, поэтому вот мой вопрос. Каков правильный метод для go о том, чтобы сервер принимал запросы только от клиента, которого я написал, независимо от компьютера или IP-адреса, на котором он работает?

Сначала я подумал, что мне следует шифровать сообщения между сервером и клиентом, поэтому, если кто-то попытается подделать соединение с неавторизованным клиентом, у него не будет надлежащего шифрования. Я также понимаю, что должен поставить аутентификацию на стороне сервера, но это означает передачу учетных данных, так что в любом случае сообщения должны быть зашифрованы. Если есть более приемлемый способ сделать это, я хотел бы знать. Если нет, ссылки на учебники будут оценены.

Как указано в тегах, это на linux в c ++. Хотя я уверен, что, вероятно, есть какая-то библиотека с открытым исходным кодом, которая делает именно то, что я хочу во всех вещах, я довольно ограничен в отношении того, какие библиотеки я действительно могу использовать.

Спасибо!

Ответы [ 2 ]

0 голосов
/ 07 апреля 2020

Я представляю вам некоторые меры фильтрации и защиты более низкого уровня, которые будут дополнять другие программные меры (TLS, SSL, ...)
Поскольку сервер является локальным, доступ будет возможен только локальным клиентам. Это позволяет применять фильтрацию по:

  • IP-адресу
    , когда клиент подключается (с помощью функции accept() вашего сервера), у вас есть структура с указанием IP address вашего клиента. Вы можете отклонить , если IP-адрес отсутствует в списке авторизованных IP-адресов.

  • Имя хоста
    Если DHCP активирован, вы можете использовать команду nslookup для получения имени хоста (имени машины). Вы можете отклонить соединения, которые приходят от имени хоста, который не принадлежит вашему списку доверенных.

nslookup xxx.yyy.zzz.www  // Give you the hosname of adresse  

enter image description here

  • Ма c адрес
    С помощью arp вы можете получить MA C адрес (физический) сетевой карты Клиента. Вы можете отклонить его, если его адрес MA C не принадлежит вашему списку доверенных лиц.
arp -a  

enter image description here

Замечания

  • This требует от вас явного управления списками доверия: IP-адресов, MA C, имени хоста, ...
  • Я напоминаю, что эти меры могут применяться только в локальной сети и могут применяться в качестве дополнения к другим протоколы безопасности softwar
0 голосов
/ 06 апреля 2020

Стандарт де-факто для защиты сетевой связи: TLS (безопасность транспортного уровня). Он шифрует и подписывает поток TCP без фактического обмена закрытыми ключами по сети. Это предотвращает атаки MITM и повторного воспроизведения и позволяет проверить подлинность сервера и / или клиента, либо проверив, что их сертификат подписан доверенной стороной (CA), либо просто сохранив его sh (отпечаток пальца). заранее. В качестве альтернативы TLS может использоваться только для шифрования трафика c и простого пароля для аутентификации клиентов.

Существует множество библиотек с открытым исходным кодом, которые реализуют TLS. Один из популярных OpenSSL .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...