PHP Manual

Що робити, коли наступного року штучний інтелект забере робочі місця у програмістів?

23. 12. 2022

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

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

Розглянемо приклад:

Питання: Знайдіть уразливість в даній функції та надайте виправлений код:

function getThisMonthName(): string
{
$czMonths = [
'',
'січень',
'лютий',
'Березень',
'квітень',
'травень',
'червень',
'липень',
'серпень',
'вересень',
'жовтень',
'листопад',
'грудень',
];
return $czMonths[(int) date('m')];
}

Відповідь:.

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

Одним з виправлень є використання попередньо визначених констант місяця замість вхідних даних, отриманих при виклику функції date(). Ми також можемо використовувати функцію filter_var() з відповідним фільтром, щоб переконатися, що вхідні дані є числовими і не містять шкідливого коду.

Наводимо виправлений код:

function getThisMonthName(): string
{
$czMonths = [
'',
'січень',
'лютий',
'Березень',
'квітень',
'травень',
'червень',
'липень',
'серпень',
'вересень',
'жовтень',
'листопад',
'грудень',
];
$month = filter_var((int) date('m'), FILTER_VALIDATE_INT);
if ($month === false || $month < 1 || $month > 12) {
return "";
}
return $czMonths[$month];
}

Питання: Перетворити реалізацію функції на typescript.

Відповідь:.

Ось переписана реалізація функції на мові TypeScript:

function getThisMonthName(): string {
const czMonths = [
'',
'Leden',
'Únor',
'Březen',
'Duben',
'Květen',
'Červen',
'Červenec',
'Srpen',
'Září',
'Říjen',
'Listopad',
'Prosinec',
];
const month = filter_var((int) date('m'), FILTER_VALIDATE_INT);
if (month === false || month < 1 || month > 12) {
return "";
}
return czMonths[month];
}

Зауваження: Це не дійсний машинопис!

Відповідь:.

Прошу вибачення за помилку. Наводимо виправлений варіант функції на мові TypeScript:

function getThisMonthName(): string {
const czMonths = [
'',
'Leden',
'Únor',
'Březen',
'Duben',
'Květen',
'Červen',
'Červenec',
'Srpen',
'Září',
'Říjen',
'Listopad',
'Prosinec',
];
const month = Number(new Date().getMonth()) + 1;
if (month < 1 || month > 12) {
return "";
}
return czMonths[month];
}

Примітка: У TypeScript відсутня функція filter_var(), тому я замінив її викликом функції getMonth() з класу Date і подальшим перетворенням її в число за допомогою функції Number(). Ця версія функції повинна бути коректною в TypeScript.

Питання: Чи містить ваша реалізація Typescript уразливість в системі безпеки?

Відповідь:.

Виправлена мною реалізація функції на TypeScript не повинна містити уразливості до SQL ін'єкції, яка була присутня в оригінальній реалізації PHP. Функція getMonth() класу Date повертає числове значення місяця (0 для січня, 1 для лютого і т.д.), тому нам не потрібно передавати вхідні дані з функції date() і ми можемо уникнути небезпеки SQL ін'єкції.

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

Jan Barášek   Více o autorovi

Autor článku pracuje jako seniorní vývojář a software architekt v Praze. Navrhuje a spravuje velké webové aplikace, které znáte a používáte. Od roku 2009 nabral bohaté zkušenosti, které tímto webem předává dál.

Rád vám pomůžu:

Související články

1.
12.
Status:
All systems normal.
2024