我在codeigniter中有一个php网站,它允许用户上传文件。上载对大多数文件都适用。但是对于少数文件,nginx会抛出 403 Forbidden 错误。喜欢
<html>
<head><title>403 Forbidden</title></head>
<body bgcolor="white">
<center><h1>403 Forbidden</h1></center>
</body>
</html>
<!-- a padding to disable MSIE and Chrome friendly error page -->
<!-- a padding to disable MSIE and Chrome friendly error page -->
<!-- a padding to disable MSIE and Chrome friendly error page -->
<!-- a padding to disable MSIE and Chrome friendly error page -->
<!-- a padding to disable MSIE and Chrome friendly error page -->
<!-- a padding to disable MSIE and Chrome friendly error page -->
这是无法上传的示例.rb文件之一
# Sample code from Programing Ruby, page 58
string = <<END_OF_STRING
The body of the string
is the input lines up to
one ending with the same
text that followed the '<<'
END_OF_STRING
如果我从该文件中删除了'<<'
,则上传正常。这种过滤在哪里发生?
我看过nginx错误日志,那里什么也没有。我看过codeigniter日志,那里什么也没有。实际的上传请求未到达我的 Codeigniter控制器,因此在被nginx到达之前必须被阻止吗?
这是用Javascript上传的代码
function upload(file, params) {
var formData = new FormData();
formData.append("Filedata", file);
$.each(params, function(key, value) {
formData.append(key, value);
});
var xhr = new XMLHttpRequest();
var action = "/upload/file";
xhr.upload.onprogress = function(e){
// show progress with e.loaded, e.total
};
xhr.onerror = function(e) {
// handle error
};
xhr.open("POST", action, true);
xhr.send(formData);
}
在服务器端,我现在有简单的代码。
if( !isset($_FILES['Filedata']) || !file_exists($_FILES['Filedata']['tmp_name']) )
{
die('File not submitted.');
} else {
// Save file code is here
}
答案 0 :(得分:0)
在您的application / config / config.php中尝试 更改
$config['permitted_uri_chars'] = 'a-z 0-9~%.:_\-';
通过
$config['permitted_uri_chars'] = 'a-z 0-9~%.:_\-><';
但是请注意您的应用程序的安全性