ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 웹기초 13주차
    보안/WEB 2024. 3. 13. 18:46

    (29) WEB3 - PHP & MySQL : 8.1.SELECT 사용법 1 - YouTube

    데이터를 가져오는 select 를 알아보자.

    select.php에서 출력하게 하려면 데이터베이스 서버에게 셀렉트 문을 전송해야 한다.

    • topic 개수에 제한을 걸 수 있다. ex.LIMIT 100

    mysqli_query에는 행이 담겨있지 않고 다른 게 있다는 것을 알 수 있다.

    mysqli_query는 실패했을 때 false를 리턴한다. 읽기 관련 sql을 실행하면 어떤 객체를 리턴한다.

    • num_rows: 행 개수

    (30) WEB3 - PHP & MySQL : 8.2.SELECT 사용법 2 - YouTube

    php의 데이터타입으로 변환하는 과정에서 mysqli_fetch_ 라는 api가 큰 역할을 한다.

    • mysqli_query: 가져온 데이터를 php에서 사용할 수 있도록 전환해서 가져온다.

    실습에서는 array를 사용했다.

    mysqli_fetch_ 실행 결과

    • 배열 리턴
    • 실제 데이터베이스에 저장된 데이터는 4건인데 출력된 건 첫 번째 행만 출력되었다.
    • 값이 두 번씩 반복되는데 자릿수와 컬럼명이 나오는 것을 통해 데이터를 선택적으로 가져오는 것이 가능하다.

    row 0

    • 결과의 자릿수 혹은 컬럼의 이름을 이용해서 데이터를 가져올 수 있다.

    • 연관 배열: 컬럼의 이름을 통해서 데이터를 가져오는 형식의 배열
    • 배열: 자릿수(인덱스)를 통해서 가져오는 형식의 배열

    자릿수를 몰라도 사용할 수 있는 연관 배열을 사용하자.

    딱 하나의 행만 가지고 싶은 경우 select * from topic where id=19; 를 하면 id 는 primary key이다.

    description도 나오게 할 수 있다.


    (30) WEB3 - PHP & MySQL : 8.3.SELECT 사용법 3 - YouTube

    행이 여러 개인 경우 어떻게 할 수 있을지 알아보자. 이전 강의는 행이 1개일 때를 실습했다.

    실행할 때마다 result가 가리키는 쿼리 문의 결과를 하나씩 배열로 리턴한다.

    cmd 창 topic

    가져올 데이터가 없을 때는 아무것도 나오지 않는다.

    가져올 데이터가 없을 때 var_dump($row); 를 실행하면 description 에 NULL 이라고 출력되는 것을 볼 수 있다.

    • mysqli_fetch 는 만약 가져올 행이 없을 때 NULL 을 준다.

    만약 데이터를 삭제하거나 추가했는데도 NULL이 출력되지 않게 해야 한다.

    반복문을 사용하자. while.php라는 파일을 생성해서 실습했다.

    A의 결과가 true 이면 B와 C를 실행시키는 것을 반복한다.

    대입연산자는 오른쪽에 있는 값을 왼쪽에 대입하면서 양 항 전체를 우항의 값으로 바꾸어주는 연산자이다.

    • var_dump(NULL == false): 는 php에서 true 이다.

    select.php에서의 내용을 while 문으로 만들어보자.

    반복문을 만들어서 반복적으로 실행되다가 더 이상 가져올 데이터가 없으면 mysql_fetch_array 는 null을 리턴하는데 php에서는 null을 false로 보면서 반복문이 종료된다.


    더 알아보기 쉽게 바꾸자.

    각 리스트를 a 태그를 사용해 나타내고 싶다. 따옴표 구분을 위해 \을 사용해주자.

    링크가 걸린 것을 알 수 있다. id =7 이라는 정적인 데이터를 동적인 데이터로 바꾸자.

    그리고 링크를 클릭해보자. MySQL 클릭 시

    url 창에 id도 잘 바뀌는 것을 볼 수 있다.


    (30) WEB3 - PHP & MySQL : 9.2.활용 - 글읽기 2 - YouTube

    선택한 글에 해당되는 본문을 출력하는 코드를 작성해보자.

    id 값이 자동으로 생성된다. mysql 서버에 연결해주도록 코드를 작성해주자.

    article이라는 정보를 제목 표시로 넣어주고 본문 부분에는 descriptiion을 넣어주자.

    에러가 나지 않도록 조건문을 만들어주고 h1태그에도 링크를 걸어주자.


    (30) WEB3 - PHP & MySQL : 10.1.보안 - filtering - YouTube

    사용자로부터 정보를 받는 순간부터는 정보의 오염 관련 문제가 발생할 수 있다.

    보안관련 사고는

    • 들어오는 정보에서 문제가 있는 정보를 막아내는 것
    • 문제가 있는 정보가 이미 들어와있는 상태에서 그 정보가 사용자들에게 노출될 때 문제가 있는 정보를 차단하는 것

    입력한 정보에서 문제가 될 만한 정보를 차단하는 행위를 필터링이라고 한다. filtering

    저장되어 있는 정보를 사용자에게 표시할 때 발생할 수 있는 문제를 차단하는 것을 이스케이핑이라고 한다. escaping

    보안의 원칙

    • 사용자가 입력하는 정보를 철저히 불신해야 한다.

    -> mysqli_real_escape_string 사용 : sql을 주입하는 공격과 관련된 기호를 문자로 바꾸는 함수


    (30) WEB3 - PHP & MySQL : 10.2 보안 sql injection의 원리 - YouTube

    sql 인젝션 공격의 위험성을 알아보자.

    sql 문 주석- 데이터베이스 서버는 무시한다. -- SELECT * FROM topic; 은 무시된다.

    NOW()를 sql 인젝션을 사용하면 바꿀 수 있다. mysqli_multi_query를 사용한다.

    만약 사용자가 시간을 조작하려고 다른 날짜를 쓰고 NOW() 부터 나머지를 무시하도록 -- 를 사용하면 데이터베이스 서버는 날짜를 인식한다. 그렇게 되면 성공했다고 뜨게 된다. 하지만 만갹 mysqli_real_escape_string 을 사용한다면 코드가 그대로 데이터베이스 안으로 유입된다. 다른 테이블을 지울 수도 있다. 관리자 권한으로 모든 데이터 베이스 시스템의 유저들에 대한 비밀번호를 조회할 수 있고 새로운 유저를 만들 수도 있게 된다. 그렇게 되면 서버 컴퓨터를 점령할 수도 있다.


    (30) WEB3 - PHP & MySQL : 10.3 보안 - escaping - YouTube

    사용자가 데이터를 입력하면서 악의적인 목적으로 자바스크립트 코드를 주입할 수도 있다.

    크로스 사이트 스크립팅 이라는 공격 기법으로 공격할 수 있다. 쿠키나 매우 중요한 정보들을 공격자가 자신의 사이트로 유출시켜서 사용자의 권한을 획득해 로그인을 시도할 수도 있고 로그인 되어 있는 사용자가 활동하다가 크로스 사이트 스크립팅으로 정보를 빼돌릴 수도 있다.

    꺽쇠가 html에서는 태그의 신호를 알리는 것이다. 꺽쇠 자체를 사용자에게 보여주는 방법은 < 내용>을 사용하면 된다.

    php에서는 echo htmlspecialchars('<script>alert</script>');

    ?>

    </body> 을 사용한다.


    (30) WEB3 - PHP & MySQL : 11.1.활용 - 글쓰기 1 - YouTube

    입력은 생성 수정 삭제가 있다.

    이제 수정과 삭제를 해야 한다.

    수정하는 방법)



    파라미터를 통해 가져오는 방식이다.

    생성 수정 삭제와 같은 변경 작업에서는 get 방식 말고 post 방식을 사용한다.

    '보안 > WEB' 카테고리의 다른 글

    웹기초 12주차  (0) 2024.03.13
    웹기초 11주차  (0) 2024.03.13
    웹기초 10주차  (0) 2024.03.13
    웹기초 9주차  (0) 2024.03.13
    웹기초 8주차  (0) 2024.03.13
Designed by Tistory.