2011-12-08 3 views
0

모든 코드를 검토하는 중입니다. 사용자 입력을 검증하기 전에 사용자 입력의 유효성을 검사해야 할 필요성에 대한 두 번째 생각이 있습니다. 예를 들어, 신용 카드 확인 CVV :유효성 확인은 확인하기 전에 필수 단계입니까?

// validation required? 
if(!preg_match('/^[\d]{3,4}$/', $_POST['card_CVV'])) 
{ 
unset($_POST['card_CVV']); 
$error++; 

// verification 
} 
elseif($card_CVV != $_POST['card_CVV']) 
{ 
$error++; 
} 

// pass verification 
else 
{ 
// process transaction 
} 

검증없이 확인을 수행해야합니까?

+0

그럼 여기에도 주사가 가능할 것 같습니다. 항상 그리고 항상 사용자 입력의 유효성을 검사하고 필터링합니다 - 어쨌든 elseif에서 필터링되지 않은'$ _POST' 변수를 사용하지 말아야한다는 것을 의미합니다. – Anonymous

+0

확인과 유효성 검사의 차이점을 완전히 이해하고 있는지 잘 모르겠습니다. 그것들은 사실상 똑같은 것처럼 보입니다. 입력이 예상되는 형식인지, 보통 매우 단순한 방식으로, 일반적으로 오류 메시지를 다시 사용자에게 알려주는지 확인하고 있습니다. – cdeszaq

+0

@ Dan Surfrider, 사용자 데이터를 저장하지 않고 있습니다. 위험을 여전히 게시합니까? –

답변

2

이 특별한 경우에는 잘못된 형식 인 경우 아마도 정확하지 않기 때문에 실제로는 필요하지 않습니다.

양식이 제출되기 전에 클라이언트 측의 형식을 자바 스크립트에서 확인하는 것이 더 바람직 할 것입니다. 사용자가 즉각적인 피드백을 얻고 그 방식을 알면 더 많은 것을 원한다면 입력 할 수 있습니다. 제출하기 전에 잘못되었습니다.

또한 $_POST['card_CVV']의 내용을 SQL 쿼리에 넣거나 html로 표시하는 경우 주입 가능성에 유의해야합니다. 당신은 그렇게 저장하지 않는다고 말하면 코드에서 직접 문자열 비교에만 사용되므로 괜찮을 것이라고 생각하지만 나머지 코드에서는이 점에 유의하십시오.

1

Realy는 사용자에게 다시 표시해야하는 컨텍스트 및/또는 오류 메시지에 따라 다릅니다.

예를 들어 첫 번째 입력에 위의 유효성 검사가 필요하고 유효하지 않은 입력이 사용자에게 표시됩니다. 그러나 사용자가 올바른 card_CVV를 입력했는지 확인하고 싶다면 오류 메시지가 다르므로 두 가지 모두 필요합니다. 유효한 cvv 또는 cvv가 일치하지 않습니다.

+0

if say if 나는 단지 "이 트랜잭션이 거절되었습니다."라는 일반 메시지를주고 싶습니다. 그런 다음 유효성 검사 단계가 필요하지 않습니까? –

+2

예. 그렇지만 사용자를 전혀 도와주지 않습니다. 개발자 인 경우 사용자 입력 작업에 대해 명확하고 의미있는 오류를 만들어야합니다. –

+0

예, 보통보다 정확한 오류 메시지를 표시 하겠지만 신용 카드 거래의 경우 너무 많은 힌트입니까? –

0

모든 경우에 처리 코드가 올바르게 작동하는지 확인해야합니다. 이는 필요한 입력이 없으면 거의 항상 처리를 실패해야한다는 것을 의미합니다. 처리 파이프 라인에서 어디에서 물건을 확인하는지는 중요하지 않지만 "빠 르게 실패하여"사용자에게 무슨 일이 일어나는지 알리는 것이 좋습니다.

동시에 코드를 반복하지 않으려면 (DRY 상태로 유지) 동일한 문제가 두 번 이상 확인되지 않아야합니다.

관련 문제