CORS, CSP, HSTS 및 모든 웹 보안 약어에 대한 웹 개발자 입문서!웹 보안에 대해 배워야하는 이유는 다음과 같습니다. Show
등등. 이 게시물은 이해하기 쉽지만 여전히 정확한 방식으로 일반적인 웹 보안 약어를 설명합니다. 그 전에 보안의 몇 가지 핵심 개념을 이해해야합니다. 보안의 두 가지 핵심 개념아무도 100 % 안전하지 않습니다.해킹으로부터 100 % 보호된다는 개념은 없습니다. 누군가가 당신에게 그렇게 말하면 그들은 틀린 것입니다. 하나의 보호 계층으로는 충분하지 않습니다.당신은 말할 수 없습니다 ... 아, CSP를 구현했기 때문에 안전합니다. 지금은 불가능하므로 취약점 목록에서 교차 사이트 스크립팅을 제거 할 수 있습니다. 그것은 어떤 사람들에게 주어진 것일 수도 있지만, 이런 식으로 생각하는 자신을 찾는 것은 쉽습니다. 프로그래머가 이런 식으로 쉽게 생각할 수있는 한 가지 이유는 코딩의 대부분이 흑백, 0 또는 1, 참 또는 거짓이기 때문이라고 생각합니다. 보안은 그렇게 간단하지 않습니다. 우리는 모두가 웹 개발 여정의 초기 단계에서 마주 치는 것으로 시작하겠습니다. 그런 다음 StackOverflow를 살펴보고 우회하는 방법을 알려주는 많은 답변을 찾습니다. CORS (Cross-Origin Resource Sharing)다음과 같은 오류가 발생한 적이 있습니까?
당신은 확실히 혼자가 아닙니다. 그런 다음 Google을 검색하면 누군가가 모든 문제를 해결할 수있는이 확장 프로그램을 가져 오라고합니다! 좋아요, 그렇죠? CORS는 당신을 해치지 않고 보호하기 위해 존재합니다! CORS가 어떻게 도움이되는지 설명하기 위해 먼저 쿠키, 특히 인증 쿠키에 대해 이야기하겠습니다 . 인증 쿠키는 사용자가 로그인되었음을 서버에 알리는 데 사용되며 해당 서버에 대한 요청과 함께 자동으로 전송됩니다. Facebook에 로그인되어 있고 인증 쿠키를 사용한다고 가정 해
보겠습니다. 당신은 당신 CORS가없는 세상에서는 사용자가 모르게 계정을 변경할 수 있습니다. 물론, 그들이 그러나 CORS 세계에서 Facebook은 원본이있는 요청 만 superevilwebsite.rocks는 요청에 따라 원본 헤더를 변경하여 facebook.com에서 오는 것처럼 보이게 할 수 있습니까? 시도 할 수는 있지만 브라우저가이를 무시하고 실제 출처를 사용하기 때문에 작동하지 않습니다. 좋습니다.하지만 superevilwebsite.rocks가 서버 측에서 요청을했다면 어떻게 될까요? 이 경우 CORS를 우회 할 수 있지만 승차를 위해 인증 쿠키를 보낼 수 없기 때문에 이길 수 없습니다. 클라이언트 측 쿠키에 액세스하려면 스크립트를 클라이언트 측에서 실행해야합니다. 콘텐츠 보안 정책 (CSP)CSP를 이해하려면 먼저 웹에서 가장 일반적인 취약점 중 하나 인 XSS에 대해 이야기해야합니다. XSS는 크로스 사이트 스크립팅을 의미합니다 (예, 다른 약어). XSS는 악의적 인 사람이 클라이언트 측 코드에 JavaScript를 삽입하는 경우입니다. 그렇게 생각 할수 있겠지… 그들이 뭘하려는 건가요? 빨간색에서 파란색으로 색상을 변경 하시겠습니까? 누군가 당신이 방문하는 웹 사이트의 클라이언트 측 코드에 JavaScript를 성공적으로 주입했다고 가정 해보자. 그들이 악의적 인 행동을 할 수 있습니까?
가능성은 무한합니다. CSP는 다음을 제한하여 이러한 일이 발생하지 않도록합니다.
그래서 어떻게 작동합니까? 링크를 클릭하거나 브라우저의 주소 표시 줄에 웹 사이트 URL을 입력하면 브라우저가 GET 요청을합니다. 결국 일부 HTTP 헤더와 함께 HTML을 제공하는 서버로 이동합니다. 어떤 헤더가 수신되는지 궁금하다면 본체에서 네트워크 탭을 열고 웹 사이트를 방문하세요. 다음과 같은 응답 헤더가 표시 될 수 있습니다.
이것이의 콘텐츠 보안 정책입니다
이제 지시문을 분해 해 보겠습니다.
위에 표시된 네 가지보다 더 많은 CSP 지시문이 있습니다. 브라우저는 CSP 헤더를 읽고 제공된 HTML 파일 내의 모든 것에 해당 지시문을 적용합니다. 지시문이 적절하게 설정되면 필요한 것만 허용합니다. CSP 헤더가 없으면 모든 것이 진행되고 아무것도 제한되지 않습니다. 당신이 볼 수있는 모든 곳 HTTPS 또는 HTTP 보안확실히 HTTPS에 대해 들어 보셨을 것입니다. 어떤 사람들이 ... 게임을하는 웹 사이트에서 HTTPS 사용에 관심이있는 이유는 무엇입니까? 아니면 상대방의 말을 들었을 수도 있습니다. 사이트에 HTTPS가 없으면 미쳤습니다. 2018 년입니다! 달리 말하는 사람을 믿지 마십시오. 이제 Chrome이 HTTPS가 아닌 경우 사이트를 안전하지 않은 것으로 표시한다고 들었을 것입니다. 핵심에서 HTTPS는 매우 간단합니다. HTTPS는 암호화되고 HTTP는 암호화되지 않습니다. 그렇다면 민감한 데이터를 보내지 않는데 왜 이것이 중요할까요? 또 다른 약어를 준비하십시오.… MITM은 Man in the Middle을 의미합니다. 커피 숍에서 비밀번호없이 공용 Wi-Fi를 사용하는 경우, 누군가가 라우터처럼 행동하기가 매우 쉬워서 모든 요청과 응답이이를 통과합니다. 데이터가 암호화되지 않은 경우 원하는 모든 작업을 수행 할 수 있습니다. HTML, CSS 또는 JavaScript가 브라우저에 도착하기 전에 편집 할 수 있습니다. 우리가 XSS에 대해 알고있는 것을 감안할 때 이것이 얼마나 나쁠 수 있는지 상상할 수 있습니다. 좋아,하지만 내 컴퓨터와 서버가 암호화 / 복호화하는 방법을 어떻게 알고 있지만이 MITM은 그렇지 않습니까? That’s where SSL (Secure Sockets Layer) and more recently, TLS (Transport Layer Security) come in. TLS took over for SSL in 1999 as the encryption technology used within HTTPS. Exactly how TLS works is outside of the scope of this post. HTTP Strict-Transport-Security (HSTS)This one is pretty straightforward. Let’s use Facebook’s header as an example again:
This header only applies if you accessed the site using HTTPS. If you accessed the site via HTTP, the header is ignored. The reason is that, quite simply, HTTP is so insecure that it can’t be trusted. Let’s use the Facebook example to further illustrate how this is helpful in practice. You are accessing Closing ThoughtsWeb security is important no matter where you are in your web development journey. The more you expose yourself to it, the better off you will be. Security is something that should be important to everyone, not just the people who have it explicitly named in their job title! ? |