복붙노트

[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. ==============================

    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. ==============================

    2.간단한 질문 - 귀하의 매퍼가 콩을 instantionate하는 방법? 여기에 answer / example이 있습니다. 쿼리 매개 변수 또는 헤더로 해당 데이터를 전달할 수 있습니다. 그러나 그것은 이상 할 것이다. 더 나은 @QueryParam 위치 또는 이름을 제공하는 그 방법을 가지고있다. 그렇게하면 응용 프로그램을 보호하기가 더 쉬워집니다.

    간단한 질문 - 귀하의 매퍼가 콩을 instantionate하는 방법? 여기에 answer / example이 있습니다. 쿼리 매개 변수 또는 헤더로 해당 데이터를 전달할 수 있습니다. 그러나 그것은 이상 할 것이다. 더 나은 @QueryParam 위치 또는 이름을 제공하는 그 방법을 가지고있다. 그렇게하면 응용 프로그램을 보호하기가 더 쉬워집니다.

    부수적으로 쿼리의 길이는 제한되어 있으므로 검색 양식이 크고 이상한 경우 @POST를 사용하면 모든 데이터를 전달할 수 있습니다. 이를 위해 과잉 공격을하는 간단한 예를 들어보십시오.

  3. ==============================

    3.이것은 불행한 거짓 긍정처럼 보입니다. 이 오류 뒤에있는 규칙은 객체에있는 속성이 (유효성이 검증되지 않은) 사용자 입력이 실수로 웹 요청으로부터 채워지는 것을 피하기 위해 만들어졌습니다. 예를 들어 자원을 작성하는 POST 요청이 있습니다. 요청 처리기가 전체 리소스 개체를 사용하고 누락 된 속성 만 채우는 경우 악의적 인 사용자가 편집 할 수없는 필드를 채울 수 있습니다.

    이것은 불행한 거짓 긍정처럼 보입니다. 이 오류 뒤에있는 규칙은 객체에있는 속성이 (유효성이 검증되지 않은) 사용자 입력이 실수로 웹 요청으로부터 채워지는 것을 피하기 위해 만들어졌습니다. 예를 들어 자원을 작성하는 POST 요청이 있습니다. 요청 처리기가 전체 리소스 개체를 사용하고 누락 된 속성 만 채우는 경우 악의적 인 사용자가 편집 할 수없는 필드를 채울 수 있습니다.

    그러나이 경우는 체계와 일치하지 않습니다. 당신은 다른 메커니즘을 포착하기 위해 동일한 메커니즘을 사용합니다. 또한 채워진 속성은 읽지 않습니다. 에서

    http : // yourhost / findDocSearch / byName? name = 남용 및 zipCode = 11111을 얻으십시오.

    추가 zipCode는 무시됩니다. 따라서 가정 된 위험은 여기에 존재하지 않습니다.

    경고를 수정하려면 잘못된 경고로 표시 할 수 있습니다 (설정 내에서 가능한 경우). 이것이 가능하지 않은 경우 쿼리 매개 변수를 메서드 인수에 직접 매핑 할 수도 있습니다. 너무 많은 피해를주지 않아야하는 제한된 매개 변수 만 있기 때문입니다. 이것도 옵션이 아니면 코드 분석에서 인식 할 수있는 정확한 알고리즘을 파악하는 데 필요한 정확한 알고리즘을 파악해야 할 것입니다. 불행히도 대부분의 스캐너는 입력 유효성 검사를 수행하는 데 제한된 방법만을 사용할 수 있습니다.

  4. ==============================

    4.나는 같은 문제에 직면했다. 그런 다음 같은 나머지 컨트롤러 클래스에서 아래 코드를 추가했다.

    나는 같은 문제에 직면했다. 그런 다음 같은 나머지 컨트롤러 클래스에서 아래 코드를 추가했다.

    @InitBinder
    public void populateCustomerRequest(WebDataBinder binder) {
        binder.setDisallowedFields(new String[]{});
    }
    

    이제 나에게 잘 작동하고 대량 할당 문제가 해결되었습니다.

  5. from https://stackoverflow.com/questions/47945383/how-to-fix-mass-assignment-insecure-binder-configuration-api-abuse-structural by cc-by-sa and MIT license