Heim >Datenbank >MySQL-Tutorial >So implementieren Sie die Kürzung langer Zeichen in MySQL

So implementieren Sie die Kürzung langer Zeichen in MySQL

WBOY
WBOYnach vorne
2023-06-03 11:37:121644Durchsuche

Das Abschneiden ultralanger Zeichen in MySQL, auch bekannt als „SQL-Column-Truncation“, wurde im August 2008 vom Sicherheitsforscher Stefan Esser vorgeschlagen.

Es gibt eine sql_mode-Option in einer Einstellung in MySQL. Wenn sql_mode auf den Standardwert eingestellt ist, d ein zu langer Wert. Dies kann zu Problemen beim Abschneiden führen.

Erstellen Sie eine neue Tabelle zum Testen. Die Tabellenstruktur ist wie folgt (MySQL5.1):

CREATE TABLE USERS(
id int(11) NOT NULL, //长度为7
username varchar(7)NOT NULL,
password varchar(12)NOT NULL , 
)

Fügen Sie jeweils die folgenden SQL-Anweisungen (Inject-Prompt-Meldungen) ein.

①Fügen Sie eine normale SQL-Anweisung ein.

mysql> insert into users(id,username,password)values(1,'admin','admin');//成功插入,无警告,无错误
 
Query OK,1 row affected(0.00 sec)

②Fügen Sie die falsche SQL-Anweisung ein. Zu diesem Zeitpunkt befinden sich rechts von „admin“ drei Leerzeichen und die Länge beträgt 8, was die ursprünglich angegebene Länge überschreitet.

mysql> insert into users(id,username,password)values(2,'admin       ','admin');
//成功插入,一个警告
Query OK,1 row affected,1 warning(0.00 sec)

③Die falsche SQL-Anweisung wurde eingefügt und die Länge hat die ursprünglich angegebene Länge überschritten.

mysql> insert into users(id,username,password) values(3,'admin    x','admin');
//成功插入,一个警告
Query OK,1 row affected,1 warning(0.00 sec)

MySQL meldet, dass alle drei Anweisungen in die Datenbank eingefügt wurden, die letzten beiden Anweisungen jedoch Warnungen generierten. Sie können bestätigen, ob es in die Datenbank eingefügt wurde, indem Sie eine SQL-Anweisung ausführen.

mysql> select username from users;

Sie können sehen, dass alle drei Daten in die Datenbank eingefügt wurden, die Werte sich jedoch geändert haben. Zu diesem Zeitpunkt wird die Länge durch Länge ermittelt, um die Länge des Werts zu bestimmen.

mysql> select length(username)from users where id =1 ;

Es kann festgestellt werden, dass die Länge der zweiten und dritten Daten 7 beträgt, was der angegebenen Länge der Spalte entspricht. Es ist ersichtlich, dass MySQL standardmäßig abschneidet, wenn die Daten die Standardlänge der Spalte überschreiten Es.

Aber wie kann das als Angriff gewertet werden?

Das können Sie herausfinden, indem Sie den Benutzernamen „admin“ abfragen.

mysql> select username from users where username='admin';

Es wird nur der Benutzer mit dem Namen admin abgefragt, aber auch die anderen beiden Admin-Benutzer mit inkonsistenter Länge werden abgefragt, was zu einigen Sicherheitsproblemen führt. Beispielsweise gibt es eine Administrator-Anmeldung, die auf diese Weise beurteilt wird. Die Aussage lautet wie folgt :

$sql = "select count(*) from users where username='admin' and password='*******;

Auch wenn die SQL-Anweisung keine Injektionsschwachstelle aufweist, kann sich der Angreifer dennoch auf der Verwaltungsseite anmelden. Angenommen, der Benutzername des Administrator-Logins lautet admin, dann muss der Angreifer nur einen „Administrator“-Benutzer registrieren, um problemlos auf die Backend-Verwaltungsseite zuzugreifen. Das berühmte WordPress wurde auf diese Weise angegriffen.

Das obige ist der detaillierte Inhalt vonSo implementieren Sie die Kürzung langer Zeichen in MySQL. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen