it-gundan.com

파워 유저가 내 아약스 함수를 호출하지 못하게하려면 어떻게해야합니까?

많은 기능을 수행하기 위해 ajax 호출을 사용하는 사이트가 있습니다. 웹 브라우저에서 스크립트 ajax.php를 호출합니다. 게시 데이터를 사용하여 데이터를 전송하고 ajax 스크립트가 호출 할 수있는 명령을 제한하지만 사용자가 사이트를 조작하기 위해 ajax 호출을 스푸핑하는 것을 막을 수있는 것은 없습니다. 사용자가 전화를 스푸핑하는 것을 막는 담요 방법이 있습니까? 실제로 ajax 호출이 다른 스크립트 나 사이트가 아닌 내 웹 사이트에서 오는지 확인하는 방법이 있습니까?

또는 단순히 PHP 스크립트에서 경계 조건을 확인하고 사용자가 허용하지 않은 것을 스푸핑하지 못하게하지만 허용되는 위치를 스푸핑하도록 허용해야합니까?.

12
Daniel Bingham

사용자가 얼마나 영리한 지에 따라 전송하는 정보가 스푸핑 될 수 있기 때문에이 작업을 확실하게 수행 할 수있는 방법이 없다고 생각합니다.

페이지에서 전화하지 않는 단순한 사람들의 블록을 원한다면 리퍼러를 확인하거나 쿠키를 사용하거나 특정 시간 후에 만료되는 호출 페이지에서 보낸 임의의 숨겨진 필드를 추가하십시오. 그러나 사용자가 실제로 결정되면 스푸핑하기 쉽습니다.

12
delete

요컨대 GET 또는 POST를 통해 URL에 대한 요청은 모든 소프트웨어를 사용하는 모든 사람이 수행 할 수 있습니다. 실제로 AJAX 요청은 URL을 직접로드하는 것과 다르지 않습니다. 후자를 사용하면 반환 된 데이터가 웹 페이지처럼 브라우저에 표시됩니다.

이것이 바로 Javascript 유효성 검사 여부에 관계없이 항상 서버에서 제출 된 데이터의 유효성을 검사해야하는 이유입니다.

서버 측 스크립트가 무엇을하고 있는지, 무엇이 잘못 될 수 있는지는 명확하지 않지만 사용자가 잘못된 데이터로 스크립트를 호출하여 "사이트를 조작 할 수있는"경우 잘못된 작업입니다.

아마도 가장 좋은 해결책은 어떤 형태의 인증을 도입하는 것입니다.

6
DisgruntledGoat

따라서 기본적으로 ajax.php를 AJAX 요청에만 응답하도록 제한 하시겠습니까?

나는 PHP 전문가는 아니지만 주어진 요청이 AJAX 또는 "_ 일반"브라우저 요청에서 $_SERVER['HTTP_X_REQUESTED_WITH'] 값을 확인하여 오는지 확인할 수 있습니다.

소스

3
theycallmemorty

다른 사람이 지적했듯이 ... 아약스 호출은 단지 $ _GET 또는 $ _POST의 수신자 일 뿐이므로 항상 액션 페이지처럼 처리하고 입력을 필터링/삭제하는 것이 나의 접근 방식이었습니다. 예를 들어 한 달처럼 예상되는 것과 약간의 차이가 있고 항상 "Jan, Feb, Mar ..."형식 인 경우 예상 값의 배열을 설정하고 이에 대해 필터링 할 수 있습니다. 일치하지 않는 것을 트랩하고 선택적으로 "Bzzt ... 재생 해 주셔서 감사합니다 ..."

내 Ajax 스크립트가 양식 제출보다 더 안전해야하는 예를 생각할 수 없습니다.

HTH

1
digit1001

귀하의 솔루션의 주요 부분은 특정 사용자 지문의 트래픽 rate limiting 트래픽이라고 생각합니다. IP 주소의 해시, 사용자 에이전트 문자열 및 전송중인 데이터 일 수 있습니다.

또한 ajax를 호출하는 페이지를 ajax 리턴 데이터에 더 가깝게 바인딩하는 것이 도움이 될 수 있습니다. 따라서 해당 페이지에서 페이지로드시 X 세션에 적합한 세션 키를 보내십시오. 각 아약스 요청마다 JavaScript가 해당 키를 다시 전달해야합니다. 그렇지 않으면 아약스가 실패를 반환합니다. 페이지가 X+1 ajax 호출에 도달하면 새 세션을 전송하기 전에 사용자가 일부 조치를 취하도록하십시오 (아마도 mousemove 또는 tap 같은 이벤트 일 수 있음). 와이어를 아래로 누르고 (원래의 아약스에서 대역 외) 프로세스를 다시 시작하십시오.

내가 생각할 때 문제의 일부는 전송 된 매개 변수의 느슨한 유효성 검사 일 수 있습니다. 사람들이 전송 된 매개 변수를 사용하여 유효한 데이터를 다시 얻을 수 있다면 더 어렵게 만듭니다. 이를 수행하는 방법은 클라이언트가 어떤 종류의 값을 보내고 있는지, 나쁜 행위자는 나쁜 값을 보내서 어떤 종류의 장난을 할 수 있는지에 달려 있습니다.

0
artlung