Какие риски для безопасности возникают при использовании локального сервера для предоставления браузерного графического интерфейса для программы?

Я создаю относительно простую программу для сбора и сортировки данных, вводимых пользователем. Я хотел бы использовать локальный сервер, работающий через веб-браузер, по двум причинам:

  1. HTML-формы — это простое и эффективное средство сбора необходимой мне информации.
  2. Я хочу иметь возможность запускать программу в автономном режиме и без необходимости управлять рисками безопасности, связанными с доступом к удаленному серверу.

Изменить. Чтобы уточнить, я имею в виду, что приложение должно быть доступно только из локальной сети, а не из Интернета.

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

(В случае необходимости я буду использовать SWI-Prolog для обработки данных. Я также планирую использовать HTTP-пакет SWI-Prolog для сервера, но я готов пересмотреть этот выбор, если он окажется плохой идеей.)

У меня есть два вопроса:

  1. О каких рисках безопасности нужно помнить при использовании локального сервера для этой цели? (Примечание: в моем случае программа, скорее всего, будет иметь дело с очень конфиденциальной информацией, поэтому у меня нет места для какой-либо небрежности в этом вопросе).
  2. Как можно снизить эти риски? (Или, где я должен искать, чтобы узнать, как решить эту проблему?)

Я очень благодарен за любую помощь!


person Shon    schedule 01.10.2013    source источник
comment
Вы можете игнорировать большую часть моего ответа, если у вас ограниченное количество известных пользователей. Просто предложите ему использовать VPN. Ваш сервер не будет доступен для всего мира, но пользователь с паролем сможет подключиться к вашей локальной сети и использовать ваш сервер.   -  person Sergei Lodyagin    schedule 02.10.2013


Ответы (3)


Любое решение сопряжено с рисками безопасности. Можно использовать проверенные годами инструменты и однажды быть взломанным (из собственного опыта). И вы можете заплатить много за решение безопасности и никогда не быть взломанным. Итак, вам нужно всегда сравнивать усилия с отдачей.

По сути, в вашем случае нужно защищать 4 "двери": 1. Авторизация (перехват пароля или, например, неправомерное использование cookies) 2. HTTP-протокол 3. Вход приложения 4. Другие способы доступа к вашей базе данных (не через http, например, по ssh порту со слабым паролем, взяв ваш компьютер или жесткий диск и т. д. В некоторых случаях вам нужно правильно зашифровать том)

1 и 4 не являются специфическими для Пролога, но только 4 имеет некоторую специфику в случае локальных серверов.

Защищать уровень протокола http означает не разрешать запросы, которые могут получить контроль над вашим сервером swi-prolog. Для этой цели я рекомендую установить обратный прокси-сервер, такой как nginx, который может предотвратить атаки на этом уровне, включая некоторые типы DoS. Таким образом, браузер свяжется с nginx, и nginx перенаправит запрос на ваш сервер, если это правильный HTTP-запрос. Вы можете использовать любой другой сервер вместо nginx, если он имеет аналогичные функции.

Вам нужно установить правильный ключ ssl и разрешить ssl (https) на обратном прокси-сервере. Его не должно быть в вашем swi-prolog сервере. Https зашифрует всю информацию и будет связываться с swi-prolog по http.

Подумайте об авторизации. Есть методы, которые очень легко сломать. Вам нужно изучить эту тему, там много информации. Я думаю, что это самая важная часть.

Проблема с вводом данных в приложение — самый известный пример — «внедрение sql». Примеры изучения. Все хорошие веб-фреймворки имеют «входные» процедуры для очистки от всех возможных инъекций. Возьмите существующий код и перепишите его на прологе. Кроме того, проверьте все поля ввода с очень длинной строкой, разными кодировками и т. д.

Вы можете видеть, что безопасность не так проста, но вы можете выбрать соответствующие меры с учетом последствий взлома.

Также подумайте о возможном злоумышленнике. Если кто-то очень заинтересован, в частности, в получении вашей информации, все упомянутые методы хороши. Но это может быть редкий случай. Чаще всего хакеры просто сканируют интернет и пытаются применить известные хаки ко всем найденным серверам. В этом случае вашим лучшим другом должны быть Honey-Pots и сам пролог, потому что вероятность хакерского интереса к внутренностям swi-prolog крайне мала. (Хакеру нужно хорошо изучить код сервера, чтобы найти дверь).

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

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

