Der Unterschied zwischen # und $ in mybatis
1 #Behandeln Sie die eingehenden Daten als Zeichenfolge und fügen Sie den automatisch eingehenden Daten ein doppeltes Anführungszeichen hinzu. Beispiel: order by #user_id#, wenn der übergebene Wert 111 ist, dann ist der in SQL analysierte Wert order by „111“. 🎜>
2. $ zeigt die eingehenden Daten direkt an und generiert sie in SQL. Beispiel: order by $user_id$, wenn der übergebene Wert 111 ist, dann ist der in SQL analysierte Wert order by user_id. Wenn der übergebene Wert id ist, wird der analysierte SQL nach id sortiert.
3. #Methode kann SQL-Injection weitgehend verhindern.
4. Die $-Methode kann die SQL-Injection nicht verhindern.
5. Die $-Methode wird im Allgemeinen verwendet, um Datenbankobjekte wie Tabellennamen zu übergeben.
6. Verwenden Sie im Allgemeinen nicht $.
SQL-Injection verhindern
Hinweis: Schreiben Sie die SQL-Anweisung nicht als select * from t_stu where s_name like '%$name$%', da dies äußerst anfällig für Injektionsangriffe ist.
Parameter im Format „${xxx}“ nehmen direkt an der SQL-Kompilierung teil, sodass Injektionsangriffe nicht vermieden werden können. Bei dynamischen Tabellennamen und Spaltennamen können jedoch nur Parameterformate wie „${xxx}“ verwendet werden.
Versuchen Sie beim Schreiben der Mapping-Anweisung von mybatis, das Format „#{xxx}“ zu verwenden. Wenn Sie Parameter wie „${xxx}“ verwenden müssen, müssen Sie diese manuell filtern, um SQL-Injection-Angriffe zu verhindern.
Beispiel
<sql id="condition_where">
<isNotEmpty property="companyName" prepend=" and ">
t1.company_name like #companyName#
</isNotEmpty>
</sql>
Der Java-Code ist fast derselbe wie Ihr Original. Daran ist nichts auszusetzen. Wenn Sie es als problematisch empfinden, kapseln Sie einfach null und „%“ in eine Methode
if (!StringUtil.isEmpty(this.companyName)) {
table.setCompanyName("%" + this.companyName + "%");
}
Das Obige ist ein kurzer Vortrag über Mybatis, der Ihnen präsentiert wird vom Herausgeber Der Unterschied zwischen # und $ in MyBatis und die Methode zur Verhinderung von SQL-Injection werden alle behandelt. Ich hoffe, dass jeder die chinesische PHP-Website unterstützt~
Mehr über den Unterschied zwischen # und $ in MyBatis und dem Methode zur Verhinderung von SQL-Injection. Bitte beachten Sie die PHP-Chinese-Website für Artikel!