Вы наняты, чтобы исправить небольшую ошибку для сайта с высоким уровнем безопасности. Глядя на код, он заполнен дырами в безопасности. Чем ты занимаешься? [закрыто]

109

Я был нанят кем-то, чтобы сделать небольшую работу на сайте. Это сайт для большой компании. Он содержит очень конфиденциальные данные, поэтому безопасность очень важна. Проанализировав код, я заметил, что он заполнен дырами в безопасности - читай, много PHP-файлов, бросающих пользовательский ввод get / post непосредственно в запросы mysql и системные команды.

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

Что бы вы сделали в этой ситуации?

Обновить:

Я последовал несколько полезных советов и вежливо сообщил разработчику, что обнаружил некоторые возможные недостатки безопасности на сайте. Я указал на строку и сказал, что там может быть возможная уязвимость для атак с использованием SQL-инъекций, и спросил, знает ли он об этом. Он ответил: «Конечно, но я думаю, что для его использования у злоумышленника должна быть информация о структуре базы данных; я должен лучше понять» .

Обновление 2:

Я сказал, что это не всегда так, и предложил ему перейти по этой ссылке на вопрос переполнения стека, чтобы правильно с ней справиться: как предотвратить SQL-инъекцию в PHP? Он сказал, что изучит это, и поблагодарил меня за то, что я сказал ему раньше. Полагаю, моя часть готова, спасибо, ребята.

MaiaVictor
источник
29
Мне бы очень понравилось решение, которое не предполагает разрушения чьей-либо жизни. Я бы оставил это в покое, но я также знаю, что такая дыра в безопасности может также разрушить жизнь некоторых людей. Сложный.
MaiaVictor
18
Злоумышленник может использовать эксплойт для получения информации о структуре базы данных. Ни одна уязвимость SQL-инъекций не должна преуменьшаться.
Дейв Рейгер
17
Покажите ему, как использовать некоторые уязвимости, не используя знания базы данных. Это испугает его до смерти.
Euphoric
74
Я просто хочу сказать хорошую работу для поиска другого человека / программиста, которого вы не знаете. Нет ничего страшнее в том, чтобы разрушить их средства к существованию, потому что они допустили ошибку, а вы их не знаете, и я рекомендую вам принять это во внимание.
Steel
8
@Dokkat Проблема заключается в балансе. С точки зрения программиста, некачественный программист с женой и ребенком фактически поставил под угрозу компанию, и, следовательно, работу многих сотрудников с женами и детьми. Кроме того, проблема часто осложняется эмоциональной проблемой: «Плохой программист делает что-то, что делает мою жизнь сложнее. Теперь я должен упустить возможность провести время со своей семьей. Они важнее для меня, чем он. Это кажется несправедливым. " Это иррациональный ответ, но люди будут людьми.
deworde

Ответы:

114

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

Если вы работаете непосредственно с инженером, который написал это, запишите все и отдайте его этому инженеру.

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

Не делайте этот вопрос «этот парень плохой, уволите его». Подходя к этому с точки зрения «Эй, я обнаружил некоторые потенциальные ошибки, которые требуют исправления статистики, которые, похоже, происходят из-за некоторых неосведомлённых / распространенных заблуждений относительно безопасности сайта. Я также хотел бы поговорить с вашей разработкой, чтобы мы могли улучшить ваш сайт» и, надеюсь, избежать большего количества этих проблем в будущем ».

Эрик Гидрик
источник
1
Отличные ответы в целом. Тема субъективная, поэтому я отмечу вашу, поскольку она была наиболее принятой сообществом.
MaiaVictor
1
Если вы работаете с инженером, но вам платит руководство, не следует ли вам сообщать руководству? Что если инженер благодарит вас, но в тот момент, когда вы уходите, уничтожает отчет?
Конерак
Либо сообщите обоим, либо сначала сообщите инженеру, и убедитесь, что ошибки создаются и отслеживаются в любой системе, которую они используют. Если ошибки не созданы, сообщите руководству.
Эрик Гидрик
2
Мне больше понравился этот ответ: programmers.stackexchange.com/a/189206/28351 , потому что для работодателя приоритеты разные. Сначала сообщите о дырах в безопасности, затем исправьте небольшую ошибку.
nalply
80

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

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

Карл Билефельдт
источник
26
+1. Невежество может быть исправлено. Некомпетентность - это карьера для некоторых!
Митч Пшеничный
20

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

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

Дэйв Рейгер
источник
17

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

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

Майкл Кохне
источник
13

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

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

Очевидно, избегайте таких слов, как «дерьмо, плохо, плохо, загадочно», когда ссылаетесь на код / ​​недостатки и подобные слова для разработчика, написавшего сайт.

установка
источник
4
Я хотел бы добавить: убедитесь, что разработчик осознает серьезность недостатков и как они могут быть использованы. Потратив время на запуск контролируемой «атаки» на локальную машину с этим присутствующим разработчиком, можно многое сделать для ознакомления его с этой проблемой, что оставляет для вас возможность предложить способы усиления кода.
Эндрю Грей
7

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

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

Рори МакКьюн
источник
4
Имейте в виду, что это сопряжено с некоторыми рисками, так как вы можете выглядеть как «хакер». Менеджеры не обязательно понимают такие термины, как «существующая уязвимость», «копия разработки» и «аналитик безопасности белой шляпы»
deworde
0

Первый и единственный; Руководство не хочет слышать о проблемах. Меня уволили из Управления кадров (проверки безопасности для Белого дома), потому что я указал, насколько небезопасна их система. Это было некоторое время назад, но отношение руководства не изменилось.

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

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

Джо
источник
3
«Менеджмент не хочет слышать о проблемах» - добавьте некоторые аргументы / ссылки в поддержку вашего утверждения (что звучит правдоподобно для меня, но на самом деле это не имеет значения), и я отзову downvote
gnat