我正在使用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
}
});
});
您需要在与上传请求一起发送的参数中提供 CSRF 令牌和哈希,然后在服务器端进行验证。
默认情况下,精细上传器在请求正文中发送 POST 请求的数据。这是理想的跨浏览器解决方案。您可以通过向params
选项添加键/值来修改请求中发送的参数。修改客户端代码,如下所示:
// snip ...
params: {
"generateError": true,
"<?php echo $CI->security->get_csrf_token_name(); ?>":"<?php echo $CI->security->get_csrf_hash()"
}