미래 지향적인 웹 앱 구축: The Codest의 전문가 팀이 제공하는 인사이트
The Codest가 최첨단 기술로 확장 가능한 대화형 웹 애플리케이션을 제작하고 모든 플랫폼에서 원활한 사용자 경험을 제공하는 데 탁월한 성능을 발휘하는 방법을 알아보세요. Adobe의 전문성이 어떻게 디지털 혁신과 비즈니스를 촉진하는지 알아보세요...
가장 널리 사용되는 자바스크립트 라이브러리의 개발 역사(Angular, React 및 Vue의 경우 각각 9년, 6년 및 5년)에서 보안, 특히 XSS 공격 취약성과 관련하여 많은 좋은 일이 있었다는 것을 인정해야 합니다. 그러나 이 글에서는 개발자가 여전히 알고 있어야 할 작은 함정과 원칙에 대해 설명합니다.
우리는 언어가 아닌 프레임워크의 시대에 살고 있습니다. 이는 프로그래머가 보안을 포함한 개발의 여러 측면에 대해 덜 걱정할 수 있어야 한다는 것을 의미합니다. 현재 대부분의 백엔드 프레임워크는 보안 모듈을 구현하고 있으며, 외부 전문 기업 및 대기업에서 테스트하고 있습니다. 따라서 보안 인식 저하 특히 프리랜서인 경우 제품에 대한 책임감이 더 큰 젊은 프로그래머들 사이에서 두드러질 수 있습니다.
애플리케이션의 클라이언트 측에 대한 일반적인 공격 중 하나는 XSS(크로스 사이트 스크립팅)입니다. 실행 가능한 클라이언트 측 스크립트를 웹 애플리케이션에 삽입하여 수행되며[1], 구현된 HTML 렌더링 메서드 또는 자바스크립트 코드 평가자를 실행합니다. 세션 쿠키나 사용자 데이터 등 다양한 데이터를 수집할 수 있고 키로거와 같은 추적 애플리케이션을 설치할 수 있어 사용자와 비즈니스 소유자 모두에게 위험할 수 있는 XSS는 상대적으로 수익성이 높습니다. 때로는 다음과 같은 다른 형태의 공격이 수행되어 페이지에서 XSS를 허용하기도 합니다. SQL 주입.
페이지의 로그인 양식에서 로그인 이름 입력 시 로그인 이름 매개변수가 GET 요청 내에서 전송됩니다. 이 값은 애플리케이션의 서버나 클라이언트 측에서 처리되지 않습니다. 요청에 의해: http://localhost:8080/login?name=<script>alert(document.cookies)</script>
코드가 실행되고 데이터가 노출됩니다.
다음은 XSS 공격 반영피해자에게 제출된 특수하게 준비된 URL 주소를 통해 스크립트가 주입되고 서버 응답에 반영되는 방식입니다. 다른 알려진 인기 있는 공격 형태는 다음과 같습니다:
현재 React/Vue 버전에서는 두 가지 주요 문제가 발견되었으나 아직 공식적으로 수정되지 않았습니다. 첫 번째 취약점은 모든 프레임워크에 동일한 특성을 가지며 템플릿 내에서 원시 HTML 렌더링을 허용하는 메서드와 관련이 있습니다: v-html 그리고 위험하게 설정된 내부 HTML, 에 대해 각각 Vue 및 React. 각 문서[2]에서는 현명하지 않은 사용으로 인해 사용자가 XSS 공격에 노출될 수 있음을 알려줍니다. 다른 옵션으로 문제를 해결할 수 없는 경우에는 데이터가 필터링됨 그리고 탈출. 이러한 방법은 위험하지만 고쳐질 것이라고 기대해서는 안 됩니다. 자신의 책임 하에 사용하세요.
2018년 1분기에 태그 요소의 속성을 설정하여 직접 코드를 실행할 수 있는 대형 버그가 React에서 발견되었습니다. 다음과 같이 속성 내에 예제 코드를 전달합니다. 자바스크립트:경고(1)
로 설정하고 렌더링된 링크를 실행하면 코드가 실행됩니다. 이 문제[4]는 아직 미해결 상태이며 수정 사항이 준비되어 병합되지 않았으므로 코드가 안전한지 확인하세요. 공식 토론에서 제안된 예시는 이 문제를 극복할 수 있는 몇 가지 방법을 제시합니다.
최신 버전으로 업데이트할 수 없는 경우에는 오래된 이슈가 코드에 노출되지 않도록 하여 문제를 일으키지 않도록 하세요:
프레임워크나 라이브러리 자체 외에도 언어로서의 자바스크립트에는 피하거나 주의해서 사용해야 하는 몇 가지 위험한 기능이 있다는 것을 잊지 마세요. 이러한 기능은 일반적으로 DOM 조작 또는 스크립트 실행과 관련이 있습니다. eval() 는 이러한 종류의 대표 함수를 나타내며, 주어진 문자열화된 코드를 직접 실행하기 때문에 매우 위험합니다[9]. 또한 이러한 함수를 찾을 때는 코드를 더 잘 살펴보세요:
여기서 적절한 규칙이 설정된 린터를 사용하면 이러한 취약점을 찾는 데 도움이 될 수 있습니다. 또한 개발 코드의 보안 허점을 탐지하는 데 도움이 될 수 있는 공개 또는 상용 코드 분석기가 많이 있습니다.
어떤 라이브러리/프레임워크를 선택하든 프런트엔드 개발과 관련된 기본 원칙을 기억해야 합니다. 첫째, 삽입하는 외부 코드가 항상 신뢰할 수 있는 소스에서 제공되었는지 확인하세요. 감사 종속성을 잘 살펴보고 현명하게 선택하세요. 일부 종속성에는 심각한 취약점이 포함되어 있어 코드 자체에는 문제가 없더라도 코드가 노출될 수 있습니다. 종속성 보안에 대한 자세한 내용은 여기에서 확인할 수 있습니다:
https://thecodest.co/blog/security-in-javascript-packages/
그렇다면... 여전히 걱정해야 할까요?
예 - 그리고 보안 측면에서 외부 라이브러리나 사용자 자신을 절대 신뢰하지 말 것을 강력히 권장합니다. 소프트웨어가 아무리 안전하다고 생각하더라도 항상 일반적인 공격 형태[10]에 대해 가능한 한 많이 테스트하는 노력을 기울여야 합니다.
자세히 읽어보세요:
PHP에서 프로젝트를 유지 관리할 때 피해야 할 5가지 실수