Как Избежать DoS-атаки с помощью Сокетов Беркли в C++

Если Ваш метод индекса на диспетчере делает return View("Index");, тогда просто называют метод индекса с любыми параметрами, которых он требует. Тогда метод населит ViewData reuired Представлением индекса.

5
задан Daniel Bingham 22 August 2009 в 22:35
поделиться

5 ответов

JSLint - это один из способов очистки кода в нашем приложении. Это помогает во время проверки кода и принятия решения о том, хорошо написана сторонняя библиотека или нет. Мы также используем проверки IntelliJ IDEA, которые по большей части предупреждают о тех же проблемах. Мы также используем jQuery, который помог очистить большой объем кода.

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

Это мощный, в основном переносимый и распространенный метод.

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

3
ответ дан 13 December 2019 в 19:32
поделиться

Важное чтение: Проблема C10K

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

Использование асинхронного ввода-вывода для размещения всех сокетов в одном потоке - не такой простой код (красиво обернутый libevent и libev2 ), но он гораздо более масштабируемый - он ограничен количеством открытых файловых дескрипторов, которые позволяет ваша система, и - например, в последних сборках Linux - это может быть измерено миллионами! По этой причине большинство веб-серверов и других серверов используют асинхронный ввод-вывод.

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

4
ответ дан 13 December 2019 в 19:32
поделиться

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

Защита сетевого приложения с выходом в Интернет от вредоносных client - это совсем не тривиально и, вероятно, включает в себя все упомянутые вами продвинутые методы, а также некоторые! Например, часто часть ответственности перекладывается с кода приложения на уровень маршрутизатора или межсетевого экрана. Вы можете ограничить доступ только доверенными узлами или обнаруживать чрезмерные попытки подключения и ограничивать или блокировать их до того, как трафик попадет в ваше приложение.

2
ответ дан 13 December 2019 в 19:32
поделиться

То, что я делал раньше, чтобы помочь с этим (около 1997 :), заключалось в том, чтобы потребовать, чтобы магическое число было отправлено в течение определенного промежутка времени, иначе соединение будет закрыто.

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

Это не идеально, но для ваших текущих забот может помочь решить эту проблему и позволить не использовать ресурсы, создавая слишком много соединения.

Таким образом, для очистки требуется основной поток и второй поток, поэтому он не является однопоточным.

1
ответ дан 13 December 2019 в 19:32
поделиться

У меня вопрос, есть ли другие способы избежать такого атака?

Для сервера мне нужен таймер на уровне приложения:

  • Буфер входных данных на соединение
  • Тупой код чтения сокета считывает данные из сокета во входной буфер
  • Приложение- специальный код анализирует содержимое входного буфера

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

Выполнение этого подразумевает асинхронный ввод-вывод или выделенный поток [-ов] ввода-вывода.

1
ответ дан 13 December 2019 в 19:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: