GVKun编程网logo

DEDEcms 出现“Upload filetype not allow”的原因及解决办法(uploadtempdir)

2

此处将为大家介绍关于DEDEcms出现“Uploadfiletypenotallow”的原因及解决办法的详细内容,并且为您解答有关uploadtempdir的相关问题,此外,我们还将为您介绍关于Acc

此处将为大家介绍关于DEDEcms 出现“Upload filetype not allow”的原因及解决办法的详细内容,并且为您解答有关uploadtempdir的相关问题,此外,我们还将为您介绍关于Access-Control-Allow-Headers 不允许请求标头字段 Access-Control-Allow-Headers、Access-Control-Allow-Headers不允许请求标头字段Access-Control-Allow-Headers、Access-Control-Allow-Origin 标头如何工作? - How does Access-Control-Allow-Origin header work?、AJAX cors 问题:预检响应中的 Access-Control-Allow-Headers 不允许请求标头字段 access-control-allow-credentials的有用信息。

本文目录一览:

DEDEcms 出现“Upload filetype not allow”的原因及解决办法(uploadtempdir)

DEDEcms 出现“Upload filetype not allow”的原因及解决办法(uploadtempdir)

《Dedecms 出现“Upload filetype not allow”的原因及解决办法》要点:
本文介绍了Dedecms 出现“Upload filetype not allow”的原因及解决办法,希望对您有用。如果有疑问,可以联系我们。

导读:如果有同学是按某些朋友用删除代码的方法解决问题的话,建议你修正此做法,毕竟这是有很大安全风险的.而DEDE本身的安全隐患比较多,任何不...
如果有同学是按某些朋友用删除代码的方法解决问题的话,任何不安全的修改和操作都会断送掉网站的安全.

[代码]PHP代码:

1 $imtypes =array("image/pjpeg","image/jpeg""image/gif""image/png""image/xpng""image/wbmp""image/bmp");
2  if(in_array(strtolower(trim(${$_key.'_type'})),$imtypes))
3  {
4  $image_dd = @getimagesize($);
5 if (!is_array($image_dd))
6 {
7  exit'Upload filetype not allow !'8 }
9 }

这里的$$_key,指的是上传文件的临时路径,如“d:/PHP/temp/aaa.tmp”.

我们可以看出,这getimagesize($$_key)这个方法,是在哀求PHP临时目录的读取权限,如果d:/PHP/temp没有读取权限就会出现无法读取的错误.
@getimagesize($$_key);返回的值其实是False,而这里DEDE程序员简单的使用了@屏掉错误提示,并没有考虑到权限问题,造成用户无法了解真正错误原因是没有目录权限,而不是文件类型不允许.
一顿茫然.
修改办法如下:
1,在PHP.ini中添加d:/PHP/temp的读写权限,这一步基本上都不用操作.因为这个目录一般都是可读写的,不然任何文件都无法上传;
2,部份虚拟主机用户,可能添加了PHP_admin_value open_basedir 指令,在这里,我们要求添加上临时目录的权限,如:“PHP_admin_value open_basedir "E:/wwwroot/www.a.com;D:/PHP/temp"”
然后重启WebServer,至此,问题解决.

小编培训学院每天发布《Dedecms 出现“Upload filetype not allow”的原因及解决办法》等实战技能,PHP、MysqL、LINUX、APP、JS,CSS全面培养人才。

Access-Control-Allow-Headers 不允许请求标头字段 Access-Control-Allow-Headers

Access-Control-Allow-Headers 不允许请求标头字段 Access-Control-Allow-Headers

我正在尝试使用发布请求将文件发送到我的服务器,但是当它发送时会导致错误:

Access-Control-Allow-Headers 不允许请求标头字段 Content-Type。

所以我用谷歌搜索了错误并添加了标题:

