programing

서버 쪽에서 유효성 검사를 해야 합니까?

bestprogram 2023. 9. 19. 21:20

서버 쪽에서 유효성 검사를 해야 합니까?

서버 쪽에서 유효성 검사를 해야 하나요, 아니면 고객 쪽에서 유효성 검사만 해도 되나요?

@TXI

나는 단지 누군가가 나에게 거짓 정보를 주기 위해 대답을 바꿀 수 있는 어떤 것도 빠뜨리고 싶지 않아서 당신이 놀랐다는 것을 기쁘게 생각합니다.


많은 분들이 제가 추구하는 것에 대해 감동을 주신 것 같지만, 아약스의 부분은 가장 중요한 부분이었기 때문에 제 질문에 남겨두었어야 했습니다.

하지만 게시물을 읽어보니 나쁜 사람이 쉽게 파이어버그를 로드하고 내 버튼을 제출 버튼으로 변경하여 게시물을 작성할 수 있다는 것을 알고 있습니다.아니면 다른 방법으로.

브라우저/클라이언트 측 검증이 편리합니다.당신은 그것에 의지할 수 없습니다.모든 클라이언트 수준의 유효성 검사를 서버 측 유효성 검사와 복제해야 합니다.

좋아요, 당신의 코드가 모두 맞습니다.해커가 당신의 자바스크립트를 그들이 좋아하는 것 중 하나로 바꾸거나, 그것이 당신의 코드인 것처럼 간단하게 POST와 GET를 제출하면 어떻게 됩니까?

클라이언트에서 확인하는 것은 사용성 문제입니다.

USE 시점에서 유효성을 확인하는 것은 보안 문제입니다.

사용 시점에서 검증하지 않으면 코드가 고도로 결합되기 때문에 마지막 포인트가 중요합니다.모듈을 변경하면 잘못된 지점에서 검증했기 때문에 다른 곳에서 문제가 발생합니다.

예를 들어 SQL 데이터베이스에 저장하기 전에 SQL 주입에 대한 데이터의 유효성을 검사합니다. 좋은 데이터베이스를 선택하면 라이브러리에서 이 작업을 수행합니다.데이터를 HTML로 표시할 때 CSS에 대해 유효성을 검사합니다. 그러나 데이터를 XML, RSS 또는 JSON으로 노출하면 유효성 검사가 달라집니다. 입력할 때만 유효성 검사를 했다면 다른 형식에 대한 공격을 방지하지 못할 뿐만 아니라 입력 루틴은 선택한 출력 형식에 연결됩니다.

저는 항상 이렇게 봅니다.

  • 클라이언트 유효성 검사는 사용 가능 여부를 위한 것입니다.
  • 서버 유효성 검사는 보안을 위한 것입니다.

예, 항상 서버측 검증을 수행해야 합니다.자바스크립트/AJAX는 사용자에게 즉각적인 피드백을 제공하는 것은 좋지만, 서버측에서는 어떠한 보호도 제공하지 않습니다.

사용자 입력을 신뢰할 수 없습니다.자바스크립트 유효성 검사는 회피하기가 너무 쉽습니다.따라서 서버 쪽의 입력을 확인해야 합니다.

간단히 말해 네.당신은 브라우저가 당신에게 보내는 것이 합법적이라고 절대 믿을 수 없습니다.

클라이언트 측 유효성 검사는 잠재적으로 회피될 수 있으며, 서버 측 유효성 검사가 없는 경우 잘못된 또는 잘못된 데이터를 처리하거나 저장하게 됩니다.

위의 내용은 사용자가 지원하지 않는 브라우저 버전과 같은 브라우저 문제 때문일 수 있습니다.더 나쁜 것은 악의적인 사용자 때문일 수도 있습니다.

따라서 서버측의 유효성 검사를 수행하는 것입니다.

사실 서버측 검증은 필수이고 클라이언트측 검증은 좋지만 선택사항입니다.고객 측에서 일어나는 일을 전혀 통제할 수 없기 때문입니다.

더 나쁜 경우는 사용자 지정 브라우저가 구축되어 클라이언트 측 유효성 검사가 무력해지는 경우입니다.이는 URL을 사용하여 민감한 정보를 전달하는 것과 다를 바 없습니다. 누군가가 주문에 대한 가격 정보를 변경하거나 사용자 ID를 변경하여 보안을 우회하는 등 원하는 작업을 수행하기 위해 URL을 변경하는 것은 매우 쉽습니다.

