2013-09-16 10 views
2

Я использую fineuploader и codeigniter. Чтобы сделать загрузку более безопасной, я хотел бы использовать защиту CSRF, предоставляемую кодеригнером, включив ее в конфигурацию. Теперь, используя хелпер формы codeigniter, он автоматически добавляет скрытое поле в форму.fineuploader + codeigniter Защита CSRF

Однако я не знаю, как это реализовать с помощью fineuploader, так как у меня нет видимой формы здесь. Любые советы?

<script> 
$(document).ready(function() { 
    $('#bootstrapped-fine-uploader').fineUploader({ 
       request: { 
        endpoint: "<?= site_url('upload/doUpload') ?>", 
    params: {"generateError": true} 
    }, 
    chunking: { 
    enabled: true 
    }, 
    debug: true, 
    text: { 
    uploadButton: '<div><i class="icon-upload icon-white"></i> Datei auswählen</div>' 
      }, 
       template: '<div class="qq-uploader span12">' + 
         '<pre class="qq-upload-drop-area span12"><span>{dragZoneText}</span></pre>' + 
         '<div class="qq-upload-button btn btn-success">{uploadButtonText}</div>' + 
         '<span class="qq-drop-processing"><span>{dropProcessingText}</span><span class="qq-drop-processing-spinner"></span></span>' + 
         '<ul class="qq-upload-list" style="margin-top: 10px; text-align: center;"></ul>' + 
         '</div>', 
    validation: { 
    allowedExtensions: [], 
    sizeLimit: 1000 * 1000 * 800 
    }, 
    showMessage: function(message) { 
    // Using Twitter Bootstrap's classes and jQuery selector and method 
    $('.qq-upload-list').append('<li class="alert alert-error">' + message + '</li>'); 
     }, 
     failedUploadTextDisplay: { 
      mode: 'custom', 
      maxChars: 100, 
      responseProperty: 'error', 
      enableTooltip: true 
     }, 
     classes: { 
      success: 'alert alert-success', 
      fail: 'alert alert-error' 
     }, 
     retry: { 
      enableAuto: false 
     } 
    }); 
}); 
+1

Посмотрите на это [нить] (http://stackoverflow.com/questions/14294672/using-fileuploader-js-in-codeigniter-along-with- csrf-in-ajax/14299951 # 14299951) –

+0

Благодарим вас за ссылку. Я добавил данные: {' security-> get_csrf_token_name(); ?> ':' security-> get_csrf_hash(); ?> '} моему коду, но он больше не работает. После добавления этого параметра Fineuploader больше не отображается. – netik

+0

Является ли ваша консоль Javascript сообщая о любых ошибках импорта или иным образом? –

ответ

2

Вам необходимо предоставить маркер CSRF и хэш в ваших параметров, отправляемых вместе с запросом на загрузку, а затем проверить его на стороне сервера.

Fine Uploader по умолчанию отправляет данные для POST-запросов в теле запроса. И это идеальное кросс-браузерное решение. Вы можете изменить параметры, отправляемые в запросе, добавив ключи/значения в параметр params. Измените код на стороне клиента, так как:

// snip ... 
params: { 
    "generateError": true, 
    "<?php echo $CI->security->get_csrf_token_name(); ?>":"<?php echo $CI->security->get_csrf_hash()" 
    } 
+0

Большое вам спасибо, работает отлично! Я не поместил его под «params», это и сделало трюк. – netik

+0

Это не работает при использовании загрузчика Amazon S3. –

+0

См. Https://github.com/Widen/fine-uploader/issues/996 для конкретной проблемы, связанной с токенами S3 и CSRF. Проголосуйте по нему или сообщите об этом, если это то, что вы хотели бы увидеть. Сейчас мы планируем 4.2, так что было бы хорошо провести время! –