2012-03-23 3 views
3

Uploadify 2.1.4를 Codeigniter 2.1.0 및 CSRF와 함께 사용하려고 노력 중입니다. 많은 행운이 없습니다. 내가 나에게 다시 던져 HTTP 500을 얻을 이미지를 업로드 할 때Codeigniter + CSRF와 함께 작동하는 Uploadify를 얻는 방법은 무엇입니까?

$(function() { 
     var cct = $.cookie('csrf_cookie_name'); 
     $('#uploadifyMe').uploadify({ 
      'uploader'  : '<?php echo site_url(); ?>js/uploadify/uploadify.swf', 
      'script'   : '<?php echo site_url(); ?>upload/', 
      'cancelImg'  : '<?php echo site_url(); ?>js/uploadify/cancel.png', 
      'multi'   : true, 
      'auto'   : false, 
      'fileExt'  : '*.jpg;*.jpeg', 
      'fileDesc'  : 'Image Files (JPG, JPEG)', 
      'fileDataName' : 'imgData', 
      'queueID'  : 'fileQueue', 
      'simUploadLimit' : 1, 
      'sizeLimit' : 7340032, 
      'removeCompleted': false, 
      'scriptData' : { 'csrf_token_name' : cct, 'upload' : 'true' }, 
      'onSelectOnce' : function(event, data) { 
       $('.uploadifyProgress').addClass('progress'); 
       $('.uploadifyProgressBar').addClass('bar'); 
      }, 
      'onComplete' : function(e, i, f, r, d) { 
       console.log(r); 
      }, 
      'onError' : function(e, i, f, eO) { 
       console.log(eO); 
       if(eO.info == 500) { 
        $('#status').prop('class', 'alert alert-error').html('<a class="close" data-dismiss="alert">&times;</a><h4>Hmmm. Something gone wrong it has.</h4> Yoda has discovered that your security token has expired. This is because you have been here for longer than two hours. we cannot refresh your key automatically, please refresh the page and try again.'); 
       } 
      } 
     }); 
}); 

문제는 : 나는 아주 기본적인 업로드 컨트롤러 & uploadify에 대한 다음과 같은 코드가 있습니다. 이제 CSRF가 켜져 있기 때문에 CSRF가 켜져 있다는 것을 알았습니다.

나는이 문제에 대한 많은 해결책을 시도했다. 내 코드에서 볼 수있는 코드와 여기서 나온 코드를 사용하여 세션 데이터를 복제하고 CSRF 키로 전송하지만 아무 것도 작동하지 않습니다. CSRF를 끄지 않으면 항상 500 HTTP로 끝납니다.

누구든지 도움을받을 수 있다면 정말 감사하겠습니다. 나는이 질문이 많은 질문을받는 것 같음을 깨닫고 열매를 맺는다. 표준 AJAX 요청과 함께 CSRF를 전달하는 쪽지에서는 잘 작동하며 uploadify는 작동하지 않습니다.

+0

작은 메모. CSRF를 활성화 한 상태에서 일치 사용자 에이전트 옵션을 사용할 수 없습니다. – Vunus

답변

2

이 코드를 사용하면 CSRF의 적용을받지 않는 컨트롤러 메서드 배열을 정의 할 수 있습니다. https://github.com/EllisLab/CodeIgniter/pull/236.

+1

답을 받아들이는 것이 다소 늦었다는 것을 알았지 만, 이것은 대담한 일이었습니다. 그 이후로 새로운 프로젝트를 위해 Laravel을 사용하여 CSRF 시스템을 사용하기가 훨씬 쉬워졌지만, 고객이 필요합니다. – Vunus

0

Uploadify가 완전히 다른 브라우저와 다른 세션 인 다른 Flash 객체를 사용하므로 쿠키 데이터를 POST 할 때 CSRF가 세션과 일치하지 않습니다.

원본 CSRF 기능을 MY_Security.php 파일로 덮어 써서 예를 들어 POST를 통해 전체 세션 쿠키를 보내고 CSRF에서 읽을 수 있도록 만들어야합니다. 일치시킬 수 있습니다.

과 같은 HTML5 업 로더를 사용하면 이러한 재정의를 할 필요가없는 더 나은 기회를 얻을 수 있습니다.

+0

안녕하세요. 답변 해주셔서 감사합니다. CSRF에 대한 재정의 양식을 업로드하기 위해 추가했습니다. 어쨌든 시스템을 사용하지 않기로 결정한 클라이언트를 켭니다. :( – Vunus

관련 문제