$http.post($rootScope.URL, {params: arguments}, {headers: {    "Access-Control-Allow-Origin" : "*",    "Access-Control-Allow-Methods" : "GET,POST,PUT,DELETE,OPTIONS",    "Access-Control-Allow-Headers": "Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With"}

然后我得到错误:

Access-Control-Allow-Headers 不允许请求标头字段 Access-Control-Allow-Origin

所以我用谷歌搜索,我能找到的唯一类似问题是提供了一个半答案,然后作为离题关闭。我应该添加/删除哪些标题?

答案1

小编典典

服务器* (POST 请求被发送到)需要 在其响应Access-Control-Allow-Headers中包含标头(等)。将它们放入来自客户的请求中没有任何效果。您应该从 POST 请求中删除“Access-Control-
Allow-…”标头。
*

这是因为由服务器指定它接受跨域请求(并且它允许Content-Type请求标头等)——客户端无法自行决定给定服务器应该允许 CORS。

请求者(网络浏览器)可以通过发送“OPTIONS”请求(即不是您想要的“POST”或“GET”请求)“预检”测试服务器的同源策略是什么。如果对“OPTIONS”请求的响应包含“Access-
Control-Allow-…”标头,允许您的请求使用的标头、来源或方法,则请求者/浏览器将发送您的“POST”或“GET” ‘ 要求。

(晦涩的注释:) Access-Control-Allow-… 具有值“ ”,而不是列出允许的特定来源、标头或方法。 但是,我使用的旧 Android
WebView 客户端不支持 ‘
‘ 通配符,并且需要在响应 OPTIONS 请求的 Access-Control-Allow-Headers
标头中列出的特定标头。

Access-Control-Allow-Headers不允许请求标头字段Access-Control-Allow-Headers

Access-Control-Allow-Headers不允许请求标头字段Access-Control-Allow-Headers

我正在尝试使用发布请求将文件发送到服务器,但是在发送请求时会导致错误:

Access-Control-Allow-Headers不允许请求标头字段Content-Type。

所以我搜索了错误并添加了标题:

$http.post($rootScope.URL, {params: arguments}, {headers: {    "Access-Control-Allow-Origin" : "*",    "Access-Control-Allow-Methods" : "GET,POST,PUT,DELETE,OPTIONS",    "Access-Control-Allow-Headers": "Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With"}

然后我得到错误:

Access-Control-Allow-Headers不允许请求标头字段Access-Control-Allow-Origin

所以我用谷歌搜索,唯一能找到的类似问题是半答案,然后关闭主题。我应该添加/删除哪些标题?

答案1

小编典典

服务器 (POST请求发送到的 服务器Access-Control-Allow-Headers的响应中
需要包含标头(等)。将它们放入客户的请求中无效。

这是因为服务器需要指定它接受跨域请求(并允许Content-Type请求标头,依此类推)–客户端无法自行决定给定服务器应允许CORS。

Access-Control-Allow-Origin 标头如何工作? - How does Access-Control-Allow-Origin header work?

Access-Control-Allow-Origin 标头如何工作? - How does Access-Control-Allow-Origin header work?

问题:

Apparently, I have completely misunderstood its semantics. 显然,我完全误解了它的语义。 I thought of something like this: 我想到了这样的事情:

  1. A client downloads javascript code MyCode.js from http://siteA - the origin . 客户端从 http://siteA- origin 下载 javascript 代码 MyCode.js。
  2. The response header of MyCode.js contains Access-Control-Allow-Origin: http://siteB , which I thought meant that MyCode.js was allowed to make cross-origin references to the site B. MyCode.js 的响应标头包含 Access-Control-Allow-Origin:http:// siteB ,我认为这意味着 MyCode.js 被允许对站点 B 进行跨域引用。
  3. The client triggers some functionality of MyCode.js, which in turn make requests to http://siteB, which should be fine, despite being cross-origin requests. 客户端触发了 MyCode.js 的某些功能,该功能继而向 http://siteB 发出了请求,尽管这是跨域请求,但仍然可以。

Well, I am wrong. 好吧,我错了。 It does not work like this at all. 它根本不像这样工作。 So, I have read Cross-origin resource sharing and attempted to read Cross-Origin Resource Sharing in w3c recommendation 因此,我阅读了跨域资源共享,并尝试阅读 w3c 建议中的跨域资源共享

One thing is sure - I still do not understand how am I supposed to use this header. 可以确定的一件事 - 我仍然不明白我应该如何使用此标头。

I have full control of both site A and site B. How do I enable the javascript code downloaded from the site A to access resources on the site B using this header? 我对站点 A 和站点 B 都拥有完全控制权。如何使用此标头使从站点 A 下载的 javascript 代码能够访问站点 B 上的资源?

PS 聚苯乙烯

I do not want to utilize JSONP. 我不想利用 JSONP。


解决方案:

参考一: https://stackoom.com/question/id4F/Access-Control-Allow-Origin 标头如何工作
参考二: https://oldbug.net/q/id4F/How-does-Access-Control-Allow-Origin-header-work

AJAX cors 问题:预检响应中的 Access-Control-Allow-Headers 不允许请求标头字段 access-control-allow-credentials

AJAX cors 问题:预检响应中的 Access-Control-Allow-Headers 不允许请求标头字段 access-control-allow-credentials

如何解决AJAX cors 问题:预检响应中的 Access-Control-Allow-Headers 不允许请求标头字段 access-control-allow-credentials

我正在从主机 (http://abc.com.au) 向在主机 http://localhost:8081 上运行的 Spring Cloud API 网关发送 ajax 请求。

jquery AJAX 请求代码。

SimplifiedAdoptionBulkUpload.jsp

  1. setCookie("username",''abc'',30);
  2. $.ajax({
  3. type: "POST",enctype: ''multipart/form-data'',url: "http://localhost:8081/api/v1/users/bulkUpload",xhrFields: {
  4. withCredentials: true
  5. },data: newData,processData: false,contentType: false,crossDomain: true,cache: false,timeout: 600000,success: function (data) {
  6. .....
  7. },error: function (e) {
  8. $(''#btnSubmit'').prop("disabled",false);
  9. $(''#txtMessage'').text(''Error Occured'');
  10. },beforeSend: function (xhr) {
  11. xhr.setRequestHeader(''Authorization'',''Bearer '' + token);
  12. xhr.setRequestHeader(''Access-Control-Allow-Credentials'',''true'');
  13. xhr.setRequestHeader(''Access-Control-Allow-Headers'',"Origin,Cookie,X-Requested-With,Content-Type,Accept,Authorization");
  14. $(''body'').addClass("loading");
  15. }
  16. });

spring 云网关 cors 配置。

  1. @Configuration
  2. public class PreFlightCorsConfiguration {
  3. private static final String ALLOWED_HEADERS = "Origin,Authorization";
  4. private static final String ALLOWED_METHODS = "*";
  5. private static final String ALLOWED_ORIGIN = "http://abc.com.au";
  6. private static final String ALLOWED_EXPOSE = "*";
  7. private static final String MAX_AGE = "3600";
  8. @Bean
  9. public WebFilter corsFilter() {
  10. return (ServerWebExchange ctx,WebFilterChain chain) -> {
  11. ServerHttpRequest request = ctx.getRequest();
  12. if (CorsUtils.isCorsRequest(request)) {
  13. ServerHttpResponse response = ctx.getResponse();
  14. HttpHeaders headers = response.getHeaders();
  15. headers.set("Access-Control-Allow-Origin",ALLOWED_ORIGIN);
  16. headers.add("Access-Control-Allow-Methods",ALLOWED_METHODS);
  17. headers.add("Access-Control-Max-Age",MAX_AGE);
  18. headers.add("Access-Control-Allow-Headers",ALLOWED_HEADERS);
  19. headers.add("Access-Control-Expose-Headers",ALLOWED_EXPOSE);
  20. headers.add("Access-Control-Allow-Credentials","true");
  21. if (request.getmethod() == HttpMethod.OPTIONS) {
  22. response.setStatusCode(HttpStatus.OK);
  23. return Mono.empty();
  24. }
  25. }
  26. return chain.filter(ctx);
  27. };
  28. }
  29. }

我在 Chrome 控制台中收到以下错误。

SimplifiedAdoptionBulkUpload:1 访问 XMLHttpRequest ''http://localhost:8081/api/v1/users/bulkUpload'' 来自原点 “http://abc.com.au”已被 CORS 政策阻止:请求标头 field access-control-allow-credentials 不允许 预检响应中的 Access-Control-Allow-Headers。

更新:

我从 ajax 请求中删除了这一行。

  1. xhr.setRequestHeader(''Access-Control-Request-Headers'',Authorization");

我正在将两个 cookie(accces_token、refresh_token)设置为 jsp 和 servlet 过滤器中的 cookie。

  1. public class AdminSecurityFilter implements Filter {
  2. public void doFilter(ServletRequest req,ServletResponse res,FilterChain chain) throws IOException,servletexception {
  3. boolean error = false;
  4. HttpServletRequest request = (HttpServletRequest) req;
  5. HttpServletResponse response = (HttpServletResponse) res;
  6. request.setCharacterEncoding("UTF-8");
  7. if(authenticated) {
  8. String accesstoken = getUserAccesstoken(userStr,passstr);
  9. if(!accesstoken.isEmpty()) {
  10. Cookie cookie = new Cookie("access_token",accesstoken);
  11. cookie.setPath("/");
  12. //cookie.setHttpOnly(true);
  13. //cookie.setDomain("localhost");
  14. //Todo: When in production must do cookie.setSecure(true);
  15. cookie.setMaxAge(3600);
  16. response.setHeader("Access-Control-Allow-Credentials","true");
  17. response.setHeader("Access-Control-Allow-Origin","http://localhost:8081");
  18. response.addCookie(cookie);
  19. }
  20. if(!refreshToken.isEmpty()) {
  21. Cookie cookie = new Cookie("refresh_token",refreshToken);
  22. cookie.setPath("/");
  23. //cookie.setHttpOnly(true);
  24. //cookie.setDomain("localhost");
  25. //Todo: When in production must do cookie.setSecure(true);
  26. cookie.setMaxAge(10000);
  27. response.setHeader("Access-Control-Allow-Credentials","true");
  28. response.setHeader("Access-Control-Allow-Origin","http://localhost:8081");
  29. response.addCookie(cookie);
  30. }
  31. }
  32. }

也在 jsp 文件中我使用 jquery 设置值 cookie。

  1. function setCookie(cname,cvalue,exdays) {
  2. var d = new Date();
  3. d.setTime(d.getTime() + (exdays*24*60*60*1000));
  4. var expires = "expires=" + d.toGMTString();
  5. document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/";
  6. }
  7. setCookie("username",''Nirangaa'',30);

但是这些 cookie 值(用户名、refresh_token、access_token)在 Spring Cloud Gateway 的标头中缺失。 为什么 AJAX 请求没有将附加在 post 请求中的 cookie 值发送到 apigteway 端。 @T.J.如果你能解释为什么会发生这种情况,克劳德很感激

  1. @Component
  2. public class AccesstokenCheckingGlobalFilterPre extends AbstractGatewayFilterFactory<AccesstokenCheckingGlobalFilterPre.Config> {
  3. public AccesstokenCheckingGlobalFilterPre() {
  4. super(AccesstokenCheckingGlobalFilterPre.Config.class);
  5. }
  6. @Override
  7. public GatewayFilter apply(AccesstokenCheckingGlobalFilterPre.Config config) {
  8. return (exchange,chain) -> {
  9. Route route = exchange.getAttribute(ServerWebExchangeUtils.GATEWAY_ROUTE_ATTR);
  10. ServerHttpRequest request = null;
  11. if (route != null) {
  12. request = exchange.getRequest();
  13. **//[Host:"localhost:8081",Connection:"keep-alive",Content-Length:"7391",Accept:"*/*",Access-Control-Allow-Credentials:"true",Authorization:"Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOlsiamFjcGx1c19yZXNvdXJjZSJdLCJFeHBpcmVzSW4iOjM1OTksInVzZXJfbmFtZSI6Im5zYW5kYXJ1d2FAd2lsZXkuY29tIiwic2NvcGUiOlsiUkVBRCxXUklURSJdLCJleHAiOjE2MTUxOTQwNjIsInVzZXJOYW1lIjoibnNhbmRhcnV3YUB3aWxleS5jb20iLCJhdXRob3JpdGllcyI6WyJST0xFX0FkbWluaXN0cmF0b3IiLCJST0xFX3RlYWNoZXIiLCJST0xFX3NjaGFkbWluIiwiUk9MRV9zdHVkZW50Il0sImp0aSI6IjBkMjQ3ZjJkLTg0NjgtNDUwYS04NjI3LTAzOGI4ZmRlZjQ2MCIsImNsaWVudF9pZCI6ImphY3BsdXMifQ.GT0ayX01TO0fNY834n5_vXsqmt2P3s2C7hfMH-_FLvsNT-p9uIj5i0U66ZdouDUaL9xu1iy4wdfxLexfvilwnO10fTX5I0U7DHqHQetLUwCJOhET0hN-PyFcJRe7k3C3BUe8f7iuDd6Y4VbLCYTTpp4KSjWcS5fv-BTrvTvktwtkq5oFK2iCtPS6JwqPcFsvt2MYNi9UlGFeik_a-iyuTTa7xf7VgL2XFnGqcu3bOTUNxj4AhG91YL5har3OnFTbZnKFxVWykEz7MJFSXzmhmSS5rNYAbC5FBg65VFmzD0j9G4j1xPODxmLEEeE2Qj5FSe6VTnEZIiFHTLd27IuYyA",User-Agent:"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/75.0.3770.142 Safari/537.36",Origin:"http://abc.com.au",Content-Type:"multipart/form-data; boundary=----WebKitFormBoundaryV5bORQSNHAa3kxFR",Referer:"http://admin.jacplus.com.au/admin/SimplifiedAdoptionBulkUpload",Accept-Encoding:"gzip,deflate,br",Accept-Language:"en-US,en;q=0.9"]**
  14. HttpHeaders headers = request.getHeaders();
  15. List<String> authorizationHeader = headers.get(HttpHeaders.AUTHORIZATION);
  16. String value = authorizationHeader.get(0);
  17. MultiValueMap<String,HttpCookie> cookies = request.getCookies(); /// nulll
  18. }
  19. return chain.filter(exchange.mutate().request(request).build());
  20. };
  21. }

解决方法

Access-Control-Allow-XYZ 标头是 响应 标头,而不是请求标头。从您的 $.ajax 调用中删除它们。您可能需要 Access-Control-Request-XYZ 标头,例如:

  1. xhr.setRequestHeader(''Access-Control-Request-Headers'',"Origin,Cookie,X-Requested-With,Content-Type,Accept,Authorization");
  2. // −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−^^^^^^^

这是一个有效的请求标头。 (不过,CORS spec 中没有列出 Access-Control-Request-Credentials 标头,因此应删除添加 Access-Control-Allow-Credentials 标头的另一行。)

更一般地说,您的响应的 Access-Control-Allow-Headers 值必须允许请求中的任何标头,而您的响应中没有该值。但解决方法是将其从请求中移除,而不是将其添加到 Access-Control-Allow-Headers 值中。

另见:CORS specification

今天关于DEDEcms 出现“Upload filetype not allow”的原因及解决办法uploadtempdir的讲解已经结束,谢谢您的阅读,如果想了解更多关于Access-Control-Allow-Headers 不允许请求标头字段 Access-Control-Allow-Headers、Access-Control-Allow-Headers不允许请求标头字段Access-Control-Allow-Headers、Access-Control-Allow-Origin 标头如何工作? - How does Access-Control-Allow-Origin header work?、AJAX cors 问题:预检响应中的 Access-Control-Allow-Headers 不允许请求标头字段 access-control-allow-credentials的相关知识,请在本站搜索。

本文标签:

上一篇Dedecms v5.7的数据库配置文件在哪里及中文详解(dedecms进入数据库)

下一篇dedecms 问答系统修改成游客可以提问方法