[SPRING] 대량 할당 문제를 해결하는 방법 : 불안정한 바인더 구성 (API Abuse, Structural) in java
SPRING대량 할당 문제를 해결하는 방법 : 불안정한 바인더 구성 (API Abuse, Structural) in java
의사 (context changed)를 찾는 아래의 두 가지 방법으로 Controller 클래스가 있습니다. 얻기 대량 할당 : 두 방법 모두에 대한 안전하지 않은 바인더 구성 (API 남용, 구조적 오류).
@Controller
@RequestMapping(value = "/findDocSearch")
public class Controller {
@Autowired
private IFindDocService findDocService;
@RequestMapping(value = "/byName", method = RequestMethod.GET)
@ResponseBody
public List<FindDocDTO> findDocByName(FindDocBean bean) {
return findDocService.retrieveDocByName(bean.getName());
}
@RequestMapping(value = "/byLoc", method = RequestMethod.GET)
@ResponseBody
public List<FindDocDTO> findDocByLocation(FindDocBean bean) {
return findDocService.retrieveDocByZipCode(bean.getZipcode(),
bean.getDistance());
}
}
내 콩은 :
public class FindDocBean implements Serializable {
private static final long serialVersionUID = -1212xxxL;
private String name;
private String zipcode;
private int distance;
@Override
public String toString() {
return String.format("FindDocBean[name: %s, zipcode:%s, distance:%s]",
name, zipcode, distance);
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getZipcode() {
return zipcode;
}
public void setZipcode(String zipcode) {
this.zipcode = zipcode;
}
public int getDistance() {
return distance;
}
public void setDistance(int distance) {
this.distance = distance;
}
지금까지 발견 된 모든 제안에 따라 필요한 매개 변수로 bean을 다음과 같이 제한하는 것이 좋습니다.
final String[] DISALLOWED_FIELDS = new String[]{"bean.name", "bean.zipcode", };
@InitBinder
public void initBinder(WebDataBinder binder) {
binder.setDisallowedFields(DISALLOWED_FIELDS);
하지만 내 문제는 콩의 3 매개 변수가 모두 컨트롤러에서 제공되는 방법 중 하나에서 사용될 것입니다.
누군가가이 문제에 대한 해결책을 제안 해 줄 수 있습니까? 미리 감사드립니다.
해결법
-
==============================
1.InitBinder는 메소드에 사용될 수 있습니다. 이것을 시도 할 수 있습니다.
InitBinder는 메소드에 사용될 수 있습니다. 이것을 시도 할 수 있습니다.
@InitBinder("findDocByName") public void initBinderByName(WebDataBinder binder) { binder.setDisallowedFields(new String[]{"distance","zipcode"}); } @InitBinder("findDocByLocation") public void initBinderByZipCode(WebDataBinder binder) { binder.setDisallowedFields(new String[]{"distance","name"}); }
-
==============================
2.간단한 질문 - 귀하의 매퍼가 콩을 instantionate하는 방법? 여기에 answer / example이 있습니다. 쿼리 매개 변수 또는 헤더로 해당 데이터를 전달할 수 있습니다. 그러나 그것은 이상 할 것이다. 더 나은 @QueryParam 위치 또는 이름을 제공하는 그 방법을 가지고있다. 그렇게하면 응용 프로그램을 보호하기가 더 쉬워집니다.
간단한 질문 - 귀하의 매퍼가 콩을 instantionate하는 방법? 여기에 answer / example이 있습니다. 쿼리 매개 변수 또는 헤더로 해당 데이터를 전달할 수 있습니다. 그러나 그것은 이상 할 것이다. 더 나은 @QueryParam 위치 또는 이름을 제공하는 그 방법을 가지고있다. 그렇게하면 응용 프로그램을 보호하기가 더 쉬워집니다.
부수적으로 쿼리의 길이는 제한되어 있으므로 검색 양식이 크고 이상한 경우 @POST를 사용하면 모든 데이터를 전달할 수 있습니다. 이를 위해 과잉 공격을하는 간단한 예를 들어보십시오.
-
==============================
3.이것은 불행한 거짓 긍정처럼 보입니다. 이 오류 뒤에있는 규칙은 객체에있는 속성이 (유효성이 검증되지 않은) 사용자 입력이 실수로 웹 요청으로부터 채워지는 것을 피하기 위해 만들어졌습니다. 예를 들어 자원을 작성하는 POST 요청이 있습니다. 요청 처리기가 전체 리소스 개체를 사용하고 누락 된 속성 만 채우는 경우 악의적 인 사용자가 편집 할 수없는 필드를 채울 수 있습니다.
이것은 불행한 거짓 긍정처럼 보입니다. 이 오류 뒤에있는 규칙은 객체에있는 속성이 (유효성이 검증되지 않은) 사용자 입력이 실수로 웹 요청으로부터 채워지는 것을 피하기 위해 만들어졌습니다. 예를 들어 자원을 작성하는 POST 요청이 있습니다. 요청 처리기가 전체 리소스 개체를 사용하고 누락 된 속성 만 채우는 경우 악의적 인 사용자가 편집 할 수없는 필드를 채울 수 있습니다.
그러나이 경우는 체계와 일치하지 않습니다. 당신은 다른 메커니즘을 포착하기 위해 동일한 메커니즘을 사용합니다. 또한 채워진 속성은 읽지 않습니다. 에서
http : // yourhost / findDocSearch / byName? name = 남용 및 zipCode = 11111을 얻으십시오.
추가 zipCode는 무시됩니다. 따라서 가정 된 위험은 여기에 존재하지 않습니다.
경고를 수정하려면 잘못된 경고로 표시 할 수 있습니다 (설정 내에서 가능한 경우). 이것이 가능하지 않은 경우 쿼리 매개 변수를 메서드 인수에 직접 매핑 할 수도 있습니다. 너무 많은 피해를주지 않아야하는 제한된 매개 변수 만 있기 때문입니다. 이것도 옵션이 아니면 코드 분석에서 인식 할 수있는 정확한 알고리즘을 파악하는 데 필요한 정확한 알고리즘을 파악해야 할 것입니다. 불행히도 대부분의 스캐너는 입력 유효성 검사를 수행하는 데 제한된 방법만을 사용할 수 있습니다.
-
==============================
4.나는 같은 문제에 직면했다. 그런 다음 같은 나머지 컨트롤러 클래스에서 아래 코드를 추가했다.
나는 같은 문제에 직면했다. 그런 다음 같은 나머지 컨트롤러 클래스에서 아래 코드를 추가했다.
@InitBinder public void populateCustomerRequest(WebDataBinder binder) { binder.setDisallowedFields(new String[]{}); }
이제 나에게 잘 작동하고 대량 할당 문제가 해결되었습니다.
from https://stackoverflow.com/questions/47945383/how-to-fix-mass-assignment-insecure-binder-configuration-api-abuse-structural by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 스프링 데이터 mongodb 및 kotlin을 사용하여 개체를 업데이트하는 중입니다. (0) | 2019.02.20 |
---|---|
[SPRING] Spring MVC를 사용하여 서버 디렉토리에 파일 업로드 (0) | 2019.02.20 |
[SPRING] Spring이 디버그 정보없이 매개 변수 이름을 얻는 방법 (0) | 2019.02.20 |
[SPRING] FlatFileItemReader 및 청크를 사용하여 CSV에서 빈 줄을 건너 뛰는 방법 (0) | 2019.02.20 |
[SPRING] Spring Data Cassandra를 사용하여 java.util.Date 값을 Cassandra 날짜 유형 컬럼에 삽입하는 방법? (0) | 2019.02.19 |