2011-11-03 3 views
1

LAN이 아닌 "인터넷 상에있는"서버에서 호스팅되는 웹 응용 프로그램을 작성 중입니다.AJAX 보안 및 사용자 관리

응용 프로그램은 꽤 많은 AJAX 호출을 사용하고 함수에 대해 약 12 ​​개의 ajax 처리기 파일을 가지고 있습니다.

내 질문은 AJAX 보안에 대한 자습서를 작성하는 사람을 물어 보는 대신,이 파일의 보안을 유지하는 데 도움이되는 좋은 리소스 (웹 사이트, 책 등)를 알 수 있습니다.

바로 지금 변수 이름을 알고있는 한 데이터베이스에서 데이터를 자유롭게 얻을 수 있습니다.

세션 검증이나 로그인 한 사용자의 해당 라인을 따라 뭔가를 생각할 수도 있습니다.

어쨌든 좋은 리소스가 있다면 숙제를 직접하겠습니다.

감사

+0

"지금 당장은 변수 이름을 알고있는 한 데이터베이스에서 자유롭게 데이터를 가져올 수 있습니다." –

+0

또한, 당신은 ajax로 접근하는 파일에 PHP'$ _SESSION' id를 사용할 수 있습니다. 단지'session_start()'를 PHP 파일 상단에 넣으십시오. –

+0

@Johnny 당신은 가짜 요청을하고 그것을 보낼 수 있습니다 id = 32122 & action = delete (데모 목적으로) 그리고 32122 행을 지우거나 ... 내가 요청한 곳의 유효성을 확인하지 않았다. – guyfromfl

답변

0

AJAX 호출은 일반적으로 당신이 여기 그들을 사용하는 것 무엇 인 웹 서비스에 액세스하는 데 사용됩니다. 그렇다면 걱정할 필요가있는 것은 사용중인 서버 측 스크립팅 언어에서 제공 한 보안 계층입니다 (질문 태그에 따라 PHP를 사용하는 것처럼 보입니다).

AJAX 호출을 통해 액세스 할 수없는 사이트의 다른 페이지에 대한 인증 및 보호와 동일한 방법으로 웹 서비스를 구현할 수 있습니다. 예를 들어, 애플리케이션에 대한 인증이 필요한 경우 $ _SESSION에 사용자의 ID를 저장할 수 있습니다. 거기에서 웹 서비스 중 하나가 요청 될 때마다 $ _SESSION을 통해 사용자가 로그인했는지 확인할 수 있습니다.

+0

와우, 그건 내가 생각하는 것보다 훨씬 간단합니다. 내일 experiementing을 시작할 것입니다 ... – guyfromfl

+0

그리고 서버 쪽을 수정하는 것은 – guyfromfl

0

여기는 좋은 자료입니다. Securing Ajax Applications: Ensuring the Safety of the Dynamic Web

그러나 매우 간단한 방법은 개인 키와 함께 MD5 해시를 사용하는 것입니다. 예 : USER_NAME + PRIVATE_KEY. 웹 사이트/로그인에서 사용자 이름을 알고있는 경우 MD5 해시로 해당 키를 javascript 변수에 제공 할 수 있습니다. 그런 다음 AJAX 요청에 사용자 이름을 전달하면 REST 서비스는 사용자 이름과 동일한 개인 키와 두 해시를 비교할 수 있습니다. 단순히 해시를 통해 보내고 사용자 이름을 보내면됩니다. 간단하고 효과적입니다. 단순한 개인 키가 없다면 사실상 뒤집을 수 없습니다.

그래서 자바 스크립트에서이 설정해야 할 수도 있습니다 : 다음

var user='username'; 
var hash='925c35bae29a5d18124ead6fd0771756' 

을 당신이 당신의 요청을 보낼 때, 당신은 이런 식으로 뭔가를 보내

myService.php?user=username&hash=925c35bae29a5d18124ead6fd0771756&morerequests=goodthings 

당신이 그것을 확인하면 서비스에 당신 이 같은 것을 할 것입니다

<?php 
if(md5($_REQUEST['user']."_privatekey")==$_REQUEST['hash']){ 
echo 'passed validation'; 
}else{ 
echo 'sorry charlie'; 
}?> 

분명히 PHP 나 뭔가를 사용해야 할 것입니다. 전자 개인 키를 사용하여 해시를 생성하지만, 당신은 일반적인 아이디어를 얻을 것 같아요. _privatekey는 해킹하려고하는 트롤이있는 경우 복잡해야합니다.

+0

입니다. 저는 해싱을 사용하여 프로그램을 작성했고, 해싱 데이터에 대한 어떤 유형의 방법을 찾지 않으려 고 생각했습니다. 내일 자원을 읽으십시오. 의견을 보내 주셔서 감사합니다. – guyfromfl

0

종종 AJAX에서 보낸 요청을 확인하기 위해 X-REQUESTED-WITH HTTP 헤더를 확인하는 AJAX 호출을 보았습니다. AJAX 호출 방식 (XmlHttpRequest 또는 JS 라이브러리 사용)에 따라이 헤더의 표준 값을 사용하거나 사용자 정의 값으로 설정할 수 있습니다.페이지가 AJAX와 요청 된 경우 그 방법은, 당신은 확인 PHP에서이 비슷한 작업을 수행 할 수 있습니다

http://davidwalsh.name/detect-ajax

if(!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && 
    strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') 

HTTP 헤더이기 때문에, 그것은 스푸핑 될 수 있다는 것을 주목하는 것이 중요하다 , 그래서 그것은 결코 완전한 증거가 아닙니다.