호랑사과

[생활코딩] 웹어플리케이션 만들기 11일차 본문

작업실/웹프로그래밍

[생활코딩] 웹어플리케이션 만들기 11일차

호랑사과 2017. 7. 23. 10:17

이 글은 오픈튜토리얼스의 생활코딩의 '웹어플리케이션 만들기'를 듣고 개인적으로 정리한 내용입니다. 

굵은 글씨로 된 제목을 누르시면 해당 강좌로 이동할 수 있습니다.


보안

 

  최고의 보안 담당자는 우리 시스템에 침입한 크래커이다. 보안에 대한 좋은 습관을 가질 필요가 있다.



  입력을   위와 같이 script 태그를 입력하면 작동 되는 것을 있는데 이는 보안이 취약하다는 것을 있다. JS 자유도가 높기 때문에 이를 이용해서 피싱 등으로 악용할 가능성이 높다.

 

 

 

    그래서 htmlspecialchars라는 php 함수를 이용한다. 함수는 꺾쇠(<,>) 등을 문자로 바꿔주는 역할을 해준다.

 

 

  사용자가 작성한 내용, 신뢰도가 떨어지는 내용에 대해 htmlspecialchars 씌워준다. 하지만 내용($row['description'])까지 씌워주면 아래와 같이 나올 있다.

 

 

  사용했던 태그들이 고스란히 나오게 된다는게 문제인데 이를 해결하기 위해서는 htmlspecialchars 아닌 strip_tags 이용하여 해결한다. 사용하는 인자는 해당 내용, 허용하고자 하는 태그들을 적어주면 된다. strip_tags 말그대로 태그들을 벗겨낸다는 의미로 인자에 허용되지않은 태그들을 없애주는 역할을 한다.

 

 

  적용을 하면 위와 같이 태그가 적용되어 내용을 출력하고

 

 

  앞서 적었던 script 태그는 적용되지않고 날아가 JS 적용되지 않음을 확인할 있다.


 

데이터베이스 보안

 

 

  위와 같이 egoing password 111111 맞게 적으면 출력이 되지만 다른 것을 입력하였을 출력이 되지 않는다. 이를 이용하여 로그인 화면을 만들 있다.

 




 

  password 맞게 입력하면 num_rows 값이 int(1) 나오고 틀리게 입력하면 int(0) 출력된다. 이를 이용해서 로그인 화면을 만드는 소스코드는 다음과 같다.

 

 

  num_row 값만 뽑기 위해 $result->num_rows 사용하였다. 하지만 보안적으로 취약하다.

 

 

  위와 같이 뒤에 OR 1=1 붙이면 1=1 항상 참이 되어 모든 값이 나오게 된다. 이를 악용하면 다음과 같은 일이 벌어진다.

 


 

  위의 주소창 대로 적으면 php 소스코드로 적용이 되어 password 틀렸음에도 불구하고 통과가 되는 것을 있다.

 

 

  다음과 같이 코드를 고쳐서 작성하면 무효가 되는 것을 있다. 

  mysqli_real_escape_string 함수는 번째 인자에 어떠한 특수 문자가 있으면 특수문자 앞에 역슬래시(\) 추가로 붙여줘 문자로 만들어 준다. 그래서 주소창에 적었던  작은 따옴표들은 역슬레시가 붙여서 php 코드로 적용되지가 않는다.