본문 바로가기
빌드노트 검색

빌드노트

웹 보안

웹 보안 카테고리의 글입니다.

글 검색

글 목록

총 48개의 글

  1. Node.js ECDSA 검증이 false라면 DER와 P1363부터 확인한다

    Node.js ECDSA 검증의 기본 서명 형식은 DER다. 같은 P-256 키와 데이터로 만든 DER·P1363 서명의 검증 결과를 비교하고, 프로토콜에 맞게 dsaEncoding을 지정한다. 데이터·서명 변조 거부와 검증 API별 예외 차이도 확인한다.

  2. iframe 메시지, origin이 같으면 같은 위젯에서 온 걸까

    iframe 메시지의 데이터 형식과 origin이 맞아도 예상한 위젯의 메시지는 아닐 수 있다. 두 loopback origin과 세 iframe으로 source 검사, 데이터 계약, 발신 targetOrigin의 차이를 확인한다.

  3. 200으로 받은 JavaScript가 MIME 오류로 실행되지 않을 때

    HTTP 200과 JavaScript 실행은 별개다. 같은 코드의 MIME·nosniff 조합을 일반 스크립트와 모듈에서 비교하고, 실제 응답 본문과 헤더로 요청 경로와 MIME 설정 중 고칠 곳을 구분한다.

  4. 쿠키 Expires가 미래인데도 바로 사라지는 이유

    미래 Expires와 Max-Age=0이 함께 오면 쿠키는 즉시 만료된다. 새 브라우저에서 반대 조건과 세션 쿠키까지 비교한 저장·전송 결과로, 실제 응답에서 확인할 속성과 수명 설정을 구별한다.

  5. AES-GCM 암호화는 되는데 exportKey만 실패한다

    AES-GCM 키로 암·복호화가 되어도 extractable이 false이면 raw 내보내기는 거절된다. Node.js 22.23.2에서 두 설정을 비교하고, 실측 예외 이름이 명세와 다른 점과 usages를 따로 확인할 이유를 설명한다.

  6. Node.js에서 Ed25519 서명에 sha256을 넣으면 실패한다

    Node.js의 Ed25519 서명·검증에는 algorithm 인자로 null을 명시한다. 새 메모리 키로 sha256의 invalid digest 오류와 원문 true·변조 false를 비교하고, Node.js v22.23.2에서 undefined가 허용되는 범위도 직접 확인했다.

  7. default-src를 막았는데 폼은 다른 주소로 제출된다

    default-src 'none'이어도 폼의 POST는 다른 출처에 도착할 수 있다. 두 loopback 출처의 실제 수신과 위반 이벤트를 비교하고, 제출을 시작하는 HTML 문서의 CSP에서 form-action으로 필요한 목적지만 허용하는 방법을 설명한다.

  8. JS는 200인데 integrity 오류로 실행되지 않는다

    JS가 HTTP 200이어도 HTML의 integrity 해시와 받은 내용이 다르면 실행은 차단된다. 한 바이트 변경 실험으로 이를 확인하고, 신뢰하는 배포 산출물의 해시·HTML·캐시를 같은 버전으로 맞출 판단 기준을 설명한다.

  9. Web Crypto AES-GCM을 Node에서 풀 때는 뒤 16바이트를 분리한다

    Web Crypto의 AES-GCM 결과는 암호문 뒤에 인증 태그가 붙지만 Node는 태그를 별도로 받는다. 128비트 태그를 16바이트로 분리·결합해 양방향 복호화를 확인하고, 잘못된 경계가 거부되는 지점과 길이가 명시된 교환 계약을 설명한다.

  10. RSA-PSS 키와 데이터가 같은데 검증은 false다

    Node.js WebCrypto의 RSA-PSS는 서명과 검증의 saltLength가 다르면 같은 키·데이터에서도 false를 반환한다. 32바이트와 0바이트 salt를 교차 검증하고 메시지 변조 거부를 확인한다. 해시는 키 생성·가져오기에서, salt 길이는 호출에서 프로토콜에 맞춰 명시한다.

  11. X-Frame-Options가 DENY인데 iframe에 페이지가 뜨는 이유

    DENY보다 enforcing CSP의 frame-ancestors가 우선한다. 두 loopback 출처에서 Report-Only와 부모 거절 조건을 비교해, 요청 수신과 실제 표시를 구분하고 의도한 부모 정책을 고르는 방법을 설명한다.

  12. new URL()이 성공해도 javascript: 링크는 걸러야 한다

    new URL()은 javascript:·data:·mailto:도 정상 파싱한다. 합성 입력의 protocol과 실제 로컬 문서 클릭을 비교해 HTTP(S) 허용 목록을 적용하고, textContent로 표시한 문구와 href 정책을 구분한다.