【问题标题】:fineuploader + codeigniter CSRF protectionFineuploader + codeigniter CSRF 保护
【发布时间】:2013-09-20 06:58:20
【问题描述】:

我正在使用fineuploader 和codeigniter。为了使上传更安全,我想通过在配置中启用它来使用 codeigniter 提供的 CSRF 保护。现在,当使用 codeigniter 的表单助手时,它会自动在表单中添加一个隐藏字段。

但是,我不知道如何使用 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
        }
    });
});

【问题讨论】:

  • 看看这个thread
  • 感谢您的链接。我添加了数据: {'security->get_csrf_token_name(); ?>':'security->get_csrf_hash(); ?>'} 到我的代码,但它不再工作了。添加后,fineuploader 不再显示。
  • 您的 Javascript 控制台是否报告了任何导入错误或其他错误?

标签: php codeigniter csrf fine-uploader


【解决方案1】:

您需要在与上传请求一起发送的参数中提供 CSRF 令牌和哈希,然后在服务器端进行验证。

默认情况下,Fine Uploader 在请求正文中发送 POST 请求的数据。这是理想的跨浏览器解决方案。您可以通过将键/值添加到 params 选项来修改请求中发送的参数。像这样修改你的客户端代码:

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

【讨论】:

  • 非常感谢,工作正常!我没有把它放在“params”下,这样就成功了。
  • 这在使用 Amazon S3 上传器时不起作用。
  • 请参阅github.com/Widen/fine-uploader/issues/996,了解与 S3 上传器和 CSRF 令牌相关的具体问题。对它进行投票,或者如果您希望看到它被实施,请提供反馈。我们现在正在计划 4.2,所以现在是加入的好时机!
猜你喜欢
  • 1970-01-01
  • 2012-02-03
  • 2011-10-23
  • 2015-08-11
  • 2017-06-14
  • 2023-03-08
  • 2013-02-13
  • 2016-04-25
  • 1970-01-01
相关资源
最近更新 更多