Heim >Backend-Entwicklung >PHP-Tutorial >Warum kann ich Tabellennamen nicht als Parameter in vorbereiteten Anweisungen verwenden?

Warum kann ich Tabellennamen nicht als Parameter in vorbereiteten Anweisungen verwenden?

DDD
DDDOriginal
2024-12-27 12:23:10186Durchsuche

Why Can't I Use Table Names as Parameters in Prepared Statements?

Tabellennamen können in vorbereiteten Anweisungen nicht parametrisiert werden

Trotz Ihrer ersten Versuche, Variablen zum Schutz vor SQL-Injection zu trennen, sind Sie auf Folgendes gestoßen Fehler. Das Problem ergibt sich aus dem Versuch, den Tabellennamen als Parameter einzuschließen.

In einer vorbereiteten Anweisung ist die Parametrisierung auf Werte innerhalb der SQL-Anweisung beschränkt. Der Tabellenname, der die Gültigkeit der Anweisung und die Spaltennamen bestimmt, kann nicht dynamisch ersetzt werden.

Selbst in Schnittstellen wie PDO, die vorbereitete Anweisungen simulieren, führt das Ersetzen des Tabellennamens als Zeichenfolge in Anführungszeichen zu einer ungültigen SQL-Syntax.

Um eine Injektionsschwachstelle zu verhindern, ist es am besten, einen Satz akzeptabler Tabellennamen auf der Whitelist zu führen und Ihre $mytable anhand dieser zu validieren. Code wie „SELECT * FROM {$mytable}“ bleibt eine praktikable Option, vorausgesetzt, Sie stellen die Gültigkeit von $mytable sicher.

Das obige ist der detaillierte Inhalt vonWarum kann ich Tabellennamen nicht als Parameter in vorbereiteten Anweisungen verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn