Heim  >  Artikel  >  Datenbank  >  Warum eine Vorkompilierung die SQL-Injection verhindern kann

Warum eine Vorkompilierung die SQL-Injection verhindern kann

清浅
清浅Original
2019-05-11 14:55:575939Durchsuche

Der Grund, warum die Vorkompilierung die SQL-Injektion verhindern kann: Nach der Vorkompilierung wurde die SQL-Anweisung von der Datenbank analysiert, kompiliert und optimiert, und die Datenbank darf in parametrisierter Form abgefragt werden, sodass selbst bei sensiblen Zeichen die Die Datenbank behandelt sie als Attribute. Werte werden anstelle von SQL-Anweisungen verarbeitet.

Warum eine Vorkompilierung die SQL-Injection verhindern kann

Wie wir alle wissen, gibt es in JDBC eine Vorverarbeitungsfunktion. Einer der Hauptvorteile Der Vorteil dieser Funktion besteht darin, dass sie die Ausführungsgeschwindigkeit verbessern kann, insbesondere wenn die Datenbank mehrmals ausgeführt wird. Ein weiterer Vorteil besteht darin, SQL-Injection zu verhindern. Streng genommen sollte sie die überwiegende Mehrheit der SQL-Injections verhindern. Die Verwendung von

ist wie folgt:

String sql="update cz_zj_directpayment dp"+
 "set dp.projectid = ? where dp.payid= ?";
try {
PreparedStatement pset_f = conn.prepareStatement(sql);
pset_f.setString(1,inds[j]);
pset_f.setString(2,id);
pset_f.executeUpdate(sql_update);
}catch(Exception e){
//e.printStackTrace();
logger.error(e.message());
}

Warum kann es dann SQL-Injection verhindern und die Sicherheit verbessern, indem es auf diese Weise verarbeitet wird? Dies liegt tatsächlich daran, dass die SQL-Anweisung vor der Ausführung des Programms vorkompiliert wurde. Bevor die Datenbank zum ersten Mal ausgeführt wird, wurde die SQL-Anweisung von der Datenbank analysiert, kompiliert und optimiert Der entsprechende Ausführungsplan wird ebenfalls zwischengespeichert und ermöglicht der Datenbank die Verwendung von Parametern in standardisierter Form. Wenn die Parameter zur Laufzeit dynamisch an PreprareStatement übergeben werden, gilt auch dann, wenn die Parameter sensible Zeichen wie „1=1“ enthalten Die Datenbank behandelt ihn als Parameter und Feldattributwert und nicht als SQL. Der Befehl übernimmt auf diese Weise die Rolle einer SQL-Injection!

Das obige ist der detaillierte Inhalt vonWarum eine Vorkompilierung die SQL-Injection verhindern kann. 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