사용자가 브라우저에서 코드를 편집하지 못하게하려면 어떻게해야합니까?


11

기술

Node.JS 응용 프로그램을 디자인하고 있습니다 (전체 웹 사이트와 유사). 이 앱은 5 개의 JavaScript 파일을 보내며 <script>서로 연결되는 태그 를 갖 습니다.

질문

사용자와 공격자가 코드를 들여다 보거나 편집하지 못하게하려면 어떻게 해야합니까?

  • 예를 들면 다음과 같습니다.

    • Ctrl+ Shift+I

    • 에서 DevTools로 , 고토 소스는 편집 (즉,에 파일 선택 index.html) 및 쓰기 편집을

    • Ctrl+ S를 누르면 라이브 편집 이 발생합니다

위의 예가 발생 하는 것을 방지하고 싶습니다. 가능합니까?


내가 생각한 것은 다음과 같습니다.

다른 클라이언트 측 JavaScript 파일 인 prevent_keys.js를 작성하겠습니다.

Ctrl+ Shift+ 를 수신합니다 I.

반환되면 true(즉, 키를 눌렀을 때) 키가됩니다 log.

그러나 사용자가 Devtools를 직접 사용하지 못하게합니다.


16
브라우저에서 실행되는 자바 스크립트를 다른 사람이 보거나 수정하는 것을 막을 수는 없습니다. 캔트.
jfriend00

7
질문에 대한 대답이“당신은 할 수 없습니다”라고해서 다운 투트되어야한다는 의미는 아닙니다.
RubberDuck

1
: 매우 밀접하게 질문 관련 AJAX 양식에 자바 스크립트만을 검증 제출을 . 특히 웹 브라우저에서 오지 않아도 클라이언트에서 온 POST 호출을 서버로 보내는 POST 호출을 보내는 간단한 예를 통해 허용 된 답변 을 확인하십시오 .
8bittree

답변:


35

문자 그대로 사용자가 전송하는 컨텐츠에 액세스하고 수정하는 것을 막을 수 없습니다. 브라우저 나 브라우저를 사용하거나 실제로 브라우저를 통해 소스 코드를 다운로드하는지 여부를 제어 할 수 없습니다. 다른 사람의 기기에서 코드를 실행하고 있습니다. 이 장치의 무결성에 대해 아무 것도 가정해서는 안됩니다.

노출하고 싶지 않은 코드가 있으면 브라우저로 보내지 마십시오. 대신 브라우저가 비밀 코드를 실행하는 서버에 요청을 보내도록합니다.

구체적인 예로 클라이언트에서 비밀번호를 확인하지 마십시오. 클라이언트는 항상 서버에“비밀번호가 맞았습니다”라고 알리도록 수정할 수 있습니다. 대신 신뢰할 수있는 서버에서 인증을 수행해야합니다.


4
"클라이언트는 항상 서버에"암호가 정확했습니다 "라고 알리도록 수정할 수 있습니다." 기침 libssh 기침
Philip Kendall

고마워요! 로그인, 로그 아웃 및 가입을위한 핸들러를 전송했습니다. 서버의 경로로 변경했습니다.
Edwin Pratt

23

당신은 할 수 없습니다. 컴퓨팅의 기본 규칙 중 하나 : 클라이언트를 신뢰할 수 없습니다 . 당신이 생각하는 영리한 계획이 무엇이든, 내가 클라이언트를 통제하고 있다면 그것을 해결할 수 있습니다.


2
모든 유효성 검사, 업로드, 다운로드, userAccouts () 핸들러를 서버의 include로 옮겼습니다.
Edwin Pratt

1
"고객을 믿을 수 없다"는 동전의 한 면일뿐입니다. 상대방은 "고객의 소유자가 아닙니다"라고 말합니다. 자바 스크립트를 실행하는 브라우저는 귀하가 아니며 브라우저를 실행하는 OS는 귀하가 아니며 브라우저가 실행되는 하드웨어는 귀하가 아닙니다. 이 물건의 소유자가 당신이 그들에게 보내는 데이터와 관련 이있는 것은 당신의 사업이 아닙니다 . 고객이 물건을 빼내려고하지 않는 것은 존중의 문제입니다.
cmaster-monica reinstate

2

코드를 수정하고 싶지 않은 이유는 무엇입니까?

보안? 믿음? 영업 비밀?

그런 다음 코드를 보내지 말고 클라이언트에게 요청을 보내도록하고 결과를 반환하십시오. 비공개 또는 특권 결과가 아닌 경우 많은 UI에 완료된 것으로 충분합니다.

자신의 코드를 약간 수정 한 버전이 결론을 손상시키고 있습니까?

코드 애매한 자, 이름 관리자, 사소한 코드 세그먼트를 사용하십시오.

이러한 기술은 실제 기술 수준과 웹 사이트를 약간 변형시키는 데 필요한 도구를 제공합니다. 이러한 기술을 사용하면 코드 속도가 느려지고 흥미롭고 의미없는 버그와 오류 메시지가 발생할 수 있지만 올바른 도구 및 / 또는 기술을 가진 사람이 여전히 극복 할 수 있습니다. 그만한 가치가 있는지 정말로 고려하십시오. 하루가 끝나면 누구나 실제로 동일한 코드를 작성할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.