2010-12-07 2 views
1

보안 관점에서 누군가가 PHP에 로그인 할 때 ajax 호출을 보안하는 단계별 (그러나 아주 간단한) 경로를 제공 할 수 있습니까?php 및 auth를 사용하여 ajax 호출을 작성하는 올바른 방법

예 : PHP 페이지에

  1. 은 로그인 한 사용자에게 주어진 세션 ID가있다.
  2. 클라이언트에 페이지를 푸시하기 전에 세션 ID가 자바 스크립트에 동적으로 배치됩니다.
  3. 클라이언트는 세션 ID를 포함한 데이터를 PHP 처리 페이지로 다시 보내는 "제출"버튼을 클릭합니다.
  4. PHP는 처리 페이지에서 세션 ID를 확인하는 작업을 수행하고 데이터

I가 붙어를 다시 전송하는 방법 (여부) 세션 데이터는 아약스 요청을 통해 전송하기 전에 확보되어야한다. 여기서 은행을 만들지는 않겠지 만, 많은 아약스 호출이 소스가 스푸핑 될 수 있다는 점을 감안하면 어디에서나 요청을 수락 할 수있는 "개방형"PHP 페이지로 이동하는 것에 대해 우려하고 있습니다.

답변

1

PHP는 자바 스크립트를 통해 세션 ID를 보내지 않아도 세션 데이터를 가져올 수 있습니다. $ _SESSION 변수 만 사용하십시오. 세션이 존재하는지 검사 할 경우 당신은

if(isset($_SESSION['some_val')) 
    //do work son. 

당신은 비동기 적으로 서버에 다시 사용자 입력을 전달하는 자바 스크립트를 사용해야하지만 세션을 추적하지 않도록 할 수 있습니다.

0

자바 스크립트로 세션 데이터를 보내지 마십시오.

(대부분의 경우) 필요하지 않습니다.

자바 스크립트로 데이터를 게시하고 PHP가 세션의 세션 데이터를 검색하도록합니다.

세션 데이터 설정 방법에 따라 다릅니다.

하나의 간단한 예가 username이라는 세션입니다.

PHP가 자바 스크립트에서 요청을 받으면 다음을 수행 할 수 있습니다. $ _SESSION [ 'username'] 세션 데이터를 검색합니다.

이것은 어떻게 수행되는지 보여주기위한 아주 간단한 예입니다.

0

위에서 언급했듯이 자바 스크립트로 세션 식별자를 보내지 않아도되므로 AJAX 요청은 다른 요청과 동일하므로 세션을 잘 알고 있습니다. 그래서 기본적으로 걱정하지 마십시오. 이미 처리되었습니다.

내게 걱정되는 질문의 또 다른 부분입니다. 내가 너무 많은 아약스에 대한 걱정

그냥 나를 너무 걱정 어디서나

의 요청을 받아 들일 수를 "개방형"PHP 페이지를가는 호출; "open-ended"PHP 페이지를 전혀 사용하지 않아야합니다. 모든 공개 .php 스크립트는 인증 및 권한 부여를 완료해야합니다. 이를 달성하기위한 가장 쉽고 유지하기 쉬운 방법은 단일 컨트롤러 스크립트 (예 : 색인)를 사용하는 것입니다.PHP)는 인증 및 권한 부여를 수행 한 다음 적절한 컨트롤러에 요청을 보냅니다. 이 컨트롤러 외에도 다른 모든 스크립트는 문서 루트 외부에 있어야하므로 을 직접 호출 할 수 없습니다.

이것은 한 곳에서 인증 및 권한 부여에 대해서만 걱정해야한다는 것을 의미합니다. 변경해야 할 경우 한 곳에서 변경됩니다. 이는 우연히 직접 호출 할 의도가없는 일부 라이브러리 PHP 파일에 실수로 일부 실행 파일을 남겨 둘 것을 염려 할 필요가 없음을 의미합니다. 즉, mod_rewrite 규칙을 사용하여 doc root에 있어서는 안되는 .php 파일을 보호하려고 시도 할 필요가 없다는 뜻입니다.

관련 문제