0
我在我的应用程序中使用CodeIgniter3,一些表单使用ajax。我已经设置了csrf_regenerate = TRUE。最初我遇到了在连续的ajax调用中传递csrf标记(用于填充组合框)的问题,并且我解决了它。CodeIgniter中的CSRF和Ajax问题3
我有一个页面,我更新CSRFToken:
<script type="text/javascript" language="javascript">
var csfrData;
csfrTokenName = '<?php echo $this->security->get_csrf_token_name(); ?>';
csfrHash = '<?php echo $this->security->get_csrf_hash(); ?>';
setCSRF(csfrTokenName, csfrHash);
function setCSRF(name, value) {
csfrData = {}; // Reset csrfData to an empty array
csfrData[name] = value;
}
</script>
那么对于AJAX调用,我做到以下几点:
$('#department_id').change(function() {
var department_id=$("#department_id").val();
var domain=$("#domain").val();
$.ajax({
'type': "POST",
url: domain + "index.php/project/get_scheme",
data: {department_id: department_id, csrf_test_name: csfrData.csrf_test_name},
dataType: 'json',
success:
function(j){
setCSRF(j.csrfTokenName, j.csrfTokenHash);
if(j.schemes.length >= 2) {
var options = '';
for (var i = 0; i <= (j.schemes.length-1); i++) {
options += '<option value="' + j.schemes[i].id + '">' + j.schemes[i].name + '</option>';
}
$("#scheme_id").html(options);
$('#scheme_id option:first').prop('selected', 'selected');
}
}
});
});
这样,所有的组合框填充。但是当我最终提交表单时,会出现以下错误:
您请求的操作是不允许的。
当我使用Burpsuite进行检查时,发现此时csrf_token_name和csrf_cookie的值不匹配,因此出现错误。我无法弄清楚为什么会发生这种情况。任何指导将受到欢迎。
Suneel先生...您是否在将我的问题标记为重复之前阅读过该文章?我花了相当一段时间,我试图解决的问题 – John
嗨!您是否在get_scheme文件中使用会话或权限? – Dario
使用www测试域而不使用www – Dario