http가 뭘까?
http는 통신 프로토콜 => 즉 규약이다 (약속이라는 말)
브라우저와 서버가 통신을 할 때 보안문제가 발생 하면 화면과 동작에도 영향이 있어 정보 유출 등의 사고가 생길 수 있다.
브라우저는 HTTP라고 하는 통신 프로토콜에 따라 서버와 통신해서 리소스(HTML,CSS, 이미지 등)를 가져오거나 데이터를 생성 또는 업데이트, 삭제 한다.
여러 통신을 하면서 데이터를 주고 받고, 업데이트하는 것을 개발자도구 Network 탭에서 확인해 볼 수 있다.
브라우저의 통신흐름
HTTP 요청 & 응답
개발자도구에서 응답과 요청에 대한 정보를 확인할 수 있다.
요청라인, 헤더, 바디 등을 확인해 볼 수 있다.
HTTP 메서드
HTTP 메서드에는
GET, HEAD, POST, PUT, DELETE, CONNECT, OPTIONS, TRACE가 있다.
POST, PUT, DELETE는 부작용의 가능성이 있는 메서드이다.
Node.js 를 공부하다보면 PUT과 DELETE 메서드를 사용하는 것을 예제에서 봤는데 막상 실무에서 일을하다보니
GET 또는 POST 메서드만 사용했다.
그래서 그때 수석님께 물어봤는데 PUT과 DELETE 메서드는 사용하면 위험해서 사용안한다~ 라는 답변을 듣고,
이직할 때 당차게 PUT과 DELETE는 사용의 위험성이 존재해 사용하지 않는다고 알고 있습니다. 라고 말했는데
그 위험성이 뭔가요 라고 역질문을 받고 제대로 답변을 못한 추억이 있다 😂😂😂
이제는 어렴풋이 이유를 말할 수 있을 것 같다.
PUT 메소드와 DELETE 메소드의 경우 임의로 서버 내 파일 생성 또는 삭제를 할 수 있는 메소드로 인가되지 않은 사용자로 인해 서버가 조작될 위험이 있는 메소드
안전한 통신 HTTPS
http 사이트에 접속하면 브라우저에서 아래사진과 같은 경고를 띄워준다.
HTTP 대책으로 HTTPS가 나왔다.
실무에서는 꼭 HTTPS를 사용해야한다!! (SSL 인증서 발급받아서)
HTTP는 통신데이터 도청이 가능하다.
통신 데이터를 암호화하는 시스템이 없어서 공격자가 통신경로의 도청이 가능하다.
따라서 통신구간 데이터를 암호화하던지 등의 대책이 필요하다 (RSA 암호화를 사용해야할듯)
HTTP는 통신 상대의 진위여부 확인이 어렵다. 공격자가 만든 서버로 민감한 정보가 유출될 수 있다.
HTTP는 통신 과정에서 데이터 수정여부가 확인이 안된다. 공격자가 데이터내용을 수정해서 서버로 전송하더라도 서버에서는 받은 요청대로 처리를 한다. 데이터의 결함이나 무결성을 보장할 수 없다.
위와 같은 HTTP 약점의 대책이 바로 HTTPS이다.
HTTPS는 TLS라고 하는 통신 프로토콜 사용해서 HTTP 데이터를 암호화해서 통신하는 구조이다.
공격자가 HTTPS 통신을 도청하려고 해도 비밀키를 갖고 있지 않아서 데이터의 내용을 볼 수 없다.
또한 통신 상대 검증을 한다. 서버에서 전송된 인증서는 브라우저가 검증하고 다시 브라우저와 OS에 있는 인증서와 대조한다.
TLS는 데이터 변조를 체크하는 기능도 있다.
오잉😲 근데 개발할 때 사용하는 로컬호스트는 http://localhost~~ 인데??!!
- https:// 또는 wss:// 암호화 통신
- http://localhost, http://127.0.0.1, file:// 의 URL로 시작하는 로컬호스트 통신
위에 조건은 Secure Context(안전한 콘텍스트)로 간주된다.
회사에서 개발하다가 통신구간 암호화를 AES에서 RSA로 바꾸게 되었다.
회원의 개인정보를 AES방식으로 암호화해서 서버와 통신하고 있었는데,
AES 방식으로 암호화 할 시 개발자도구에 key값이 노출되서 언제든지 노출된 키를 이용해 암호화를 복호화 할 수 있었다.
그래서 서버에서 API 통신을 통해 RSA 공개키를 받아와 암호화해서 전송하는 방식으로 바꾸었다.
근데 "프론트엔드 개발을 위한 보안입문" 책을 읽다보니
https는 통신을 도청하지 못한다는 내용이 있었다.
그럼 굳이 RSA 암호화를 안해도 되는건가...? 아님 뭐라도 추가적으로 해놓으면 보안에 더 좋은 것일까?
아직도 해결되지 않은 궁금증이다.
이렇게 2개의 글을 봤는데
일단 우리 회사는 https 인데, RSA암호화를 추가적으로 하고 있다.
개발자도구에서 평문으로 전달되는것 때문에 하는건데 댓글을 확인해보면
종단간 암호화이기 때문에 종단, 즉 통신의 당사자는 내용을 아는 것이 당연한 것 이라는 댓글이 있다.
'Frontend > 전체' 카테고리의 다른 글
[보안] Javascript 보안에 대해서 (+추천 사이트) (0) | 2024.08.10 |
---|