Unterschied zwischen # und $ in mybatis
1. # Behandeln Sie alle eingehenden Daten als Zeichenfolge und fügen Sie den automatisch eingehenden Daten doppelte Zitate hinzu. Zum Beispiel: Bestellung von #user_id #, wenn der in 111 übergabe Wert 111 ist, ist der Wert beim Parsen in SQL durch "111" bestellt. Wenn der in ID IS -ID übergebene Wert an SQL analysiert wird, ist sie von "ID" bestellt.
2. Zeigt $ die übergebenen Daten direkt an und generiert sie in SQL. Zum Beispiel: Bestellung von $ user_id $, wenn der in SQL übergebene Wert 111 beträgt, ist der Wert von user_id. Wenn der in IS is ID übergebene Wert an SQL analysiert wird, ist die Bestellung durch ID.
3. Die # Methode kann die SQL -Injektion stark verhindern.
4. Die $ -Methode kann die SQL -Injektion nicht verhindern.
5. Die $ -Methode wird im Allgemeinen verwendet, um Datenbankobjekte zu übergeben, z. B. in Tabellennamen.
6. Im Allgemeinen, wenn Sie #verwenden können, verwenden Sie nicht $.
Verhindern Sie die SQL -Injektion
HINWEIS: Schreiben Sie keine SQL -Anweisungen als ausgewählte * aus t_stu, wobei S_Name wie '%$ name $%', was äußerst anfällig für Injektionsangriffe ist.
Die Parameter im Format "$ {xxx}" beteiligen sich direkt an der SQL -Kompilierung und verhindert so Injektionsangriffe. Wenn es jedoch um dynamische Tabellennamen und Spaltennamen geht, können Sie nur Parameterformate wie "$ {xxx}" verwenden.
Versuchen Sie beim Schreiben von MyBatis -Mapping -Anweisungen das Format "#{xxx}". Wenn Sie Parameter wie "$ {xxx}" verwenden müssen, müssen Sie manuell gut filtern, um SQL -Injektionsangriffe zu verhindern.
Beispiel
<sql id = "condition_wher"> <isnotEmpty Property = "CompanyName" prepend = "und"> t1.company_name wie # CompanyName # </isnotEmpty> </sql>
Der Java -Code ähnelt Ihrem ursprünglichen, aber daran ist nichts auszusetzen. Wenn Sie der Meinung sind, dass es problematisch ist, das Urteil null und "%" in eine Methode zu verkapulieren.
if (! Stringutil.isempty (this.comPanyname)) {table.setCompanyname ("%" + this.comPanyname + "%"); }Das obige ist die kurze Diskussion über den Unterschied zwischen # und $ in MyBatis und der Methode zur Verhinderung der SQL -Injektion. Ich hoffe, jeder wird Wulin.com mehr unterstützen ~