ESAPI 유효성 검사기 설정 구성
ESAPI(Enhanced Security Application Programming Interface)를 통한 HTTP 요청 머리글/매개 변수 유효성 검사는 validation.properties 파일을 통해 구성할 수 있습니다. validation.properties 파일은 ThingWorx 시작 시 생성되고 /ThingworxStorage/esapi 위치에 배치됩니다. 머리글/속성을 추가하거나 기존 값을 수정하도록 regex 패턴을 구성할 수 있습니다.
새 머리글 구성
새 머리글을 구성하려면 validation.properties 파일에 다음을 추가합니다. 머리글 이름은 대/소문자를 구분하지 않습니다.
"Validator.HTTPHeaderValue_{new-header-name}={regex}"
새 매개 변수 구성
새 매개 변수를 구성하려면 validation.properties 파일에 다음을 추가합니다. 매개 변수 이름은 대/소문자를 구분합니다.
Validator.HTTPParameterValue_{new-parameter-name}={regex}"
기본 동작
• ThingWorx는 패턴 일치를 위해 각 머리글 및 매개 변수에 대해 validation.properties 파일에 정의된 대로 regex를 사용합니다.
• HTTP 요청에 validation.properties 파일에 정의되지 않은 머리글이 포함되어 있는 경우 ThingWorx는 패턴 일치를 위해 Validator.HTTPHeaderValue에 정의된 regex 패턴을 사용합니다.
• HTTP 요청에 validation.properties 파일에 정의되지 않은 매개 변수가 포함되어 있는 경우 ThingWorx는 패턴 일치를 위해 Validator.HTTPParameterValue에 정의된 regex 패턴을 사용합니다.
• 값이 해당 regex 패턴과 일치하지 않는 경우 ThingWorx는 HTTP 요청에 있는 각 머리글 및 매개 변수의 값을 비웁니다.
• ESAPI는 HTTPRequestHeaderMaxLength 및 HTTPRequestParameterMaxLength를 통해 매개 변수 및 머리글 길이의 유효성을 검사합니다. 각각에 대한 기본값은 2000자이지만 platform-settings.json에서 수정할 수 있습니다. 아래 예를 참조하십시오.
{
"PlatformSettingsConfig": {
"BasicSettings": {
"HTTPRequestHeaderMaxLength": 2000,
"HTTPRequestParameterMaxLength": 2000
}
},
"PersistenceProviderPackageConfigs": {
"PostgresPersistenceProviderPackage": {
"ConnectionInformation": {
"jdbcUrl": "jdbc:postgresql://localhost:5432/thingworx",
"password": "password",
"username": "twadmin"
}
}
}
}
• 구성된 정규식에 대해 값의 유효성을 검사한 후 ESAPI는 다음 유효성을 검사하기도 합니다.
1. 값에서 인코딩된 여러 토큰(예: 백분율 기호 및 쿠키)를 검사하고 인코딩된 토큰이 둘 이상 발견되면 오류가 throw됩니다. 이는 Encoder.AllowMultipleEncoding=true를 validation.properties 파일의 맨 위에 추가하여 비활성화할 수 있습니다.
2. 인코딩된 토큰이 여러 개 있고 인코딩이 여러 번 허용되는 경우 여러 인코딩이 혼합된 유형이 아닌지도 확인합니다. 이는 Encoder.AllowMixedEncoding=true를 validation.properties 파일의 맨 위에 추가하여 비활성화할 수 있습니다.
ThingWorx 6.0 이상에서 업그레이드하기 전에 필요한 작업
버전 6.0 이상에서 업그레이드하는 경우 업그레이드하기 전에 /ThingworxStorage/esapi에서 기존 validation.properties 파일을 제거해야 합니다. 파일을 제거하지 않는 경우 이러한 추가 매개 변수가 있는 업데이트된 파일이 업그레이드하는 동안 현재 버전을 덮어쓰지 않습니다.