PHP Manual
/
Erfahrungen aus der Praxis

Was tun, wenn künstliche Intelligenz den Programmierern nächstes Jahr die Arbeit wegnimmt?

23. 12. 2022

Die Möglichkeiten des OpeanAI-Sprachmodells sind unglaublich. Geben Sie einfach den Quellcode ein, lassen Sie ihn analysieren, korrigieren und in eine andere Sprache umschreiben, und alles geschieht automatisch.

Als ich es zum ersten Mal ausprobierte, war ich schockiert, was man alles erreichen kann und wie leistungsfähig die Werkzeuge sind, die der Allgemeinheit zur Verfügung stehen.

Schauen wir uns ein Beispiel an:

Frage: Finden Sie die Sicherheitslücke in dieser Funktion und stellen Sie den gepatchten Code zur Verfügung:

function getThisMonthName(): string
{
$czMonths = [
'',
'Januar',
'Februar',
'März',
'April',
'Mai',
'Juni',
'Juli',
'August',
'September',
'Oktober',
'November',
'Dezember',
];
return $czMonths[(int) date('m')];
}

Antwort:

Eine der Sicherheitsschwachstellen in dieser Funktion ist die Gefahr eines SQL-Injection-Angriffs. Wenn schlecht formatierte oder bösartige Eingaben an die Funktion übergeben werden, kann die Datenbank kompromittiert oder ausgenutzt werden.

Eine Lösung besteht darin, vordefinierte Monatskonstanten anstelle von Eingaben zu verwenden, die aus einem Aufruf der Funktion date() stammen. Wir können auch die Funktion filter_var() mit einem geeigneten Filter verwenden, um sicherzustellen, dass die Eingabe numerisch ist und keinen bösartigen Code enthält.

Hier ist der korrigierte Code:

function getThisMonthName(): string
{
$czMonths = [
'',
'Januar',
'Februar',
'März',
'April',
'Mai',
'Juni',
'Juli',
'August',
'September',
'Oktober',
'November',
'Dezember',
];
$month = filter_var((int) date('m'), FILTER_VALIDATE_INT);
if ($month === false || $month < 1 || $month > 12) {
return "";
}
return $czMonths[$month];
}

Frage: Konvertieren Sie die Funktionsimplementierung in Typescript.

Antwort:

Hier ist die neu geschriebene Implementierung der Funktion in 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];
}

Anfrage: Dies ist kein gültiges Typescript!

Antwort:

Ich entschuldige mich für den Fehler. Hier ist die korrigierte Version der Funktion in 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];
}

Hinweis: In TypeScript gibt es keine filter_var()-Funktion, daher habe ich sie durch den Aufruf der Funktion getMonth() aus der Date-Klasse ersetzt und dann mit der Funktion Number() in eine Zahl konvertiert. Diese Version der Funktion sollte in TypeScript gültig sein.

Frage: Enthält Ihre Implementierung von Typescript eine Sicherheitslücke?

Antwort:

Meine korrigierte Implementierung der Funktion in TypeScript sollte nicht die Sicherheitslücke eines SQL-Injection-Angriffs enthalten, die in der ursprünglichen PHP-Implementierung vorhanden war. Die Funktion getMonth() der Date-Klasse gibt einen numerischen Wert des Monats zurück (0 für Januar, 1 für Februar usw.), so dass wir keine Eingabe von der Funktion date() übergeben müssen und die Gefahr eines SQL-Injection-Angriffs vermeiden können.

Jede Anwendung kann jedoch Sicherheitslücken enthalten. Daher ist es wichtig, den Code regelmäßig auf potenzielle Sicherheitsprobleme hin zu überprüfen. Wenn Sie eine Sicherheitslücke in Ihrem Code vermuten, können Sie sich an Sicherheitsexperten wenden oder automatische Tools zum Scannen von Sicherheitslücken verwenden.

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