Java-Schwächen mit hohem Risiko und Reparaturen – SQL-Injection (SQL-Injection)

Eine ausführliche Erläuterung der SQL-Injection-Risiken und -Lösungen finden Sie in diesem Artikel:
SQL-Injection-Risiken und vorbeugende Maßnahmen

Dieser Artikel ist hauptsächlich Teil der Reihe zur Reparatur von Java-Schwachstellen und ergänzt einige Einführungen in die Reparaturen im Java-Code.

Beschreibung der Schwäche

SQL-Injection (SQL-Injection) ist eine häufige Sicherheitslücke, die sich auf die Möglichkeit bezieht, nicht autorisierte Datenbankabfragen durchzuführen, indem bösartiger SQL-Code in die Eingabe einer Anwendung eingeschleust wird. Ein Angreifer könnte diese Sicherheitslücke ausnutzen, um Daten in der Datenbank zu lesen, zu ändern oder zu löschen oder sich über den Authentifizierungsmechanismus der Anwendung unbefugten Zugriff zu verschaffen.

SQL-Injection-Schwachstellen treten normalerweise auf, wenn dynamische SQL-Abfrage-Builder wie JDBC, ORM usw. verwendet werden, die in Programmiersprachen wie PHP, Java, Python usw. verwendet werden.

Beispielcode

Es gibt zum Beispiel den folgenden Code:

	public List<User> sqlInjection(String id) {
		String sql = "select * from usr where id = "+id;
		List<User> list = em.createNativeQuery(sql,User.class).getResultList();
		return list;
	}

Hier wird der Benutzer abgefragt, indem der ID-Parameter des Benutzers übergeben wird. Wenn der Wert von id eine normale Benutzer-ID ist, ist alles sicher. Wenn der Wert von id beispielsweise lautet, lautet die vollständige SQL 1 :

select * from usr where id = 1

Aber wenn der Wert von id auf gesetzt ist1 or 1=1

Guess you like

Origin blog.csdn.net/oscar999/article/details/130878906