데이터를 제출하기 위해 JS가 향상된 양식을 사용할 필요가 없기 때문에 사용자는 자바스크립트를 끄거나 서버측 핸들러에게 원하는 데이터를 제출할 수 있으므로 서버측 검증을 받는 것이 절대적으로 중요합니다.

저는 항상 클라이언트/자바스크립트 검증을 UI 향상으로 생각해왔고, 서버측 검증을 "실제" 검증으로 생각해왔습니다.JS 유효성 검사를 받는 것은 사용자에게 도움이 되는 부적절한 데이터를 즉시 통지하는 데 좋습니다.

자바스크립트가 꺼진 사용자의 문제 외에도 보안을 위해 서버측 검증이 필요합니다.필수 필드와 같은 항목을 확인하는 것 외에 SQL 주입 공격, 사이트 간 스크립팅 등을 방지하기 위해 사용자가 제공하는 데이터도 확인해야 합니다.사용자는 항상 자바스크립트를 무시하고 원하는 데이터를 보낼 수 있기 때문에 서버 측에서 이 작업을 수행해야 합니다.

네, 여전히 유효성 검사 서버 쪽을 수행해야 합니다.AJAX 게시물은 여전히 게시물일 뿐입니다.잘못된 데이터로 POST를 수행하는 페이지를 쉽게 작성할 수도 있고, 자바스크립트가 데이터를 검증한 후 파이어폭스의 Tamper Data 플러그인과 같은 도구를 사용하여 데이터를 변경할 수도 있습니다.

당신은 안전을 위해 클라이언트 측과 서버 측의 검증을 해야 한다고 생각합니다.고객에게 충분한 검증을 제공할 수 있지만, 검증을 회피하는 경우에는 큰 문제에 직면할 수 있습니다.반면, 서버 측에서도 유효성 검사를 수행하면 이를 방지할 수 있습니다.

서버에서 유효성 검사를 수행하지 않으면 다른 사용자가 Firebug를 사용하여 클라이언트 측 유효성 검사를 덮어쓰거나 Poster라는 다른 Firefox 확장 프로그램으로 완전히 둘러볼 수 있습니다.데이터베이스를 정리하는 데 행운을 빌어요!

클라이언트 측 유효성 검사는 사용자가 즉시 잘못했음을 알 수 있도록 수행됩니다.그것은 어떤 것도 확보하기 위한 것이 아닙니다.

예, 클라이언트 측에서 어떤 일도 발생할 수 있으므로 기본 검증 형식으로 신뢰해서는 안 됩니다.불량 데이터가 데이터베이스에 도달하거나 확인되지 않은 상태에서 발생할 수 있는 잠재적인 보안 문제를 원하지 않습니다.기능 유형에 따라 달라질 수 있지만 양쪽에서 검증해야 합니다.

두 가지를 다 해야 합니다.클라이언트 측 유효성 검사는 간단한 형식의 유효성 검사(예: 올바른 형식의 전자 메일 주소와 일치)에 적합하지만, 페이지에서 데이터가 오는지 확인할 수 없으므로(폼 스푸핑은 일반적인 해킹) 항상 서버 측에서 유효성 검사를 복제해야 합니다.

또한 서버측 검증을 통해 데이터를 데이터베이스에 커밋하기 전에 데이터에 대한 비즈니스 로직 검사를 보다 철저하게 수행할 수 있습니다.

이 전략은 선량하고 합법적인 사용자에게 효과가 있지만 해커 도구를 사용하는 브라우저가 아닌 요청이나 일련의 자동화된 봇 요청으로 HTTP POST 명령을 보내는 일련의 자동화된 요청으로부터 사이트를 보호하지는 못할 것이며, 이는 최선의 경우 시스템을 오염시킬 뿐입니다.데이터 일관성이 최악의 경우 여러 페이지에 오류 메시지가 표시됩니다.

클라이언트 측 검증은 "월드 와이드 웹"이라는 개념에 어긋납니다. 왜냐하면 HTML 텍스트 기반으로 만든 이유는 각 장치가 아무리 작더라도 rspon을 처리할 수 있어야 하기 때문입니다.이제 클라이언트 측 검증에서는 html을 사용하는 장치에서 "www"가 기대하는 것이 아닌 사용하는 장치의 처리 능력이 요구됩니다.인터넷 속도가 나날이 빨라지고 있기 때문에 클라이언트 측 검증은 대역폭을 절약하는 데 특히 중요합니다. 클라이언트 측 검증을 더 이상 필요로 하지 않는 시기가 올 것입니다.

언급URL : https://stackoverflow.com/questions/1125772/should-you-do-validation-on-the-server-side