2010-07-16 8 views
7

jquery ajax을 사용하는 동안 여러 번 이상한 일을합니다. 내 말은, 나는 id을 포함하는 숨겨진 변수를 유지하고 어떤 사람이 button을 클릭하면 id과 함께 ajax 요청을 전달하는 javascript 함수를 실행합니다. hidden field에 포함되어 있습니다. 이게 정상인가? 누군가 firebug 또는 그와 같은 도구를 사용하고 javascript 함수를 변경하고 다른 ids을 전달하면 어떻게 될까요? 해당 사용자가 아닌 다른 레코드를 업데이트하고 삭제합니다. 어떻게이 모든 일을 처리합니까?jquery에서 누군가 내 아약스 요청을 해킹 할 수 있습니까?

답변

14

이 서버 쪽을 보호하려면이 필요합니다. 클라이언트 쪽에서는 보호 할 수 없으며 그렇게 할 수도 없습니다.

JavaScript는 볼 수 있고, 실행 가능하며, 동적이며, 개방적입니다 ... 할 때 원하는 것은 모두 ... 음, 무엇이든지간에은 보안을 위해 매우 나쁜 것입니다. 요청을 처리 할 때 사용자가 서버에서 액세스해야하는 것에 대해 전달 된 ID를 확인해야합니다.

아무거나는, 당신이 클라이언트에서 수행아무 의미하고 억지력 아닌 솔루션, 그리고 정말 내가 본 효과적인 자바 스크립트 방어벽이 없습니다. 일 수 있다고하더라도 Firebug, Fiddler, Wireshark, Chrome 콘솔 또는 12 개의 다른 도구 중 하나를 열어서 요청이 궁극적으로 어쨌든 전송되는지 확인하십시오.

+0

그래서 이것은 xmlHttpRequests를 전송하는 안전한 방법이 없다는 것을 의미합니까? – adardesign

+0

@adardesign - * 보내는 SSL *, 예를 들어 SSL ... * 보내는 사람, 아니요, 클라이언트가 거기에 무엇이든 쑤셔 넣을 수 있으며 JavaScript에서하는 일을 바꿀 수 있습니다. 당신의 의견을 결코 믿지 마십시오. 확인하십시오 :) –

6

사용자의 입력을 신뢰하지 마십시오. 서버의 ID를 확인하십시오.

2

데이터를 제출할 때 항상 서버 측의 입력을 확인해야합니다. 예를 들어 사용자가 사이트에서 자신의 프로필을 편집하는 중이면 숨겨진 변수에 프로필 ID를 넣지 않고 데이터를 제출할 때 사용자 쿠키/세션을 기반으로 프로필 ID를 파생시킵니다. 핵심 문구는 절대로 클라이언트를 신뢰하지 않습니다.

+0

안녕하세요, Fosco, 제가 잡았습니다. 그리고 그것이 하나의 기록 일 때만 나는 그것을하고 있습니다. 10 개의 레코드가있는 페이지에 테이블이 표시되면 어떨까요? 사용자가 자신의 앨범이므로 해당 앨범을 편집 할 수있는 권한이 있다고합니다. 이제이 앨범에는 자체 앨범 ID가 있습니다. 어떻게 처리할까요? 나는 모든 앨범 ID를 세션에 버리고 제출하는 동안 앨범 ID를 확인해야합니까? 테이블이 필요한 경우가 많이 있습니다. 세션에서 각 인스턴스에 해당 ID를 모두 넣어야합니까? 그렇다면 세션에 언제 넣어야합니까? 그가 로그인하는 순간? 본질적으로 내가 불필요한 조인을해야한다는 것을 의미합니다 ... – TCM

+0

사용자가 로그인 할 때 필요하지 않습니까? 나는 분명히 희망한다. 내가 명확하지 않은 경우 알려주십시오. – TCM

+0

'his'인 앨범을 표시 할 수 있다면 양식 제출시 'his'이라고 판단 할 수 있습니다. 이 작업을 수행하기 위해 세션에 별도의 항목을 저장할 필요가 없습니다. – Fosco

1

현재 사용자가 현재 사용자 및 컨텍스트를 기반으로 작업을 수행 할 권한이 있는지 확인하려면 서버 측 유효성 검사를 수행해야합니다. 앞에서 언급했듯이 유효한 자격 증명을 가진 사람은 전달 된 값을 수정할 수 있습니다. 코드를 수정할 필요가 없으며 정확한 쿠키 정보가 있으면 원하는 값을 포함하는 요청을 간단하게 만들 수 있습니다.

관련 문제