제약 기반 SQL 공격
다행히도 현재 개발 자가 사 이 트 를 구축 할 때 안전 문 제 를 중시 하기 시작 했다.대부분의 개발 자 들 은 SQL 주입 구멍 의 존 재 를 의식 하고 있 습 니 다. 본 고 는 독자 와 함께 SQL 데이터 베이스 와 관련 된 다른 구멍 을 연구 하고 싶 습 니 다. 그 위 해 는 SQL 주입 과 막상막하 이지 만 흔 하지 않 습 니 다.그 다음 에 저 는 독자 에 게 이런 공격 기법 과 해당 하 는 방어 전략 을 상세 하 게 보 여 드 리 겠 습 니 다.
SQL 주입 공격
배경 설명
최근 에 저 는 재 미 있 는 코드 세 션 을 만 났 습 니 다. 개발 자 는 데이터 뱅 크 의 안전 한 접근 을 확보 하기 위해 여러 가지 방법 을 시도 해 보 았 습 니 다.새 사용자 가 등록 을 시도 할 때 다음 코드 를 실행 합 니 다.
<?php
// Checking whether a user with the same username exists
$username = mysql_real_escape_string($_GET['username']);
$password = mysql_real_escape_string($_GET['password']);
$query = "SELECT *
FROM users
WHERE username='$username'";
$res = mysql_query($query, $database);
if($res) {
if(mysql_num_rows($res) > 0) {
// User exists, exit gracefully
.
.
}
else {
// If not, only then insert a new entry
$query = "INSERT INTO users(username, password)
VALUES ('$username','$password')";
.
.
}
}
:
<?php
$username = mysql_real_escape_string($_GET['username']);
$password = mysql_real_escape_string($_GET['password']);
$query = "SELECT username FROM users
WHERE username='$username'
AND password='$password' ";
$res = mysql_query($query, $database);
if($res) {
if(mysql_num_rows($res) > 0){
$row = mysql_fetch_assoc($res);
return $row['username'];
}
}
return Null;
:
-
? —
-
(’) ? —
?
, !
, 。
-
SQL , 。 “vampire” “vampire ”, ( WHERE INSERT ) , “vampire” 。
SELECT * FROM users WHERE username='vampire ';
, LIKE 。 , , “ ” 。 ,SQL , 。
-
INSERT ,SQL varchar(n) 。 , “n” , “n” 。 “5” , “vampire” , 5 , “vampi”。
, 。
vampire@linux:~$ mysql -u root -p
mysql> CREATE DATABASE testing;
Query OK, 1 row affected (0.03 sec)
mysql> USE testing;
Database changed
users, username password , 25 。 , username “vampire”, password “my_password”。
mysql> CREATE TABLE users (
-> username varchar(25),
-> password varchar(25)
-> );
Query OK, 0 rows affected (0.09 sec)
mysql> INSERT INTO users
-> VALUES('vampire', 'my_password');
Query OK, 1 row affected (0.11 sec)
mysql> SELECT * FROM users;
+----------+-------------+
| username | password |
+----------+-------------+
| vampire | my_password |
+----------+-------------+
1 row in set (0.00 sec)
, :
mysql> SELECT * FROM users
-> WHERE username='vampire ';
+----------+-------------+
| username | password |
+----------+-------------+
| vampire | my_password |
+----------+-------------+
1 row in set (0.00 sec)
PHP 。 ( “vampire”), “vampire[ ]1” 。 , 25 vampire , 。
mysql> SELECT * FROM users
-> WHERE username='vampire 1';
Empty set (0.00 sec)
, SELECT ,SQL 25 。 , , 。 , INSERT , 25 。
mysql> INSERT INTO users(username, password)
-> VALUES ('vampire 1', 'random_pass');
Query OK, 1 row affected, 1 warning (0.05 sec)
mysql> SELECT * FROM users
-> WHERE username='vampire';
+---------------------------+-------------+
| username | password |
+---------------------------+-------------+
| vampire | my_password |
| vampire | random_pass |
+---------------------------+-------------+
2 rows in set (0.00 sec)
, “vampire” , 。 , “vampire” 18 。 , “vampire” “random_pass” , SELECT , 。 , 。 MySQL SQLite 。 。
, , 。 :
-
UNIQUE 。 , , 。 ’username’ UNIQUE , 。 , INSERT 。
-
’id’ 。 id
-
, ( )
* : dhavalkapil,FB , FreeBuf(FreeBuf.COM)
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
제약 기반 SQL 공격다행히도 현재 개발 자가 사 이 트 를 구축 할 때 안전 문 제 를 중시 하기 시작 했다.대부분의 개발 자 들 은 SQL 주입 구멍 의 존 재 를 의식 하고 있 습 니 다. 그 위 해 는 SQL 주입 과 막상막하 이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.