Как фрилансер, я наследовал много плохо разработанных пользовательских веб-проектов. Большинство этих проектов не охраняет против XSS и Внедрения SQL. На некоторых из этих проектов я был единственным разработчиком больше 1 года. Когда клиенты просят, чтобы я добавил новые опции, я делаю это, не внося существенные изменения в архитектуру базовой системы.
Так, например, если клиент попросил, чтобы я создал регистрационную страницу на ограниченном бюджете, я делаю настолько снова использующий Объекты Доступа к данным системы, которые не предотвращают Внедрение SQL, и я представляю страницы с Объектами Представления системы, которые не санируют код для XSS.
Если в более позднее время, хакер использует эти нарушения защиты на регистрационной странице, я считаюсь ответственный? Меня никогда не просили переписать системные Объекты Доступа к данным или Объекты Представления. И потому что клиент находится на ограниченном бюджете, они не заплатят мне для записи нового ДАО или Представления для системы. Это автоматически становится моим отказом день, я решаю наследовать такой катастрофический проект?
И что, если существуют другие части системы, я редко затрагивал? Я, возможно, вошел для изменения части текста на представлениях или добавил новое if
оператор в контроллере. Как только я "коснулся" чего-то, это означает, что я ответственен за весь модуль, пока я не удаляюсь с проекта?
Сообщите им о любых проблемах, которые вы видите, и укажите примерное время, необходимое для их устранения. Изложите это письменно, и вы поставите мяч на их площадку. Они не могут привлечь вас к ответственности за то, что они сами не обратили внимания на ваши предупреждения.
Позвольте мне добавить, что если бы я мог решить многие из этих проблем за 15 минут или меньше, то я бы это сделал, просто из личной гордости в моей работе.
Когда я работаю внештатно, я выполняю работу, которую мне платят / меня просят сделать, и консультирую по работе, которую, как мне кажется, следует делать.
Именно так я подхожу к большей части того, что я делаю. Я сделаю именно то, что меня просят, но как профессионал я почти всегда высказываю свое мнение о ситуации.
Я бы, конечно, не сказал, что вы несете прямую ответственность за это, но это было бы не очень профессионально. ничего не говорить об этом.
О, и я не предлагаю, чтобы вы пробирались через всю кодовую базу, чтобы найти какие-либо потенциальные проблемы ... просто, если вы столкнетесь с ними в том, что вы делаете, не Не заморачивайся.
Я думаю, вам следует сделать так, чтобы ваш клиент был хорошо осведомлен о ситуации. Сообщите им, какие риски существуют в текущей системе, которую они используют, и сколько это будет стоить, чтобы исправить это, и каковы риски, если они этого не сделают.
Я не думаю, что вы можете нести ответственность (но я не юрист - обратитесь к одному из них, если есть реальная неотложная юридическая проблема) по ранее существующим проблемам, ЕСЛИ вы дадите клиенту понять, что знаете о них.
Как это решается в других ситуациях? Если инженер сталкивается с чем-то очень плохо сконструированным, но ему дается бюджет только на очень маленькую настройку или исправление, несет ли он ответственность за все остальные проблемы?
При принятии нового проекта я бы очень ясно дал понять клиенту, что я не несу ответственности за ошибки в исходном источнике, если только они не захотят заплатить мне за мое время, чтобы полностью выполнить обзор кода. Чтобы защитить себя, сохраните копию исходного кода в том виде, в котором вы его получили.
Я не могу ответить с юридической точки зрения; это будет зависеть от письменного и прецедентного права в вашей юрисдикции. Однако с этической точки зрения самое меньшее, что вы должны сделать, - это определить недостатки и их потенциальное влияние на ваших клиентов. Дайте им представление о том, что может произойти, если эти уязвимости будут использованы.
Здесь есть два отдельных вопроса:
Как вы защитите себя в этой ситуации?
Убедитесь, что у вас есть копия исходного кода, и вы используете хорошую систему управления версиями, чтобы в случае возникновения вопросов вы могли ясно продемонстрировать, что это не код, который вы написали, а тот, который присутствовал до того, как вы начали .
Как вы поступаете правильно со стороны клиента в этой ситуации?
Вы заранее спрашиваете клиента, какой анализ они хотели бы, чтобы вы провели: возможные улучшения кода, исправления безопасности и т. Д. Подумайте о категориях, которые вы может дать им хорошее представление о том, что вы будете проверять и что вы потенциально можете найти.
Почему заранее? Потому что в противном случае вы получите синдром автомеханика, когда вы садитесь в свою машину, и механик говорит: «О, кстати, мы нашли эту проблему здесь», и вы чувствуете себя неловко, потому что не уверены, реально это или нет. . Но если вы попросите механика повсюду хорошенько изучить его, по крайней мере, вы будете чувствовать себя более комфортно, если он что-то найдет.
Точно так же, если вы получите предварительное согласие. искать такие вещи,
DateUtil.parseDate (dateString)
из http-компонентов apache
(унаследованные: DateUtil.parseDate (dateString)
(из apache commons-httpclient))
Он имеет правильный формат, определенный как константа, который гарантированно соответствует протоколу.
Это неплохой сценарий, поскольку вы погасили свои обязательства на случай, если что-то пойдет не так в будущем. Это также дает вам хороший повод отказаться от дальнейшей работы для клиента, поскольку он явно не заботится о безопасности или качестве работы. Просто радуйтесь, когда закончите проект.