Pull to refresh

Comments 52

UFO just landed and posted this here
Не знаю почему, но очень не нравится, когда в статье идет обращение на «ты».
это стиль журнала какер. У них довольно частенько бывали статьи вида: «Привет, мой юный друг какер»
Лишнего панибратства уже лет пять как нет :). А вот обращение на «ты» — это да, особенность журнала.
Ну не в «гостях» же…
Логично заметить, что стиль журнала можно оставить при журнале, а делать копи-пасту на другой ресурс где есть свой стиль не стоит, ИМХО.
Наверное потому, что вам не 18 лет.
Да уж, кто будет писать query сравнения пароля по regexp?
Я и на equal не советую переписывать, надо поднимать юзера по логину и уже на сервере сравнивать пароль, тем более если есть шифрование.
Даже как пример в статье это выглядеть крайне глупо.
Я был в шоке от таких примеров.
может для автора это и норма но для меня нонсенс
Статья с грозным заголовком, суть которой, как и обычно, проблемы реализации фронт-эндов/бэк-эндов, которые с БД работают, и безопасности при работе с данными в них, а ни сколько не самой БД.
Писец, сами выдумали проблемы, сами же героически их решили.

Ни одна из этих «уязвимостей» в реальном мире просто не встречается :)
Но писать же о чем — то надо :)
Цель материала — показать уязвимости, связанные с использованием NoSQL баз данных. Пускай на базовом уровне. Если вы считаете, что все разработчики заботятся о фильтрации входящих данных, то, увы, вы ошибаетесь :(. Друзья из Positive Technologies и Digital Security не дадут соврать.
Не дадим. Разработчики, конечно, разные, но быват в этой жизни абсолютно все, поэтому такой подход как бы предупреждает: и тут подобные проблемы есть, будьте начеку 8)
и что же они не дадут соврать?
showcase из реальной жизне? где mass assignment в nosql?
Неужели журнал хакер сменил аудиторию на школьников? Правда сложно писать серьезные вещи? Это далеко не всем дано, я бы даже сказал еденицам.
ксакеп уже как ~10 лет не торт.
Дело не в сожержании а в содержимом. У них бывали статьи с очень громким и интересным названием, но полные воды.
Статьи в Х зависят от авторов. Разные авторы разные статьи. Журнал фактически «опен сорс». Каждый может написать туда, что хочет 8)
Я просто думал что у них там серьезный фейсконтроль контроль статей и авторов. Оказывается я сильно ошибался =)
Ну фейс-контроль есть. Статьи типа «брутим» аськи или делаем фейк для ВКонтакте не пройдут. Данная статья, возможно, спорна, но тема интересна в общем, и даже описанные кейсы эксплуатации интересны для общего представления потенциала.
var regexpPwd = new RegExp("^" + password, «i»);
var loginParam = { login: login, password: regexpPwd };

после этого уже стало смешно :)
тема да, интересная, но подача материала из серии 'вредные советы', такого кода как описывает автор, даже школьники не пишут, я уж не говорю о более опытных, которые даже в похмелье в 5 утра такое не напишут.
шит хеппенс. я однажды видел на реальном проекте такое:
select… from user_table where user_table.login like $login and user_table.pass like $pass;
Поправьте ссылку на «тестовый web-сайт»
>объектно-ориентированные базы данных (db4o, Cache, Jade);

мне кажется Cache регулярно относят к объектной СУБД только те люди которые с ней никогда не работали
да там есть поддержка объектной парадигмы БД там есть также поддержка реляционной парадигмы БД — но весь вкус этой СУБД в использовании — древовидных БД с помощью прямого доступа — не объекты — не SQL — а деревья! Да это труднее — да это требует больше времени — но только там можно получить скорость быстродействие и гибкость в полной мере… (наболело)
Зашел, думал что-нибудь смачное будет, а тут один индусский код, который еще надо постараться написать.

  • Проверять пароль регуляркой это конечно пять. Как минимум потому-что никто в своем уме не будет хранить пароль в открытом виде. И вообще, вы же сами написали, "поиск с помощью регулярных выражений", проверять равны ли две строки посредством регулярок, эм, это даже не смешно.

  • И еще одна высосанная из пальца дыра. Черт возьми, как же можно догадаться делать eval что-бы сделать запрос. Кажется этот пункт можно переформулировать в «Нету дыр как в MySQL? (Я о генерации запросов методом подстановки, если что) Так давайте сделаем так, чтобы они были!». Ибо все нормальные люди сделают этот код так:
    users.find_one({'login': login})
    

  • Господи, запустили сервер с --rest и теперь его можно поломать через него! Серьезно, это как дать гранату мартышке, а потом удивляться салюту из кишок. В документации MongoDB даже указано, что рекомендуемый способ использования это без аутентификации, но при этом разрешаем файрволом только оттуда, откуда можно, а следовательно CSRF сразу идет лесом. Ну а пихание данных без проверки, смотреть предыдущий пункт, намеренно использовать потенциально дырявую штуку, а потом кричать «решето!» весьма странно.

  • А авторизация посредством выполнения JavaScript, вот кто так напишет? Да, правильный ответ — никто. Основной юзкейс этого дела, это посчитать что-то сложное прямо на сервере, чтобы не таскать данные туда-сюда. И то, в новой MongoDB будет интересная штука чтобы делать все это без JS.


