2013-08-04 7 views
1

이러한 서버 측 사용자 필드 유효성 검사를 향상시킬 수있는 방법이 있습니까?ColdFusion : 서버 측 사용자 유효성 검사

<cfif Form.LoginName EQ ""><h1>Login Name is required.</h1></cfif> 
<cfif Form.Password EQ ""><h1>Password is required.</h1></cfif> 
<cfif Form.Password NEQ Form.PasswordConfirmation><h1>Password confirmation does not match Password.</h1></cfif> 
<cfif Form.FirstName EQ ""><h1>First Name is required.</h1></cfif> 
<cfif Form.LastName EQ ""><h1>Last Name is required.</h1></cfif> 

<cfif Form.LoginName EQ "" OR Form.Password EQ "" OR Form.Password NEQ Form.PasswordConfirmation OR Form.FirstName EQ "" OR Form.LastName EQ ""> 
    <p>User has not been created</p> 
    <p>You can use your browser's back button to keep form fields filled and try again.</p> 
    <p><a href="users.cfm">Return to users list</a>.</p> 
    <cfabort> 
</cfif> 
+3

ValidateThis - http://www.validatethis.org/에서 확인하십시오. - 클라이언트 측과 서버 측 모두 검증을 처리하는 오픈 소스 라이브러리입니다. 매우 시원하고 매우 강력합니다. –

답변

6

비즈니스 로직을 디스플레이에 연결하는 방식은 조금만 남습니다. MVCseparation of concerns에서 도움을 얻을 수 있습니다.

논리의 관점에서 볼 때 유효성 검사 규칙은 괜찮은 것처럼 보이지만 유효성 검사를 두 번 수행하면 과도한 것처럼 보일 수 있습니다. 각 요소, 모든 요소. 이것은 부분적으로는 위에서 강조한 문제 때문입니다.

나는 절차 적으로 생각하는 것을 멈추고 더 많은 OO 방식으로 생각하고 User.cfc의 개념을 정의하고 일종의 유효성 검사 서비스 (ValidateThis 참조)가 있다고 생각합니다. 아니면 그런 식으로.

마지막으로 스택 오버플로에서 가장 좋은 질문이 아니지만 Code Review에 적합 할 것입니다. 이 질문에 대한 답변은 하나도 없기 때문에 사람들은 "주로 의견을 바탕으로"있다고 생각하는 경향이 있습니다.

"ColdFusion 10"이 아닌 "ColdFusion"으로 다시 태그 지정합니다. 실제로 CF10과는 아무런 관련이 없기 때문에 CFML 질문 일뿐입니다. "ColdFusion"으로 표시된 더 큰 잠재 고객을 확보하게됩니다.

2

이것은 다른 방법입니다. 그것이 더 나은지 스스로 결정할 수 있습니다.

1 단계 - 오류 메시지 변수를 만듭니다.

<cfset ErrorMessage = ""> 

2 단계 - 검사를 수행하십시오. 마음에 들지 않는 것을 발견하면 변수에 텍스트를 추가하십시오.

<cfif len(trim(form.LoginName)) gt 0> 
<cfset ErrorMessage &= "<h3>Login Name is required</h3>"> 
</cfif> 
more checks 

3 단계 - 모든이 외에도

<cfif len(ErrorMessage) gt 0> 
display it 
<cfelse> 
code for no errors 
</cfif> 

변수 귀하의 오류 메시지의 길이를 확인, 당신은 아마도 페이지 요청 실제로 양식 페이지에서 온 있는지 확인하고 싶습니다. 이를 위해 cgi.http_referrer를 사용할 수 있습니다.

한 가지 더. 대신 해당 페이지가 브라우저에서 다시로드 할 필요가 없습니다 있도록 자바 스크립트를 사용할 수

<p><a href="users.cfm">Return to users list</a>.</p> 

다시 같은 양식 페이지에 앵커 태그의.

<p><a href="javascript:history.back()">Return to users list</a>.</p> 
3

코드를 공유하는 대신, 나는 당신에게 개념을 소개하고 싶습니다. 가장 먼저해야 할 일은 OWASP recommendations for Data Validation입니다. 여기에는 데이터 유효성 확인을위한 네 가지 전략이 있으며 다음과 같은 순서로 사용해야합니다. 여기에 몇 가지 발췌 내용을 게시 하겠지만 전체 기사를 읽으시기 바랍니다.

  1. 는 잘 알려진 수락
    이 전략은 또한 "화이트리스트"또는 "긍정적"유효성 검사로 알려져있다. 데이터는 단단히 구속 된 알려진 좋은 값 집합 중 하나임을 확인해야합니다. 일치하지 않는 데이터는 거부되어야합니다.

  2. 도 "부정적"또는 "블랙리스트"검증으로 알려진
    이 전략 나쁜 알려진 부분 거부하는 것은 긍정적 인 검증에 약한 대안입니다. 본질적으로 % 3f 또는 JavaScript 또는 이와 유사한 문자를 볼 것으로 예상되지 않으면이를 포함하는 문자열을 거부하십시오. 잠재적 인 데이터가 잠재적으로 무한하기 때문에 이것은 위험한 전략입니다. 이 전략을 채택한다는 것은 "알려진 나쁜"문자와 패턴의 목록을 영원히 유지해야한다는 것을 의미하며 정의 상 불완전한 보호를 받게됩니다.

  3. 오히려 수락하거나 입력을 거부하는 것보다 위생적으로
    또 다른 옵션은 허용 형식

  4. 없음 검증이 본질적으로 안전하고 강력하게 실망이다
    으로 사용자 입력을 변경하는 것입니다. 유효성 검사가 없으면 응용 프로그램, 호스트 및 네트워크 보안 제어가 직접적으로 중단되므로 비즈니스는 유효성 검사가없는 모든 예를 모두 서명해야합니다.

이 기사에서는 이들 각각에 대해 더 자세히 설명합니다.

관련 문제