이 문서는 Google Cloud Translation API를 사용해 자동 번역되었습니다.
어떤 문서는 원문을 읽는게 나을 수도 있습니다.
입력 유효성 검사는 웹 앱, 모바일 앱, 데스크톱 앱 등 모든 애플리케이션의 중요한 부분입니다. 적절한 입력 유효성 검사가 없으면 응용 프로그램은 SQL 주입, XSS(교차 사이트 스크립팅) 및 MITM(중간자) 공격을 비롯한 모든 종류의 공격에 취약합니다.
이 문서에서는 Kotlin의 입력 유효성 검사에 대한 몇 가지 모범 사례와 피해야 할 몇 가지 일반적인 함정을 살펴보겠습니다.
Kotlin에는 입력 유효성 검사에 사용할 수 있는 다양한 라이브러리와 프레임워크가 있습니다. 프로젝트의 요구 사항에 따라 작업에 적합한 것을 선택하는 것이 중요합니다.
예를 들어 kotlinx.html 라이브러리는 HTML 입력의 유효성을 검사하기 위한 함수 및 개체 집합을 제공합니다. kotlinx.validation 라이브러리는 XML 입력의 유효성을 검사하기 위한 함수 및 개체 집합을 제공합니다.
코딩을 시작하기 전에 구현해야 하는 유효성 검사 규칙을 정의하는 것이 중요합니다. 이렇게 하면 코드 중복을 피하고 코드를 유지 관리하기가 더 쉬워집니다.
유효성 검사 규칙을 정의할 때 명시적 형식을 사용하는 것이 가장 좋습니다. 예를 들어 Any 유형을 사용하는 대신 String 또는 Int와 같은 특정 유형을 사용하는 것이 좋습니다.
nullable 형식은 예기치 않은 결과를 초래할 수 있으므로 가능하면 피해야 합니다. null 허용 유형이 절대적으로 필요한 경우 kotlinx.validation 라이브러리와 같이 null 안전을 제공하는 라이브러리를 사용하는 것이 가장 좋습니다.
유효성 검사 코드를 작성할 때 긍정 어설션을 사용하는 것이 가장 좋습니다. 즉, 유효성 검사 코드는 값이 없는 것이 아니라 특정 값이 있는지 확인해야 합니다.
Kotlin의 단락 동작은 입력 유효성 검사와 함께 사용할 때 예기치 않은 결과를 초래할 수 있습니다. 예를 들어 다음 코드를 고려하십시오.
fun validateInput(input: String): Boolean {
// Validation code here
}
fun main() {
val input = "test"
if (validateInput(input) && input.isNotEmpty()) {
// Do something with the input
}
}
이 코드에서는 validationInput() 함수가 먼저 호출된 다음 input.isNotEmpty() 함수가 호출됩니다. 그러나 Kotlin의 단락 동작으로 인해 validationInput() 함수가 false를 반환하는 경우 input.isNotEmpty() 함수가 호출되지 않습니다.
이 문제를 방지하려면 다음과 같이 let() 함수를 사용하는 것이 가장 좋습니다.
fun validateInput(input: String): Boolean {
// Validation code here
}
fun main() {
val input = "test"
input.let {
if (validateInput(it) && it.isNotEmpty()) {
// Do something with the input
}
}
}
이 코드에서 let() 함수는 validateInput() 함수 및 input.isNotEmpty() 함수를 호출하는 데 사용됩니다. 이렇게 하면 validateInput() 함수의 반환 값에 관계없이 두 함수가 항상 호출됩니다.
코딩할 때 가장 흔히 저지르는 실수 중 하나는 입력의 유효성을 검사하지 않는 것입니다. 이로 인해 모든 종류의 보안 문제와 데이터 손상이 발생할 수 있습니다.
입력이 신뢰할 수 있는 출처에서 온 경우에도 항상 유효성을 검사하는 것이 중요합니다.
또 다른 일반적인 실수는 HTML5 양식 유효성 검사와 같은 클라이언트 측 유효성 검사에 의존하는 것입니다. 클라이언트 측 유효성 검사가 유용할 수 있지만 유효성 검사의 유일한 수단으로 사용해서는 안 됩니다.
악의적인 사용자가 클라이언트측 유효성 검사를 우회할 수 있기 때문입니다. 따라서 항상 서버 측에서도 입력의 유효성을 검사하는 것이 중요합니다.
입력 유효성을 검사할 때 일반적으로 범하는 실수는 영숫자 문자와 같은 특정 문자만 확인하는 것입니다. 그러나 악의적인 사용자가 다른 문자를 사용하여 유효성 검사를 우회할 수 있으므로 보안 문제가 발생할 수 있습니다.
허용되지 않는 문자의 블랙리스트가 아니라 허용된 문자의 화이트리스트에 대해 항상 입력을 검증하는 것이 중요합니다.
또 다른 일반적인 실수는 출력물을 삭제하는 것을 잊는 것입니다. 이로 인해 XSS(교차 사이트 스크립팅) 공격과 같은 보안 문제가 발생할 수 있습니다.
출력을 사용자에게 표시하기 전에 항상 정리하는 것이 중요합니다.
입력 유효성 검사에 정규식(regex)을 사용할 때 흔히 저지르는 실수는 모든 입력에 대해 단일 정규식을 사용하는 것입니다. 그러나 각 입력에 대해 정규식을 다시 컴파일해야 하므로 성능 문제가 발생할 수 있습니다.
각 입력에 대해 다른 정규식을 사용하거나 사전에 정규식을 컴파일하는 것이 가장 좋습니다.
입력 유효성 검사는 모든 애플리케이션의 중요한 부분입니다. 이 문서에서는 Kotlin의 입력 유효성 검사에 대한 몇 가지 모범 사례와 피해야 할 몇 가지 일반적인 함정을 다뤘습니다.