Во-вторых, безопасность современных NoSQL-СУБД оставляет желать лучшего.
Вообще, сказали бы честно, уровень развития мозгов некоторых разработчиков оставляет желать лучшего, такие примеры как тут есть лютый индусизм (т.е. абсолютное не понимание инструмента).
SQL-инъекции тоже только в говнокоде бывают, и что? :)
просто за NoSQL садятся уже люди немного выросшие из plain-SQL запросов в коде и на различном опыте наученные
Про то что никто не хранить пароли в открытом виде, вы так неправы ;(
молодец прогер, вс еверно
Постоянное «ты»-канье в статье как-то коробит. Так и слышится «здддддравствуй, мой маленький друг, сегодня я расскажу тебе сказочку о волшебном ноэскуэль...».
UFO just landed and posted this here
статья конечно кажется бредом, и я полагаю что, как и в данном случае нужно еще постараться написать так чтобы инъекция стала возможной.
но в качестве примера для попыток взлома могу предложить поиграть с InterSystems Cache, думаю написать там код подверженный инъекциям будет сделать сложнее, конечно если использовать именно NoSQL доступ к данным а не sql.
UFO just landed and posted this here
Реакция оправданна, это статья-ответ на несуществующую проблему. Автор сначала философствует на отвлеченные темы, потом предполагает, как будет писать говнокодер и дает какие-то странные советы.
Map/Reduce. Map/Reduce — это программный фреймворк, разработанный компанией Google для параллельных вычислений над большими объемами данных.


О да.

www.cs.cmu.edu/Groups/AI/html/cltl/clm/node143.html
X3J13 voted in January 1989 (MAPPING-DESTRUCTIVE-INTERACTION)
Эту поделку в промышленных масштабах кто-то использовал?

Я тоже впервые услышал про M/R когда Google начала расказывать о том как они его используют…
>MongoDB использует в качестве языка запросов BSON
Не совсем корректно. BSON это нотация (Binary JSON), а не язык. А языком для запросов является JS.
Примеры искусственные, но дают повод задуматься об этом аспекте безопасности тем, кто не задумывался по причине «да ладно, у меня же нет sql».
Так что спасибо автору.

p.s. маленькое занудство: «но СУБД не может обойтись без языка запросов» — например, в CouchDB нет языка запросов. Есть REST-API для запросов, но в запросах просто передаются параметры, а не какие-либо логические конструкции.
Я приблизительно о том же. Ничто не мешает так же делать в любом другом случае. Сайт имеет досбуп к черным ящикам вызова процедур СУБД. Понятно что в процедуре тоже можно найти дырку, но написание перехвата ошибок в параметрах вызываемой функции и контроль формата параметра это первый курс, второй семестр. В том смысле что чем проще функции — тем сложнее в них чтото сломать.
Всетаки странно. Неужто никто не использует аутентификацию через хранимые процедуры? (Они вроде и в монго есть: Stored Javascript).
Я, конечно не сайт девелопер, но когда приходится кропать под веб — у меня сайт только вызывает процедуры и функции с четко обозначенными правами — никаких запросов.
Может быть сильно параноидально так делать или я в принципе неправильно подхожу к задаче, может укажете в чем ошибочность моего подхода? (а то долго думал — недостатков не придумал)
UFO just landed and posted this here
Я такой подход больше в MSSQL использовал. Просто когда читаешь примеры по книжке (я с этого начинал), там постоянно упоминалось о том что сторонние приложения ни в коем случае не должны тыкать запросиками напрямую в саму базу, а исключительно через хранимые процедурки, да и то — у каждой процедурки (или группы процедурок) должен быть свой юзер которому за пределы функционала процедуры даже тройным прыжком с переворотом не вырваться. (Для примера. Есть функция которая по логину и паролю дает человеку id сессии, используя промежуточную процедуру которая на основании логина и пароля дописывает в хэш таблицу сессий адрес, session_id и результат аутентификации. То есть если вы пробьете функцию сбора данных за ней остается функция которую может вызвать только функция сбора данных и никто больше — и в генератор сессии вы ничего не подсунете).
А на тему галочки в дампе, так ведь можно и в бане раздеться забыть, но у воспитанных людей в трезвом виде такое не случается.
Автор забыл указать, еще один уровень — это абстрагирование, маппинг на объекты позволит автоматом избавиться от выстрела в ногу.
кстати в руби ^[a+z]+ лучше не использовать, дыра
new RegExp("^" + password, "i");
Теперь я понял, откуда у этого издания такая репутация :)
У меня предложение журналу «Хакер»: помимо печати самой статьи, выкладывайте и комментарии с хабра — они частенько полезней самой статьи.
UFO just landed and posted this here
Sign up to leave a comment.