Вас наймають, щоб виправити невелику помилку на інтенсивному для безпеки веб-сайті. Дивлячись на код, він заповнений отворами в безпеці. Що ти робиш? [зачинено]


109

Мене хтось найняв на невелику роботу на сайті. Це сайт для великої компанії. Він містить дуже чутливі дані, тому безпека дуже важлива. Проаналізувавши код, я помітив, що він заповнений дірками в безпеці - читайте, багато PHP-файлів, які кидають користувачеві вхід / повідомлення безпосередньо в запити mysql та системні команди.

Проблема в тому, що людина, яка створила для нього сайт, - це програміст із сім’єю та дітьми, які залежать від цієї роботи. Я не можу просто сказати: "Ваш сайт - це парк розваг для дітей, який займається сценарієм. Дозвольте повторити його для вас, і ви будете добре".

Що б ви зробили в цій ситуації?

Оновлення:

Я дотримувався тут декількох добрих порад і ввічливо повідомляв розробнику, що знайшов на сайті можливі вади безпеки. Я вказав на рядок і сказав, що там може бути можлива вразливість для атак ін'єкцій SQL, і запитав, чи знає він про це. Він відповів: "впевнений, але я вважаю, що для його використання зловмисник повинен мати інформацію про структуру бази даних; я повинен краще зрозуміти" .

Оновлення 2:

Я сказав, що це не завжди так, і запропонував він перейти за цим посиланням на питання Stack Overflow, щоб правильно вирішити його: Як запобігти введенню SQL в PHP? Він сказав, що вивчить це, і подякував мені за те, що раніше йому розповів. Я думаю, моя частина виконана, дякую хлопці.


29
Мені дуже подобається рішення, яке не передбачає руйнування когось життя. Я б залишив це в спокої, але я також знаю, що такий отвір у безпеці також може зруйнувати життя деяких людей. Складні.
MaiaVictor

18
Зловмисник міг використати подвиг для отримання інформації про структуру бази даних. Ніяка вразливість ін'єкцій SQL ніколи не повинна бути недооцінена
Дейв Раджер

17
Покажіть йому, як використовувати деяку вразливість, не використовуючи жодних знань про базу даних. Це відлякує ш * т від нього.
Ейфорія

74
Я просто хочу сказати про хорошу роботу за пошуком іншої людини / програміста, яку ви не знаєте. Це не робить менш страшною річ зіпсувати собі засоби для існування, тому що вони помилилися, а ви їх не знаєте, і я вдячний вам за врахування цього.
Сталь

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 Injection.

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


4
Будьте в курсі, це має певні ризики, оскільки вас можуть змусити здатись "хакером". Люди з управління не обов'язково розуміють такі терміни, як "існуюча вразливість", "копія розробки" та "аналітик безпеки",
deworde

0

Перший і єдиний; Керівництво не хоче чути про проблеми. Мене звільнили з Управління управління персоналом (дозволу на безпеку для білого дому), оскільки я зазначив, наскільки небезпечна їхня система. Це було трохи назад, але ставлення до менеджменту не змінилося.

Вирішіть проблему з розробником електронною поштою, щоб у вас залишився слід, а потім піти чи тікати. Коли вони все-таки матимуть проблеми, як підрядник, вони спробують звинуватити вас, незалежно від участі в роботі, навіть віддаленому підключенні до проблеми.

Проблема настільки фундаментальна, як ін'єкція SQL, вказує на те, що вони спочатку розробили систему дешево, і шанси на те, що вони в кращому випадку дешеві. Отримайте все, що зможете, від них, поки вони ще працюють, але шукайте розвитку бізнесу в іншому місці.


3
"Керівництво не хоче чути про проблеми" - додайте кілька міркувань / посилань, щоб підтримати ваше твердження (це для мене звучить правдоподібно, але це насправді не має значення), і я скасую заяву
gnat
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.