노드 애플리케이션에서 타이밍 공격을 사용할 때 어떤 보안 취약점이 존재합니까?
이 글은 원칙에 따라 노드 애플리케이션의 타이밍 공격 보안 취약점을 분석합니다. 관심 있는 친구들은 참고할 수 있습니다.
머리말
프로젝트에서 eslint 오류 잠재적인 타이밍 공격이 발생했다면 무시하지 마세요! 이것은 보안 문제입니다. 타이밍 공격입니다.
eslint 오류의 원인
먼저 eslint는 eslint-plugin-security라는 플러그인을 도입합니다. 이 플러그인은 잠재적인 보안 문제를 식별하는 데 도움이 되지만, 플러그인의 소스 코드 주소는 오탐을 유발할 수도 있습니다. 에 첨부되어 있습니다.
var keywords = '((' + [ 'password', 'secret', 'api', 'apiKey', 'token', 'auth', 'pass', 'hash' ].join(')|(') + '))'; var re = new RegExp('^' + keywords + '$', 'im'); function containsKeyword (node) { if (node.type === 'Identifier') { if (re.test(node.name)) return true; } return } if (node.test.operator === '==' || node.test.operator === '===' || node.test.operator === '!=' || node.test.operator === '!==') { // 在这里 console 出错误 }
우선 이 플러그인은 이번에는 연산자가 ==, ===,인지 판단해 줍니다! =,! ==둘 중 하나, 두 번째로 식별자(필드 이름)에 특수 문자열인 비밀번호, 비밀, api, apiKey, 토큰, 인증, 패스, 해시가 포함되어 있는지 확인하세요. 두 조건이 동시에 충족되면 eslint가 컴파일하고 보고합니다. 오류 잠재적인 타이밍 공격.
공격 정의
타이밍 공격: 타이밍 공격/사이드 채널 공격에 속합니다. 사이드 채널 공격은 암호화 및 복호화된 데이터, 데이터 비교 시간, 채널 외부의 정보를 이용하는 것을 말합니다. 암호문 전송 트래픽의 공격 방식은 "부업 공격"과 동일합니다.
공격 지점
먼저 js에서 두 문자열의 크기를 비교하는 원리에 대해 이야기해 보겠습니다.
문자열 길이가 0인지 판단합니다. 0이면 결과를 직접 비교할 수 있습니다. , 두 번째 단계를 입력합니다.
문자열은 문자로 구성되며 각 문자의 charCode로 비교됩니다.
두 번째 단계에서는 한 문자만 다르면 false를 반환하고 나머지 문자는 비교되지 않습니다.
단일 문자의 비교는 매우 빠르며 공격자는 측정 시간 정확도를 마이크로초 단위로 세분화하고 응답 시간의 차이를 통해 어떤 문자가 사용되지 않는지 계산할 수 있습니다. Python에서는 스크립트를 실행하면 올바른 비밀번호를 시험해 볼 수 있으며 비밀번호 크래킹의 난이도도 많이 줄어듭니다.
취약한 작성 방법
if (user.password === password) { return { state: true }; // 登录成功 }
방어 조치
입력이 다를 때마다 처리 시간이 달라집니다. 이를 방지하기 위해서는 입력된 비밀번호와 관계없이 문자열 비교에 동일한 시간이 걸리도록 해야 합니다.
공격에 취약하지 않은 글쓰기
시스템의 각 비밀번호 길이는 정해져 있습니다. 비밀번호가 동일한지 비교할 때마다 올바른 비밀번호의 길이를 비교 횟수로 삼아 사용하세요. XOR은 각 문자의 유니코드 인코딩이 동일한지 비교하고 각 비교 결과를 배열에 저장하고 마지막으로 배열의 각 요소가 0인지 확인합니다(0은 두 문자가 동일함을 의미함).
// psdReceived 为用户输入密码; // psdDb 为系统中存储的正确用户密码 const correctUser = (psdDb, psdReceived) => { const state = []; for (let i = 0; i < psdDb.length; ++i) { if (!psdReceived[i]) { state.push(false); } else { state.push(psdReceived.charCodeAt(i) ^ psdDb.charCodeAt(i)); } } return state.length !== 0 && state.every(item => !item); }
3자 패키지 권장 사항
npm 모듈 cryptiles를 사용하여 이 문제를 해결할 수도 있습니다.
import cryptiles from 'cryptiles'; ...... return cryptiles.fixedTimeCimparison(passwordFromDb, passwordReceived);
위 내용은 제가 모든 사람을 위해 정리한 내용입니다. 앞으로 모든 사람에게 도움이 되기를 바랍니다.
관련 글:
NodeJS 상위 프로세스와 하위 프로세스 리소스 공유 원리 및 구현 방법
vue에서 이미지 및 파일 업로드를 구현하는 샘플 코드
위 내용은 노드 애플리케이션에서 타이밍 공격을 사용할 때 어떤 보안 취약점이 존재합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











nvm을 사용하여 노드를 삭제하는 방법: 1. "nvm-setup.zip"을 다운로드하여 C 드라이브에 설치합니다. 2. "nvm -v" 명령을 통해 환경 변수를 구성하고 버전 번호를 확인합니다. install" 명령 노드 설치; 4. "nvm uninstall" 명령을 통해 설치된 노드를 삭제합니다.

파일 업로드를 처리하는 방법은 무엇입니까? 다음 글에서는 Express를 사용하여 노드 프로젝트에서 파일 업로드를 처리하는 방법을 소개하겠습니다. 도움이 되길 바랍니다.

이 기간 동안 저는 Tencent 문서의 모든 카테고리에 공통되는 HTML 동적 서비스를 개발 중입니다. 다양한 카테고리에 대한 액세스 생성 및 배포를 촉진하고 클라우드로 이동하는 추세에 부응하기 위해. Docker를 사용하여 서비스 콘텐츠를 수정하고 제품 버전을 균일하게 관리합니다. 이 글에서는 제가 Docker를 서비스하면서 쌓은 최적화 경험을 여러분의 참고용으로 공유하겠습니다.

이 기사에서는 Node의 프로세스 관리 도구인 "pm2"를 공유하고 pm2가 필요한 이유, pm2 설치 및 사용 방법에 대해 설명합니다. 모두에게 도움이 되기를 바랍니다!

Pinetwork 노드에 대한 자세한 설명 및 설치 안내서이 기사에서는 Pinetwork Ecosystem을 자세히 소개합니다. Pi 노드, Pinetwork 생태계의 주요 역할을 수행하고 설치 및 구성을위한 전체 단계를 제공합니다. Pinetwork 블록 체인 테스트 네트워크가 출시 된 후, PI 노드는 다가오는 주요 네트워크 릴리스를 준비하여 테스트에 적극적으로 참여하는 많은 개척자들의 중요한 부분이되었습니다. 아직 Pinetwork를 모른다면 Picoin이 무엇인지 참조하십시오. 리스팅 가격은 얼마입니까? PI 사용, 광업 및 보안 분석. Pinetwork 란 무엇입니까? Pinetwork 프로젝트는 2019 년에 시작되었으며 독점적 인 Cryptocurrency Pi Coin을 소유하고 있습니다. 이 프로젝트는 모든 사람이 참여할 수있는 사람을 만드는 것을 목표로합니다.

nodejs 실행 파일을 pkg로 패키징하는 방법은 무엇입니까? 다음 기사에서는 pkg를 사용하여 Node 프로젝트를 실행 파일로 패키징하는 방법을 소개합니다. 도움이 되기를 바랍니다.

"node-gyp.js"와 "Node.js"의 버전이 일치하지 않아 npm node gyp가 실패했습니다. 해결 방법: 1. "npm 캐시 clean -f"를 통해 노드 캐시를 지웁니다. 2. "npm install - g n" n 모듈을 설치합니다. 3. "n v12.21.0" 명령을 통해 "node v12.21.0" 버전을 설치합니다.

싱글 사인온(SSO) 시스템이란 무엇입니까? nodejs를 사용하여 구현하는 방법은 무엇입니까? 다음 글에서는 Node를 사용하여 Single Sign-On 시스템을 구현하는 방법을 소개하겠습니다. 도움이 되길 바랍니다.
