Javascript 보안 체크리스트

요약

  • Introduction
  • 1. Code Linting & SAST
  • 2. Running a security audit with npm audit

  • 3. Integrity checking for JavaScript (SRI)
  • How does it work?
  • 4. Validations, Validations, Validations!
  • 5. Minify and obfuscate your Javascript
  • Conclusion
  • 소개하다.


    자바스크립트는 브라우저 astronaut spacesuit 에서 실행되며, 대부분의 개발자들은 이를 클라이언트와 서버 쪽 프로그래밍 언어로 사용해서 상호작용 웹 페이지를 만들 수 있도록 한다.
    Javascript는 경량급 해석 프로그래밍 언어로 일류의 기능을 가지고 있다.
    그 밖에 자바스크립트 생태계는 심각하게 의존한다third-party libraries.

    따라서 JavaScript의 보안을 유지하려면 보안 모범 사례에 따라 공격면을 줄여야 합니다.하지만 JavaScript 애플리케이션의 보안은 어떻게 보장합니까?
    본고에서 저는 안전 엔지니어로서 매일 사용하는 유용한 힌트를 공유하여 코드를 생산 환경에 배치하기 전에 안전 문제를 더욱 많이 고려할 수 있도록 하겠습니다.

    1. 코드 링크 &SAST


    IDE에서 코드를 작성할 때 linting을 통해 실시간 피드백을 보면 오류와 안전 문제를 미리 발견하고 개발을 가속화하고 원가를 낮출 수 있습니다.
    다음을 사용할 수 있습니다.

  • JSLint .

  • JSHint .

  • Standard JS .
  • ESLint
  • 대부분의 SAST 도구(예: SonarQube는 코드 냄새와 알려진 보안 결함을 식별할 수 있는 더 많은 기능을 제공합니다.

    2. npm audit를 사용하여 안전 감사 실행


    대부분의 개발자들이 사용하고 있습니다. NPM(node package manager) 이것은 다른 사람의 코드 패키지를 자바스크립트 프로젝트에 설치하는 데 도움을 주는 도구입니다.
    안전에 대해 말하자면 우리가 가장 먼저 고려해야 할 것은 NPM audit tool이다.이 도구는 설치된 의존 항목의 빈틈을 검사하고 복구하는 데 도움을 줍니다.

    원본 코드 관리 시스템으로 Github 을 사용한다고 가정하십시오.이 경우, 그들은 Dependabot 라는 도구를 가지고 있으며, 자동으로 NPM 의존항을 스캔하고, 위험을 분명히 하기 위해 이메일로 당신에게 통지할 수 있다.

    만약 당신이 큰 프로젝트를 하고 있다면, 매번 당신이 수동으로 완성하는 것이 아니라 자동화를 고려해야 한다.따라서 우리는 Cron 작업을 만들어서 중복된 작업을 설정할 수 있습니다. (당신이 좋아하는 CI 도구를 선택하십시오.)

    3. JavaScript 무결성 확인(SRI)


    만약 당신이 개발자라면 <script> 표기 전에 코드에서 제3자 라이브러리를 가져오는 것을 사용한 적이 있다고 확신합니다. 그러나 이 가져오는 스크립트의 원본 코드를 조작할 가능성을 생각해 본 적이 있습니까?
    네, 이것은 발생할 수 있습니다. 특히 사이트에 외부 자원을 보여줄 때.따라서 귀하의 사이트는 안전상의 빈틈에 직면할 수 있습니다.
    SRI 기능을 사용하면 브라우저가 보안 조치로 얻은 자원을 확인할 수 있습니다.
    <script src="https://example.com/example-framework.js"
            integrity="sha384-oqVuAfXRKap7fdgcCY5uykM6+R9GqQ8K/uxy9rx7HNQlGYl1kPzQho1wx4JwY8wC"
            crossorigin="anonymous"></script>
    

    그것은 어떻게 일합니까?


    코드에 JQuery를 추가하려고 한다면
  • 다운로드JQuery의 최소화 버전.
  • Cloudflare
  • 가 위탁 관리한 JQuery 3.5.1 버전의 SHA256 해시 값을 계산한다
  • 체크섬 생성을 위해 OpenSSL을 두 번 실행합니다.
  • base64 형식으로 결과를 인코딩합니다.
  • curl -s https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.min.js | openssl dgst -sha256 -binary | openssl enc -base64 -A
    
    9/aliU8dGd2tb6OSsuzixeV4y/faTqgFtohetphbbj0=
    
    현재 우리는 산열이 있습니다. integrity 속성을 스크립트 표시에 추가하고, 접두사 sha256- 를 산열에 추가하여 사용하는 산열 알고리즘을 표시할 수 있습니다.지금부터 SRI를 지원하는 모든 브라우저는 다운로드한 파일의 계산 해시 값과 일치하도록 요구할 것입니다.
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.min.js"
            integrity="sha256-9/aliU8dGd2tb6OSsuzixeV4y/faTqgFtohetphbbj0="
            crossorigin="anonymous"></script>
    
    브라우저 호환성(SRI)

    4. 검증, 검증, 검증!


    클라이언트 검증은 충분하지 않습니다. 코드를 작성할 때 영원히 그것에 의존하지 마십시오.
  • 사용자 입력을 신뢰하지 마십시오.
  • 적절한 인코딩/이스케이프 사용
  • 사용자 입력에 대한 소독과 청결
  • 보안 cookies 설정
  • 구축 secure content security policy
  • 암호화 클라이언트와 서버
  • 간의 데이터 전송
  • 업데이트된 라이브러리 및 프레임워크 사용
  • 베이스 데이터베이스와 코드 라이브러리를 정기적으로 스캔
  • 읽기:
  • https://portswigger.net/web-security
  • https://snyk.io/blog/5-ways-to-prevent-code-injection-in-javascript-and-node-js/
  • 5. 자바스크립트를 축소하고 모호하게 만들기


    공격자로서 나는 응용 프로그램 뒤의 업무 논리를 최대한 이해하려고 노력할 것이다. 만약 내가 이렇게 한다면 나는 해결 방법을 찾을 수 있을 것이다.
    중요한 것은 자바스크립트를 축소하고 모호하게 해서 공격자가 코드를 이해하기 어렵게 하고 공격면을 줄이는 것이다.

    결론


    만약 네가 이 점을 할 수 있다면 정말 좋겠다.
    자바스크립트 응용 프로그램을 개발할 때 직면할 수 있는 문제점을 더 잘 알고 있기를 바랍니다.본고는 응용 프로그램의 안전을 보호할 때 반드시 검사해야 할 몇 가지 일만 소개했다는 것을 기억하십시오.
    다음을 읽어야 할 수도 있습니다.
  • 구성 관리
  • 인증.
  • 세션 관리
  • 안전한 전송.
  • 서비스 거부.
  • 오류 처리.
  • 만약 당신에게 문제가 있으면 링크드 인을 통해 저에게 연락할 수 있습니다
    나를 지지하고 싶니?>고마워요 고마워요

    좋은 웹페이지 즐겨찾기