[웹프로그래밍과 PHP] 4. 반복문(while,for)

in #kr5 years ago

프로그래밍에서 조건문만큼 많이 쓰이는 것이 반복문이다. 반복문을 사용하면, 효과적으로 반복해서 공격을 수행하는 프로그램을 만들 수도 있으며, 불필요한 조건문의 반복 사용을 줄일 수도 있다.

PHP의 반복문으로는 while()문과 for()문이 있다. 두 반복문 모두 임의의 변수에 값을 설정한 후, 값을 증가 혹은 감소시켜 특정 조건이 만족할 때까지 반복하게 하는 구조로 되어 있다. 이를 루프(loop) 구조라고 한다.

루프 구조에는 보통 세 가지 요소가 온다. 첫째는 임의의 변수에 초기값을 할당하는 초기 표현식이다. 일반적으로 초기 표현식에는 $i=1처럼 숫자가 오지만, 여러 가지 방식으로 응용이 가능하다. 둘째는 초기 표현식을 증가시키거나 감소시키면서 반복 count를 셀 수 있게 해주는 증감문이다. 일반적으로 $i++, $i--가 많이 오는데, 이 역시 여러 가지 방식으로 응용할 수 있다. ++는 하나를 증가하라는 뜻이고, --는 하나를 감소시키라는 뜻이다. 윗몸 일으키기를 100번 반복한다고 했을 때, 1부터 100까지 차례대로 숫자를 올리면서 횟수를 세는 방식이 있고, 100부터 1까지 숫자를 내리면서 횟수를 세는 방식이 있다. 올리면서 횟수를 세는 방식이 ++이고, 내리면서 횟수를 세는 방식이 --이다. 마지막으로 루프를 탈출할 조건이 와야 한다. 윗몸 일으키기 100회라는 조건을 걸지 않으면, 반복문은 무한 루프가 된다. 따라서 $i<101이면, 루프 구조를 빠져나가라는 조건 표현식이 와야 한다.

아래는 SQL injection 구문을 출력하기 위한 While문이다.

<?php

$data=1; //초기 표현식

while ($data<=10){ //루프 탈출 조건문

       print "$data' and 1=1--\n";          //SQL injection 구문 출력


       $data++;          //증감문

}

?>

위 반복문을 실행한 결과는 아래와 같다.

while문은 if문과 형식이 비슷하다. while()안에 오는 조건문이 참이면, 반복문을 실행하고, 조건문이 거짓이면, 반복문을 빠져나온다.

위의 while문은 for문으로 변경할 수 있다.

for문의 기본 형식은 아래와 같다.

for(초기 표현식;루프 탈출 조건문;증감문)

따라서 위의 while문을 아래처럼 for문으로 바꿀 수 있다.

<?php

for($data=1;$data<=10;$data++){ //for문

       print "$data' and 1=1--\n";          //SQL injection 구문 출력

}

?>

for문을 실행하면, while문과 같은 결과가 출력된다.

  • 이 내용은 칼리!도커를해킹하다 2부의 아주 일부입니다. 책에서 더 자세히 다룹니다. 2부는 2019년 6월 출간 예정입니다.

  • 칼리!도커를해킹하다 1부는 2부를 공부하기 전에 알아야 할 내용으로 이미 전자책으로 출간되었습니다.

리디북스 https://ridibooks.com/v2/Detail?id=2853000018&fbclid=IwAR3q5hlVZeX20HWAPjWbDnqg8AqYJhx5vWQG2zLxH4xYpS0eWxOdeFLInNE

예스24 http://www.yes24.com/Product/Goods/71536932?scode=032&OzSrank=4

알라딘 https://www.aladin.co.kr/shop/wproduct.aspx?ItemId=187404326

Sort:  

Congratulations @huti! You received a personal award!

Happy Birthday! - You are on the Steem blockchain for 2 years!

You can view your badges on your Steem Board and compare to others on the Steem Ranking

Do not miss the last post from @steemitboard:

SteemitBoard Ranking update - A better rich list comparator
Vote for @Steemitboard as a witness to get one more award and increased upvotes!