본문 바로가기

책 정리/생활코딩 php+mysql

생활코딩 php+mysql (2/2)

Q: 데이터베이스를 이용할 때는 head에 utf-8로 설정하는 과정을 거쳤다.

 

 

 

 

++middleware=php는 web과 mysql을 연결하는 접착제로서 기능하게 된다. 이런 기술을 "미들웨어"라고함.

 

++exit;(인자받는 공간없음, 이게 다임), die()함수==>디버깅할 때 유용하다.

 

++문자의 시작과 끝을 알리는 "구분자"=quote!!

 

-----------------------------------------------------security---------------------------------------------------------------------<보안>

HTML페이지를 그냥 웹서버에 올리겠다고 하면 보안과 관련된 이슈는 전혀 없다고 보면 된다.

보안과 관련한 많은 사고들이 데이터베이스와의 연동에서 일어난다.

    1. 필터링: 들어오는 정보에 문제가 있는경우를 막는 것.

    2. 이스케이핑: 문제있는 정보가 이미 들어와있는 상태에서 그 정보가 사용자들에게 노출되는 것을 막는 것.

사용자가 입력한 정보를 철저히 불신하라.

<필터링>

SQL injection방어=mysqli_real_escape_string(), 이 함수는 quote와 같이 sql injection에 사용될 수 있는 기호를 이스케이프 시킨다.

SQL의 주석="--"

 

 

root(관리자 권한)은 모든 데이터베이스 시스템의 사용자에 대한 비밀번호를 조회할 수 있고, 새로운 사용자를 만들 수도 있다. SQL주입공격으로 새로운 사용자를 만들고 그 사용자에게 슈퍼유저의 권한을 주면 DB가 점령당한다. SQL서버같은 경우 DB를 통해 운영체제의 명령을 내릴 수 있기 때문에 DB뿐만 아니라 그 DB가 사용하고 있는 서버 컴퓨터를 점령할 수 있는 것이다.

DB와 connect할 때 root가 아닌 다른 사용자를 만들어서 사용해야한다.

 

<이스케이핑>

XSS공격은 결국 "출력될 때" 발동된다! 출력이 되지 않는다면 아무소용 없다.

ex) create에서 내용에 <script>를 주입해서 글을 만들었을 때, 아무것도 모르는 사용자가 그 글을 클릭하면 스크립트가 발동된다! 클릭하지 않으면 발동되지 않는다!

 

XSS에 관해서는 입력값은 뭐가 들어와도 좋다. But, html에 출력할 때는 무조건 htmlspecialchars()로 감싸야 할듯.

htmlspecialchars(): html구분자 <,>이런것 들을 구분자로 인식하지 않고 문자로 인식해 그대로 출력한다.(이스케이핑)

 

조금 생각해보자면 specialchars는 XSS보안에, escape_string은 SQL injection 보안에 사용되는 것같다. 내가 고민 했던 것은 create의 title이나 description이 모두 XSS와 SQL injection의 위험을 안고 있는데 하나의 함수로만 보안을 해놓아서 그럼 다른 위험은 없어서 저렇게 한건가?? 이런 생각을 했다. 그런데 그건 아닌듯.

아직 잘 모르지만 내 생각에는 htmlspecialchars()와 mysqli_real_escape_string()은 각각의 역할이 정해져있고 자신만의 영역이 정해진 관계가 아니라 둘다 보안을 막기 위한 함수 일 뿐이다. 책을 읽으면서 왜 이부분은 specialchars고 왜 저부분은 escape_string인지 저기도 specialchars써야 하는 건 아닌가 이렇게 고민 했었는데 지금은 그렇게 깊이 배우는 단계가 아닌 만큼 이런 생각까지는 해결해주지 않고 넘어가는 것 같다.

'책 정리 > 생활코딩 php+mysql' 카테고리의 다른 글

생활코딩 php+mysql (1/2)  (0) 2020.03.18