Но если вы имеете в виду, что приложение должно быть доступно только из вашей локальной сети, а не из Интернета, вам нужно гораздо меньше усилий, в основном вам нужно проверить настройки маршрутизатора/брандмауэра и 4-ю дверь в моем списке.

В случае, если у вас очень ограниченное количество известных пользователей, вы можете просто предложить им использовать VPN, а не защищать свой сервер, как в случае «глобального» доступа.

person Sergei Lodyagin    schedule 01.10.2013
comment
Большое спасибо за щедрый, подробный ответ! Это очень помогает мне в попытке выявить множество пробелов в моем понимании основных концепций, связанных с этими проблемами безопасности. Я полагаю, что с этой ориентацией я теперь могу начать исследовать различные области, которые вы перечислили. Я также узнал, что знаю еще меньше, чем думал; поскольку я действительно имел в виду, что приложение будет доступно только в локальной сети -- на одной машине -- (возможно, распространяя приложение Prolog для других, чтобы они могли использовать его аналогичным образом), но я даже не знаю достаточно, чтобы четко сформулировать это! - person Shon; 02.10.2013
comment
Ваши более поздние дополнения приносят большое облегчение; ибо, когда я впервые читал ваш ответ, я подумал, что я совершенно не в своей лиге, и я собирался отказаться от всего подхода и, возможно, все-таки попытаться создать собственный графический интерфейс. Большое спасибо! - person Shon; 02.10.2013

Я хотел бы отметить, что мой пост был о проблеме безопасности с использованием переадресации портов в apache для доступа к пролог-серверу.

И я знаю об успешной DOS-атаке с внедрением пролога на веб-сайт, основанный на http-инфраструктуре SWI-Prolog. Я не верю, что автор веб-сайта хочет, чтобы подробности были обнародованы, но возможность, безусловно, реальна. Очевидно, что этот вектор атаки возможен только в том случае, если сайт оценивает полный код Тьюринга (или код, который он не может доказать, завершится).

Простая мера безопасности — проверять объект Request и отклонять запросы от чего угодно, кроме localhost.

Я хотел бы отметить, что сервер pldoc по умолчанию отвечает только на локальном хосте. - Энн Огборн

person Anniepoo    schedule 06.01.2014

Я думаю, что http-пакет SWI_Prolog — отличный выбор. Ян Вилемейкер приложил много усилий, чтобы сделать его безопасным и масштабируемым.

Я не думаю, что вам нужно беспокоиться о внедрении SQL, действительно было бы странно полагаться на SQL, когда у вас под рукой есть мощь Пролога...

Конечно, вам нужно правильно управлять http-доступом на вашем сервере... Только сегодня утром было интересный пост в списке рассылки SWI-Prolog на эту тему: Энн Огборн делится своим опытом...

person CapelliC    schedule 02.10.2013
comment
Я рад услышать одобрение пакета SWI-Prolog. Мне нравилось играть с ним, но я совершенно невежественен в этих вопросах, и приятно знать, что я не выполняю дурацкие поручения. Я провел немало времени, работая над учебником Энн Огборн, и я благодарен за ее работу. Спасибо за ссылку на список рассылки! Помимо предостерегающей истории, забавно видеть, как она пользуется ситуацией. - person Shon; 02.10.2013
comment
Но нам нужно беспокоиться об инъекциях Prolog. Кстати, какую альтернативу SQL DB вы предлагаете использовать для постоянного хранения? - person Sergei Lodyagin; 02.10.2013
comment
@SergeiLodyagin: Пролог - это реляционный язык. И у SWI-Prolog есть много альтернатив хранения. Например, я экспериментировал с QLF — Wordnet (~300 тыс. записей IIRC) можно загрузить за секунды на игрушечном компьютере. Но в центре внимания SWI-Prolog находится хранилище RDF. - person CapelliC; 02.10.2013
comment
@SergeiLodyagin Вы не уязвимы для внедрения Prolog, если только вы не вставите неэкранированный пользовательский ввод в цель, а затем не вызовете ее. Я серьезно сомневаюсь, что кто-то будет пытаться это сделать. Мы и так достаточно нишевые. Кроме того, вы можете продолжать использовать SQL с пакетом ODBC. Я успешно запрашивал Postgres из SWI таким образом. - person Daniel Lyons; 02.10.2013