와 같은 URL로 이동하는 경우 document.write()는 악성 스크립트를 직접 렌더링합니다. 페이지.
const userInput = sanitizeHtml(getUserInput());
DOMPurify와 같은 라이브러리를 사용하여 입력을 삭제합니다.
CSP 헤더의 예:
Content-Security-Policy: default-src \\'self\\'; script-src \\'self\\' https://trusted.com
CSRF는 공격자가 사용자를 속여 자신도 모르게 악의적인 요청을 제출하도록 하는 공격입니다. 이는 브라우저가 요청과 함께 쿠키와 같은 자격 증명을 자동으로 포함한다는 사실을 이용하여 공격자가 사용자를 대신하여 작업을 수행할 수 있도록 합니다.
취약한 형태의 예:
양식이 취약한 경우 공격자는 다른 사이트에서 가짜 양식을 만들어 로그인한 사용자를 대신하여 요청을 제출할 수 있습니다.
Set-Cookie: sessionId=abc123; SameSite=Strict
신뢰할 수 없는 데이터를 사용하여 애플리케이션에서 개체를 생성할 때 안전하지 않은 역직렬화가 발생하여 공격자가 임의 코드를 실행하거나 권한을 상승시킬 수 있습니다.
취약한 코드의 예:
const user = JSON.parse(dataFromUser);
dataFromUser가 변조된 경우 역직렬화 프로세스로 인해 의도하지 않은 개체가 생성되거나 위험한 메서드가 실행될 수 있습니다.
Node.js 환경과 같이 서버측 JavaScript 실행이 필요한 경우도 있습니다. 서버 측 JavaScript 주입은 신뢰할 수 없는 데이터가 서버에서 코드로 실행될 때 발생하며, 이로 인해 코드 실행 취약점이 발생합니다.
취약한 코드의 예:
eval(userInput);
공격자가 userInput을 제어할 경우 서버에 악성 코드를 주입하고 실행할 수 있습니다.
const safeFunction = new Function(\\'return 2 2\\');
인증은 사용자의 신원을 확인하는 프로세스입니다. 손상된 인증은 애플리케이션에 약하거나 결함이 있는 인증 메커니즘이 있을 때 발생하며, 이로 인해 공격자가 합법적인 사용자를 가장할 수 있습니다.
다단계 인증(MFA) 사용: 사용자가 여러 방법(예: 비밀번호 SMS 코드)을 사용하여 신원을 확인하도록 요구합니다.
보안 세션 관리: 안전한 HttpOnly 및 암호화된 쿠키를 사용하세요. 세션 고정 공격을 방지하려면 로그인 후 세션 토큰을 다시 생성하세요.
res.cookie(\\'sessionId\\', sessionId, { httpOnly: true, secure: true });
비밀번호, 신용카드 번호, API 키와 같은 민감한 데이터는 주의 깊게 처리해야 합니다. 이 데이터가 안전하지 않게 저장되거나 전송되면 노출될 수 있습니다.
HTTPS 사용: 서버와 클라이언트 간의 모든 통신이 TLS(HTTPS)를 사용하여 암호화되었는지 확인하세요.
비밀에 대한 환경 변수: API 키, 데이터베이스 자격 증명 및 기타 비밀을 애플리케이션에 하드 코딩하는 대신 환경 변수 또는 보안 저장소에 저장합니다.
export API_KEY=your_api_key
이 취약점은 공격자가 URL을 조작하여 사용자를 악성 사이트로 리디렉션할 때 발생합니다.
취약한 코드의 예:
res.redirect(req.query.redirectUrl);
URL이 확인되지 않으면 공격자가 사용자를 피싱 사이트로 보낼 수 있습니다.
URL 허용 목록: 신뢰할 수 있고 사전 정의된 URL로만 리디렉션을 허용합니다.
보안 리디렉션 방법 사용: 사용자를 리디렉션하기 전에 리디렉션 논리가 URL이 안전한지 확인하는지 확인하세요.
정기적인 보안 감사 및 침투 테스트: 감사 및 침투 테스트를 수행하여 애플리케이션의 취약점을 정기적으로 테스트합니다.
종속성 업데이트: 라이브러리, 프레임워크 및 패키지를 최신 상태로 유지합니다. npm 감사와 같은 도구를 사용하여 프로젝트 종속성의 취약점을 확인하세요.
최소 권한 원칙을 따르세요: 애플리케이션 내에서 구성 요소와 사용자가 갖는 권한과 액세스를 제한하세요.
보안 헤더: X-Content-Type-Options, X-Frame-Options 및 Strict-Transport-Security와 같은 HTTP 보안 헤더를 사용하여 보안을 강화합니다.
X-Frame-Options: DENYStrict-Transport-Security: max-age=63072000; includeSubDomains; preload
JavaScript 애플리케이션은 강력하기는 하지만 공격자가 악용할 수 있는 다양한 취약점에 취약합니다. 이러한 일반적인 취약점을 이해하고 완화함으로써 개발자는 사용자와 데이터를 보호하는 보다 안전한 애플리케이션을 만들 수 있습니다. 정기적인 보안 감사, 보안 코딩 관행, 최신 보안 기능 사용을 통해 잠재적인 위협을 미리 예방할 수 있습니다.
자세한 내용을 읽으려면 개발자는 OWASP 상위 10대 취약점을 주시하고 이러한 통찰력을 개발 관행에 통합해야 합니다.
","image":"http://www.luping.net/uploads/20240916/172648836966e81f3179798.jpg","datePublished":"2024-11-07T21:09:09+08:00","dateModified":"2024-11-07T21:09:09+08:00","author":{"@type":"Person","name":"luping.net","url":"https://www.luping.net/articlelist/0_1.html"}}JavaScript는 웹 개발에 가장 많이 사용되는 언어 중 하나이지만 광범위하게 사용되기 때문에 공격자의 일반적인 표적이기도 합니다. 데이터 도난, 사용자 계정 손상 등으로 이어질 수 있는 보안 침해를 방지하려면 JavaScript 애플리케이션을 보호하는 것이 중요합니다. 이 문서에서는 JavaScript 애플리케이션의 몇 가지 일반적인 취약점을 살펴보고 이를 완화하기 위한 전략을 제공합니다.
교차 사이트 스크립팅(XSS)은 공격자가 다른 사용자가 보는 웹 페이지에 악성 스크립트를 삽입할 수 있을 때 발생합니다. 이러한 스크립트는 쿠키, 세션 토큰 또는 기타 민감한 정보를 훔칠 수 있습니다.
취약한 코드의 예:
document.write(location.search);
사용자가 https://example.com/?name=와 같은 URL로 이동하는 경우 document.write()는 악성 스크립트를 직접 렌더링합니다. 페이지.
const userInput = sanitizeHtml(getUserInput());
DOMPurify와 같은 라이브러리를 사용하여 입력을 삭제합니다.
CSP 헤더의 예:
Content-Security-Policy: default-src 'self'; script-src 'self' https://trusted.com
CSRF는 공격자가 사용자를 속여 자신도 모르게 악의적인 요청을 제출하도록 하는 공격입니다. 이는 브라우저가 요청과 함께 쿠키와 같은 자격 증명을 자동으로 포함한다는 사실을 이용하여 공격자가 사용자를 대신하여 작업을 수행할 수 있도록 합니다.
취약한 형태의 예:
양식이 취약한 경우 공격자는 다른 사이트에서 가짜 양식을 만들어 로그인한 사용자를 대신하여 요청을 제출할 수 있습니다.
Set-Cookie: sessionId=abc123; SameSite=Strict
신뢰할 수 없는 데이터를 사용하여 애플리케이션에서 개체를 생성할 때 안전하지 않은 역직렬화가 발생하여 공격자가 임의 코드를 실행하거나 권한을 상승시킬 수 있습니다.
취약한 코드의 예:
const user = JSON.parse(dataFromUser);
dataFromUser가 변조된 경우 역직렬화 프로세스로 인해 의도하지 않은 개체가 생성되거나 위험한 메서드가 실행될 수 있습니다.
Node.js 환경과 같이 서버측 JavaScript 실행이 필요한 경우도 있습니다. 서버 측 JavaScript 주입은 신뢰할 수 없는 데이터가 서버에서 코드로 실행될 때 발생하며, 이로 인해 코드 실행 취약점이 발생합니다.
취약한 코드의 예:
eval(userInput);
공격자가 userInput을 제어할 경우 서버에 악성 코드를 주입하고 실행할 수 있습니다.
const safeFunction = new Function('return 2 2');
인증은 사용자의 신원을 확인하는 프로세스입니다. 손상된 인증은 애플리케이션에 약하거나 결함이 있는 인증 메커니즘이 있을 때 발생하며, 이로 인해 공격자가 합법적인 사용자를 가장할 수 있습니다.
다단계 인증(MFA) 사용: 사용자가 여러 방법(예: 비밀번호 SMS 코드)을 사용하여 신원을 확인하도록 요구합니다.
보안 세션 관리: 안전한 HttpOnly 및 암호화된 쿠키를 사용하세요. 세션 고정 공격을 방지하려면 로그인 후 세션 토큰을 다시 생성하세요.
res.cookie('sessionId', sessionId, { httpOnly: true, secure: true });
비밀번호, 신용카드 번호, API 키와 같은 민감한 데이터는 주의 깊게 처리해야 합니다. 이 데이터가 안전하지 않게 저장되거나 전송되면 노출될 수 있습니다.
HTTPS 사용: 서버와 클라이언트 간의 모든 통신이 TLS(HTTPS)를 사용하여 암호화되었는지 확인하세요.
비밀에 대한 환경 변수: API 키, 데이터베이스 자격 증명 및 기타 비밀을 애플리케이션에 하드 코딩하는 대신 환경 변수 또는 보안 저장소에 저장합니다.
export API_KEY=your_api_key
이 취약점은 공격자가 URL을 조작하여 사용자를 악성 사이트로 리디렉션할 때 발생합니다.
취약한 코드의 예:
res.redirect(req.query.redirectUrl);
URL이 확인되지 않으면 공격자가 사용자를 피싱 사이트로 보낼 수 있습니다.
URL 허용 목록: 신뢰할 수 있고 사전 정의된 URL로만 리디렉션을 허용합니다.
보안 리디렉션 방법 사용: 사용자를 리디렉션하기 전에 리디렉션 논리가 URL이 안전한지 확인하는지 확인하세요.
정기적인 보안 감사 및 침투 테스트: 감사 및 침투 테스트를 수행하여 애플리케이션의 취약점을 정기적으로 테스트합니다.
종속성 업데이트: 라이브러리, 프레임워크 및 패키지를 최신 상태로 유지합니다. npm 감사와 같은 도구를 사용하여 프로젝트 종속성의 취약점을 확인하세요.
최소 권한 원칙을 따르세요: 애플리케이션 내에서 구성 요소와 사용자가 갖는 권한과 액세스를 제한하세요.
보안 헤더: X-Content-Type-Options, X-Frame-Options 및 Strict-Transport-Security와 같은 HTTP 보안 헤더를 사용하여 보안을 강화합니다.
X-Frame-Options: DENY Strict-Transport-Security: max-age=63072000; includeSubDomains; preload
JavaScript 애플리케이션은 강력하기는 하지만 공격자가 악용할 수 있는 다양한 취약점에 취약합니다. 이러한 일반적인 취약점을 이해하고 완화함으로써 개발자는 사용자와 데이터를 보호하는 보다 안전한 애플리케이션을 만들 수 있습니다. 정기적인 보안 감사, 보안 코딩 관행, 최신 보안 기능 사용을 통해 잠재적인 위협을 미리 예방할 수 있습니다.
자세한 내용을 읽으려면 개발자는 OWASP 상위 10대 취약점을 주시하고 이러한 통찰력을 개발 관행에 통합해야 합니다.
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3