호랑사과
[생활코딩] 웹어플리케이션 만들기 11일차 본문
이 글은 오픈튜토리얼스의 생활코딩의 '웹어플리케이션 만들기'를 듣고 개인적으로 정리한 내용입니다.
굵은 글씨로 된 제목을 누르시면 해당 강좌로 이동할 수 있습니다.
최고의 보안 담당자는 우리 시스템에 침입한 크래커이다. 보안에 대한 좋은 습관을 가질 필요가 있다.
입력을 할 때 위와 같이 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 코드로 적용되지가 않는다.
'작업실 > 웹프로그래밍' 카테고리의 다른 글
[생활코딩] 웹어플리케이션 만들기 13일차 (0) | 2017.07.23 |
---|---|
[생활코딩] 웹어플리케이션 만들기 12일차 (0) | 2017.07.23 |
[생활코딩] 웹어플리케이션 만들기 10일차 (0) | 2017.07.23 |
[생활코딩] 웹어플리케이션 만들기 9일차 (0) | 2017.07.23 |
[생활코딩] 웹어플리케이션 만들기 8일차 (0) | 2017.07.08 |