2011-11-16 5 views
0

좋아, 얘들 아, 전이 문제가 이전에 다뤄 졌음을 알았지 만, 제 질문과 관련이있는 것은 그러한 일을하는 보안입니다. 별도의 파일에 클래스에있는 PHP 함수에 의해 생성되는 페이지가 있습니다. ... 지금AJAX와 PHP, PHP 함수 호출

function buildPickers($uid){ 
$user =& JFactory::getUser(); 
} 

내 페이지가 너무 좋아

<div class="transferfunds"> 
<?php dashboardFunction::buildPickers($uid); ?> 
</div> 

... 호출하고 내 PHP 함수는 (분명히 함), 나는이 일이하고 싶은 것, 그것은 특정 내용을로드 로드,하지만 사용자가 뭔가 특정 (예 : 드롭 다운)과 상호 작용할 때 AJAX 다시이 함수를 호출하고 특정 div 다시로드하려면 사용하고 싶습니다.

나는

if(isset($_POST['dataTest']) && !empty($_POST['dataTest'])) { 
dashboardFunction::buildPickers($uid); 
} 

... 그래서 같은 PHP에서 ... 내가 아약스를 통해 변수를 전달하고 문신 기능과 같은 호출 할 수 그것을 위해

$.ajax({ 
     type : 'POST', 
     url : 'post.php', 
     dataType : 'html', 
     data: { 
      dataTest : 'test' 
     }, 
     success : function(data){ 
       $('#div').html(data); 
     }, 
     error : function(XMLHttpRequest, textStatus, errorThrown) { 

     } 
    }); 

및 테스트를 얻을 그러나 A.는 것 이 작업은 확실합니다. B.이 작업이 실제로 안전할까요? 어떤 종류의 주입에도 취약합니까? 감사!

답변

1

사용자 자격 증명을이 방법으로 전달할 것이라고 가정합니다. 그렇다면이 방법은 안전하지 않습니다. 스크립트간에 사용자 데이터를 공유하려면 사용자 세션에 의존하는 것이 좋습니다.

+0

@ 그렉 톰슨 : 만약 위의 경우 귀하의 질문에 오해가 내 대답을 보지 마세요. – PeeHaa

+0

Greg의 첫 번째 코드 블록에서 div에 할당 된 'transerfunds'클래스로 인해 사용자 자격 증명이 있다고 가정합니다. 스트레치가 될 수도 있습니다 : p –

+0

그것은 두 번 확인하기 위해 아프지 않습니다 : D – PeeHaa

0

A. 확실히

이 작업은 물론 그것은 작동 할 것입니다. 다른 물건을 검색하는 경우 그러나 다른 URL을 호출 청소기있을 수 있습니다. 그러나이 실제로

그것은 안전 안전 할 것

B를 작동합니다. 그러나이 방법으로 여러 함수에 액세스하려면 :

$ func = $ _POST [ 'dataTest']; dashboardFunction -> $ func();

허용 된 기능의 허용 목록을 추가해야합니다.

그러나 하드 코딩 된 하나의 함수에 액세스하려는 경우 변수가 설정되어 있는지 확인하면 문제가 없습니다.

0

함수 이름에서이 함수를 사용하여 선택 목록을 작성하거나 내용을로드하는 것처럼 보입니다. 따라서 데이터를 삭제/삽입/업데이트하는 것이 아니라 선택 만하고 있다면 아마 PHP 페이지 (buildPickers 함수)에서 쿼리를 실행하기 전에 입력 내용을 적절히 정리하면됩니다.

Ajax 요청을 토큰으로 전달하고 작업 페이지에서 토큰을 확인할 수도 있으므로 작업 페이지의 URL을 직접 호출하여 이벤트를 실행하기가 더 어려울 수 있습니다 .

마지막으로 실제로 SELECT 작업을 수행하는 경우 POST이 아닌 GET을 사용해야합니다. 실제로는 중요하지 않습니다.

+0

그냥 Joomla를 사용하는 것으로 나타났습니다. 그렇습니다. JUtility :: getToken()을 사용하여 토큰을 전달한 다음'JRequest :: checkToken ('get') 또는 jexit ('Invalid Token'); ('POST' 데이터를 끝내면'get'을 제거하십시오. – julio