티스토리 뷰

ex) 쇼핑몰에 있는 100달러 이하의 모든 상품을 보려할 경우 다음과 같은 URL 사용할 수 있음.

- http://www.victim.com/products.php?val=100

다음에 나올 PHP 코드는 사용자가 입력한(val)값이 어떻게 동적으로 SQL 구문을 생성하는지 보여준다. 해당 PHP 코드는 앞서 말한 URL이 요청되면 실행된다.

//데이터베이스에 연결

$conn = mysql_connect("localhost", "username", "password");

// 입력 값을 이용해 동적으로 SQL 구문을 생성

$query = "SELECT * FROM Products WHERE Price <'$_GET["val"]'" .

"ORDER BY ProductDescription";

//데이터베이스에서 쿼리 실행

$result = mysql_query($query);

//반복 실행

while($row = mysql_fetch_array($result, MYSQL_ASSOC))

{

//결과를 브라우저에 표시

echo "Description : {$row['ProductDescription']} <br>" .

"Product ID : {$row['ProductID']} <br>" .

"Price : {$row['Price']} <br><br>";


단순 어플리케이션 구조

- 데이터베이스 기반 웹 어플리케이션은 공통적으로 3계층으로 이루어진다. 

1. 사용자 인터페이스

- 어플리케이션의 최상위 계층이고, 상품이나 물품구입, 장바구니와 같이 서비스와 관련된 정보를 제공하고, 출력 결과를 이용해 네트워크 상에 존재하는 모든 계층과 소통한다.

2. 비즈니스 로직

- 사용자인터페이스로부터 연결되며 비즈니스 로직의 개별 프로세스를 통해 어플리케이션 함수를 제어하는 계층이다. 

3. 데이터베이스 계층

- 데이터베이스 서버로 구성된다. 바로 이곳에 정보가 저장되고 배포된다. 이 계층에서는 어플리케이션 서버나 비즈니스 로직으로부터 데이터 독립을 유지한다. 또한 데이터의 확장성과 성능향상을 제공한다.

* 3계층 구조의 중요한 규칙은 절대로 사용자 인터페이스에서 직접 데이터베이스 계층과 통신할 수 없다.


파라미터(val)에 SQL 명령을 덧붙여 입력 값을 조작(URL에 ' OR '1'='1 문자열 추가)

= http://www.victim.com/products.php?val=100' OR '1'='1

앞서 PHP로 생성 및 실행한 SQL 구문의 결과는 가격과 상관없이 모든 상품정보를 반환한다. 이러한 결과는 쿼리에 대해 논리적 연산을 조작했기 때문이다. 쿼리에 포함된 OR 연산은 "1의 값이 1과 같은지"에 대해 결과를 앞쪽의 조건과 OR 연산을 수행하게 되는데, 그 결과는 항상 참(TRUE)이 된다.

*실제 수행된 쿼리 구문

SELECT * FROM ProductsTbl WHERE Price < '100.00 OR '1'='1' ORDER BY ProductDescription;





댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함