>데이터 베이스 >MySQL 튜토리얼 >MySQL에서 긴 문자 잘림을 구현하는 방법

MySQL에서 긴 문자 잘림을 구현하는 방법

WBOY
WBOY앞으로
2023-06-03 11:37:121645검색

"SQL-Column-Truncation"이라고도 알려진 MySQL의 매우 긴 문자 잘림은 2008년 8월 보안 연구원 Stefan Esser가 제안했습니다.

MySQL 설정에 sql_mode 옵션이 있습니다. sql_mode가 기본값으로 설정된 경우, 즉 STRICT_ALL_TABLES 옵션이 활성화되지 않은 경우(MySQLsql_mode가 기본값으로 설정됨) MySQL은 삽입 시 오류 대신 경고 메시지만 표시합니다. 값이 너무 길어서 일부 잘림 문제가 발생할 수 있습니다.

테스트용 새 테이블을 생성합니다. 테이블 구조는 다음과 같습니다(MySQL5.1).

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

다음 SQL 문(프롬프트 메시지 삽입)을 각각 삽입합니다.

①일반 SQL 문을 삽입합니다.

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

②잘못된 SQL 문을 삽입했습니다. 이때 "admin" 오른쪽에 공백이 3개 있고 길이가 8개로 원래 지정된 길이를 초과했습니다.

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

③잘못된 SQL 문이 삽입되어 길이가 원래 지정된 길이를 초과했습니다.

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

MySQL은 세 문이 모두 데이터베이스에 삽입되었다는 메시지를 표시하지만 마지막 두 문은 경고를 생성했습니다. SQL문을 실행하여 데이터베이스에 삽입되었는지 확인할 수 있다.

mysql> select username from users;

세 개의 데이터가 모두 데이터베이스에 삽입된 것을 볼 수 있는데, 이때 값의 길이를 길이로 구해 값의 길이를 결정합니다.

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

두 번째와 세 번째 데이터의 길이가 컬럼의 지정된 길이인 7임을 알 수 있는데, 기본적으로 데이터가 컬럼의 기본 길이를 초과하면 MySQL이 잘리는 것을 볼 수 있습니다. 그것.

하지만 이것이 어떻게 공격으로 간주될 수 있습니까?

사용자 이름 'admin'을 검색해 보면 알 수 있습니다.

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

admin이라는 이름의 사용자만 쿼리하지만, 길이가 일치하지 않는 다른 두 명의 admin 사용자도 쿼리하므로 일부 보안 문제가 발생할 수 있습니다. 예를 들어 이렇게 판단되는 관리자 로그인이 있습니다. :

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

SQL 문에 인젝션 취약점이 없더라도 공격자가 관리 페이지에 로그인할 수 있습니다. 관리자 로그인의 사용자 이름이 admin이라고 가정하면, 공격자는 "admin" 사용자만 등록하면 백엔드 관리 페이지에 쉽게 진입할 수 있습니다. 이런 방식으로 유명한 WordPress가 공격을 받았습니다.

위 내용은 MySQL에서 긴 문자 잘림을 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제