Pull to refresh

Comments 15

Хакеры будут всегда. Просто уровень подготовки будет расти из года в год.
Интересно, что было бы с безопасностью, если бы вместо классических WEB-приложений были бы обыкновенные распределённые приложения, которые работают с пакетами (сокетами)?

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

Зачем предоставлять пользователю в браузере строку для ввода URL? Если бы браузер предоставлял пользователю всегда только форму ввода (а в ней уже допускался выбор значений только из реальных справочников), то эксплуатировать было бы нечего. ЯТД.
OWASP — «All Input is Evil», says Michael Howard in his famous book «Writing Secure Code»
Допустим, браузер не предоставлял бы таких возможностей. Но разве браузер – единственный способ общения с веб-приложением?

Ди ничего бы не изменилось… Развивались бы инструменты мониторинга сокетов, составлялись бы похожие запросы, а на стороне бэка у таких приложений всеравно база данных, возможно SQL. И при проектировании например решили делать выборку по статусу, а это строка, подставляемая в SQL запрос, строгая типизация позволит проверить, что да — это строка, но не проверит на SQL-инъекцию. Все что прислал клиент, в данном случае внешнее распределенное приложение, априори нужно валидировать и экранировать.

В таких приложениях совершенно невозможно представить инъекции и эксплуатацию уязвимостей

А как же переполнения буферов, arbitrary code execution и все такое?
Скажите, пожалуйста, в какой момент и при каких обстоятельствах происходит переполнение буфера?
с пакетами (сокетами)

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


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

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


Зачем предоставлять пользователю в браузере строку для ввода URL?

А как я должен задавать, какой сайт я хочу открыть — хабр или гугл?


Если бы браузер предоставлял пользователю всегда только форму ввода (а в ней уже допускался выбор значений только из реальных справочников), то эксплуатировать было бы нечего. ЯТД.

Вы думаете неправильно. Браузер предоставляет форму ввода, пользователь выбирает правильное значение из списка, браузер отправляет значение на сервер с приложением. Ничто не мешает написать свою программу, которая прикинется браузером, подключится к серверу, и отправит туда неправильное значение.

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

И вот если передача данных в запрос построена неправильно
Вопрос следует, на мой взгляд, поставить иначе: можно ли сделать так, чтобы правильная настройка передачи данных была бы встроена в технологию?

Если существует положительный ответ на этот вопрос, то «прикинуться» будет гораздо сложнее. Но это будет, также, означать и то, что Вы не сможете «просто так» открыть какой-либо сайт, поскольку для пользователя каждый сайт (в недостижимом идеале) должен выглядеть как поставщик сервисов (служб) и данных.

Более того. Само понятие «открыть сайт» содержит в себе серьёзную методологическую ошибку. Отсюда и возможность организации распределённых атак и т.д. и т.п. Если Вы «обращаетесь» к какому-либо сайту, то Вы это делаете (если следовать написанному мною сценарию в собственной статье) в рамках своей собственной ОС, и Вы не сможете организовать никакую распределённую атаку, потому как у Вас не будет никакого доступа к другим компьютерам во Всемирной Паутине, или Вам будет предоставлен доступ только к тем сервисам (службам), которые предусмотрены с точки зрения интересующего Вас сайта.

На самом деле, мне вполне понятен смысл Ваших весьма справедливых замечаний. Однако, сказанное Вами не отменяет возможность построения «другого мира». А в этом «другом мире» всё другое. Нет привычных для нас всех понятий «сайт» и «браузер»…
можно ли сделать так, чтобы правильная настройка передачи данных была бы встроена в технологию? Если существует положительный ответ на этот вопрос, то «прикинуться» будет гораздо сложнее

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


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

Что мне помешает арендовать 20 компьютеров? Что мне помешает запустить вирус, который предоставит мне доступ к 100000 компьютеров?


А в этом «другом мире» всё другое. Нет привычных для нас всех понятий «сайт» и «браузер»…

В вашем мире есть доступ по сети и все связанные с ним проблемы. Также в вашем мире есть базы данных и запросы к ним. Единственный тип атак, которых не будет в вашем мире с жесткими ограничениями — это XSS атаки. Зато будет много других проблем, о которых я написал в комментариях к вашей статье.

Можете меня не убежать в том, что единственный способ борьбы против злоумышленников — это открытый мир и хорошее воспитание. Никакая самая хитроумная система не остановит того, кто замышляет зло.
UFO just landed and posted this here
На любое действие всегда будет противодействие.
Sign up to leave a comment.

Articles