주소로 들어온 정렬과 페이지 값을 허용 목록과 상한으로 거른 뒤 질의에 넘깁니다.
정렬 기준과 페이지 번호는 주소창에 있으므로 누구나 바꿔 보낼 수 있습니다. 정렬 열을 검사 없이 질의에 넘기면, 노출할 생각이 없던 열로 정렬한 순서만 보고도 그 값을 추정할 수 있습니다. 열 이름을 문자열로 조립하는 구현이라면 구문 주입까지 이어집니다. 페이지를 검사 없이 넘기면 요청 한 번이 거대한 건너뛰기 질의가 되어 저장소를 오래 붙잡습니다.
정렬할 수 있는 열을 미리 정해 두고, 목록에 없는 이름은 어떤 경로로도 질의에 닿지 않게 합니다.
페이지를 상한에서 잘라, 요청 한 번이 만들 수 있는 건너뛰기 크기를 제한합니다.
앞자리 0이나 지수 표기 같은 변형을 거부해, 같은 목록이 여러 주소로 열리지 않게 합니다.
아래 증명은 글로 된 설명이 아닙니다. 버튼을 누르면 이 서버가 지금 직접 계산합니다.
잘못된 입력은 안전한 기본값으로 바꾸되, 조용히 바꾸지는 않습니다. 버린 항목의 이름을 함께 돌려주므로 잘못 만든 링크가 드러납니다.
표준 문서에 실린 테스트 벡터를 그대로 넣어 같은 값이 나오는지 확인합니다.
정렬 열은 허용 목록에 있는 것만 쓰고, 페이지는 상한에서 자릅니다. 인증 없이 요청 한 번으로 숨긴 열을 읽거나 거대한 건너뛰기를 일으킬 방법이 없습니다.
막아야 할 입력을 실제로 넣고 거부되는지 확인합니다.
규격 원문을 먼저 실었습니다. 사례는 이 분야에서 실제로 보안이 뚫린 일을 다룬 자료입니다.
질의 구성요소를 정의합니다. 같은 자원이 여러 주소를 갖게 되는 문제가 여기서 시작됩니다.
정렬 열처럼 매개변수로 묶을 수 없는 자리에는 허용 목록을 쓰라는 근거입니다.
요청 한 번이 큰 비용을 만드는 경로와, 상한을 어디에 둘지를 다룹니다.
다음 단계
목록 화면이 있는 소비 시스템에 연결하고, 허용 목록과 실제로 노출해도 되는 열이 어긋나지 않는지 빌드 단계에서 검사합니다.