Heim > php教程 > PHP开发 > Hauptteil

Eine kurze Diskussion über den Unterschied zwischen # und $ in mybatis und wie man SQL-Injection verhindert

高洛峰
Freigeben: 2017-01-05 17:21:49
Original
1879 Leute haben es durchsucht

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>
Nach dem Login kopieren


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 + "%"); 
}
Nach dem Login kopieren


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!


Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Empfehlungen
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage