【问题标题】:Uploads through Dropzone.js return '403 forbidden' while other uploads don't通过 Dropzone.js 上传会返回“403 禁止”,而其他上传不会
【发布时间】:2014-07-15 13:42:02
【问题描述】:

我将 TinyMCE 与包含 DropZone.js 的文件管理器响应式文件管理器一起使用。通过它上传文件的所有尝试都失败并返回 403 Forbidden 错误消息。

我尝试将 url 参数更改为例如 "index.php""/ui/scripts/libs/filemanager/upload_notexists.php"。如果我在地址栏中键入“index.php”,则可以访问原始 url 值而不会出现错误消息。 “notexists” url 返回 404 错误,因为它不存在。无论网址如何,上传总是返回 403 Forbidden。

我尝试设置forceFallback: truemethod: "post"/method: "put"。它仍然返回 403 Forbidden。

这是初始化 DropZone.js 的代码:

var allowed_ext = new Array('jpg','jpeg','png','gif','bmp','tiff','svg','doc','docx','rtf','pdf','xls','xlsx','txt','csv','html','xhtml','psd','sql','log','fla','xml','ade','adp','mdb','accdb','ppt','pptx','odt','ots','ott','odb','odg','otp','otg','odf','ods','odp','css','ai','zip','rar','gz','tar','iso','dmg','mov','mpeg','mp4','avi','mpg','wma','flv','webm','mp3','m4a','ac3','aiff','mid','ogg','wav');

//dropzone config
Dropzone.options.myAwesomeDropzone = {
    dictInvalidFileType: "Filtypen är ej tillåten.",
    dictFileTooBig: "Den uppladdade filen överskrider max storleken.",
    dictResponseError: "SERVER ERROR",
    paramName: "file", // The name that will be used to transfer the file
    maxFilesize: 100, // MB
    url: "http://subdomain.example.com/ui/scripts/libs/filemanager/upload.php",
    //url: "http://subdomain.example.com/index.php",
    accept: function(file, done) {
        var extension=file.name.split('.').pop();
        extension=extension.toLowerCase();
        if ($.inArray(extension, allowed_ext) > -1) {
            done();
        }
        else { 
            done("Filtypen är ej tillåten."); 
        }
    },
    //forceFallback: true,
    //method: "post"
};

我尝试过使用

我也用这个基本代码测试了上传,它有效:

<form method="post" enctype="multipart/form-data">
    Fil: <input type="file" name="filer[]" multiple>
    <br>
    <input type="submit">
</form>

这里是 phpinfo() 的核心部分:

CorePHP Version     5.3.28 

Directive   Local Value Master Value
allow_call_time_pass_reference  On  On
allow_url_fopen On  On
allow_url_include   Off Off
always_populate_raw_post_data   Off Off
arg_separator.input &   &
arg_separator.output    &   &
asp_tags    Off Off
auto_append_file    no value    no value
auto_globals_jit    On  On
auto_prepend_file   no value    no value
browscap    no value    no value
default_charset no value    no value
default_mimetype    text/html   text/html
define_syslog_variables Off Off
disable_classes no value    no value
disable_functions   link,symlink,exec,shell_exec,system,passthru    link,symlink,exec,shell_exec,system,passthru
display_errors  Off Off
display_startup_errors  Off Off
doc_root    no value    no value
docref_ext  no value    no value
docref_root no value    no value
enable_dl   Off Off
error_append_string no value    no value
error_log   /dev/null   /dev/null
error_prepend_string    no value    no value
error_reporting 30711   30711
exit_on_timeout Off Off
expose_php  Off Off
extension_dir   /usr/local/php53/lib/php/extensions/no-debug-non-zts-20090626   /usr/local/php53/lib/php/extensions/no-debug-non-zts-20090626
file_uploads    On  On
highlight.bg    #FFFFFF #FFFFFF
highlight.comment   #FF8000 #FF8000
highlight.default   #0000BB #0000BB
highlight.html  #000000 #000000
highlight.keyword   #007700 #007700
highlight.string    #DD0000 #DD0000
html_errors On  On
ignore_repeated_errors  Off Off
ignore_repeated_source  Off Off
ignore_user_abort   Off Off
implicit_flush  Off Off
include_path    .:/usr/local/lib/php    .:/usr/local/lib/php
log_errors  Off Off
log_errors_max_len  1024    1024
magic_quotes_gpc    Off Off
magic_quotes_runtime    Off Off
magic_quotes_sybase Off Off
mail.add_x_header   Off Off
mail.force_extra_parameters no value    no value
mail.log    no value    no value
max_execution_time  500 500
max_file_uploads    2000    2000
max_input_nesting_level 64  64
max_input_time  -1  -1
max_input_vars  8000    8000
memory_limit    512M    512M
open_basedir    no value    no value
output_buffering    1   1
output_handler  no value    no value
post_max_size   1600M   1600M
precision   12  12
realpath_cache_size 16K 16K
realpath_cache_ttl  120 120
register_argc_argv  On  On
register_globals    Off Off
register_long_arrays    On  On
report_memleaks On  On
report_zend_debug   On  On
request_order   no value    no value
safe_mode   Off Off
safe_mode_exec_dir  no value    no value
safe_mode_gid   Off Off
safe_mode_include_dir   no value    no value
sendmail_from   no value    no value
sendmail_path   /usr/sbin/sendmail -t -i    /usr/sbin/sendmail -t -i
serialize_precision 100 100
short_open_tag  On  On
SMTP    localhost   localhost
smtp_port   25  25
sql.safe_mode   Off Off
track_errors    Off Off
unserialize_callback_func   no value    no value
upload_max_filesize 800M    800M
upload_tmp_dir  no value    no value
user_dir    no value    no value
user_ini.cache_ttl  300 300
user_ini.filename   .user.ini   .user.ini
variables_order EGPCS   EGPCS
xmlrpc_error_number 0   0
xmlrpc_errors   Off Off
y2k_compliance  On  On
zend.enable_gc  On  On

编辑:我已经设法在我的共享主机上打开错误日志记录。它什么也没显示。 :c (2014-07-15 18:48)

【问题讨论】:

  • 能不能提一下你的php文件上传代码
  • 尝试在您的代码中添加文件编码。例如 image/jpeg 用于 jpg 或 jpeg;从逻辑上讲,发送/接收到/从服务器编码的数据始终是指定的。
  • 您是否尝试从 example.com 上传到 subdomain.example.com?跨域请求不起作用。
  • 您真的应该使用浏览器可用的工具查看请求 - Firefox 中的 Web 控制台(单击网络下拉菜单并确保选中日志)或 Chrome 中的开发人员工具(网络选项卡)。它们允许您检查请求以及所有请求标头,您可以与基本表单上传进行比较,以了解重要的区别。

标签: javascript php apache tinymce dropzone.js


【解决方案1】:

假设您的文件未上传且您的 URL 正确,则问题似乎与响应式文件管理器文件权限有关(403:禁止)。

在父目录中检查此文件和 .htaccess 的所有者。

【讨论】:

    【解决方案2】:

    似乎我的共享主机会为每个包含"/../"POST 数据字符串抛出一个403 Forbidden。作为一项安全功能...

    当响应文件管理器将上传数据发送到 upload.php 时,它还会发送一个配置变量,在我的例子中是 "../../files",因此服务器向我抛出了 403。

    This SO answer 让我相信这可能是由 mod_security 引起的,mod_security 是 apache/托管环境的防火墙。我已经联系了我的共享主机,并会在他们回复时更新答案。

    【讨论】:

    • 难道/../ 的意思是转到根目录,然后尝试再往后一个目录?这是不可能的
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-28
    • 1970-01-01
    • 2013-08-30
    • 2021-11-02
    • 2012-10-04
    • 2013-06-09
    相关资源
    最近更新 更多