坏蛋网络

 找回密码
 立即注册

微信登录

只需一步,快速开始

手机动态码快速登录

手机号快速注册登录

搜索

[DZ教程] Discuz!您当前的访问请求当中含有非法字符,已经被系统拒绝解决方案

[复制链接]
坏蛋网络官方 发表于 2023-6-7 01:40:56 | 显示全部楼层 |阅读模式
关于Discuz!中“您当前的访问请求当中含有非法字符,已经被系统拒绝”的问题,在添加或更新文章的时候经常出现,经测试发现出现这种情况更多的在使用工具(如火车头采集器)批量发布文章时出现,仔细分析发现,当发布的正文内容出现特殊符号(&,/,<,>等)时出现这样的错误提示。
出现这样的错误主要是因为Discuz!系统的_xss_check()函数原本的意义是为了论坛安全,防止XSS攻击,一般网站使用是不会出现什么问题的,但是有些网站要接入第三方接口,当第三方接口向本站post数据的时候就会报”您当前的访问请求当中含有非法字符,已经被系统拒绝”,本文介绍一种简单的修改方法避免此错误。

  ]7 M! ?. {4 _6 O  y0 ~, s
231121c6zczgo68wflozm2.png
解决方案如下:
\source\class\discuz的discuz_application.php
查找如下代码(在360行左右),并替换

+ i' S0 f* ~: v/ I' B. Z. e1 ]6 |' U. q3 F
$ o7 `, `& v  C) t6 [. ?5 {
PHP' K2 l$ f& c0 N8 k, V( ~
  1. private function _xss_check() {0 ~9 }+ _! C* l7 V# h4 R
  2. static $check = array('"', '>', '<', '\'', '(', ')', 'CONTENT-TRANSFER-ENCODING');, T" r" a! H2 |4 a; g' _9 ]
  3. if(isset($_GET['formhash']) && $_GET['formhash'] !== formhash()) {1 ]. T6 v; R3 E. r
  4. system_error('request_tainting');8 H2 [+ g- J1 g- [: m& w" L' y6 h% ^
  5. }( N( q3 R- J4 c) R, `& o
  6. if($_SERVER['REQUEST_METHOD'] == 'GET' ) {
    1 @* p' g+ h: Q9 s
  7. $temp = $_SERVER['REQUEST_URI'];
    % h5 l& j; v+ q
  8. } elseif(empty ($_GET['formhash'])) {
    ; Y" Q* F3 [3 s4 ?# l
  9. $temp = $_SERVER['REQUEST_URI'].file_get_contents('php://input');
    - U, @, ]. F4 `8 _# l$ G( [3 f
  10. } else {9 d# H3 z8 E) n, @0 E" c' T" Z, f2 w& j! {
  11. $temp = '';
    ' F0 E/ H! `" E$ B* r1 Y+ T. l
  12. }
    0 X! U' E' @; p9 K- A7 q, d* h
  13. if(!empty($temp)) {5 y% Q2 R% @; P& w) _
  14. $temp = strtoupper(urldecode(urldecode($temp)));: y# f; I% v+ {5 S+ e$ Y8 D8 u
  15. foreach ($check as $str) {! w3 R7 ~) R  c$ `0 a6 F* ~
  16. if(strpos($temp, $str) !== false) {
    3 J" {7 @9 b! k) e3 _% }+ `
  17. system_error('request_tainting');7 `, F% n. j' H$ ^$ {( L! z
  18. }
    3 J/ k8 a* F; ~* X
  19. }
    6 T& H  c2 e3 ~. P4 ]/ z+ j/ F& R
  20. }
    . P$ }' k0 O, ]$ \; Y1 v
  21. return true;- _; [  x1 k; h! ]- \, Y8 w+ b
  22. }
复制代码
替换为
2 m" ]) o, O+ i6 P7 f! ]+ b
  1. private function _xss_check() {# R- _9 c2 E" y* H8 J
  2. $temp = strtoupper(urldecode(urldecode($_SERVER['REQUEST_URI'])));
    6 p1 F. P9 ]$ `
  3. if(strpos($temp, '<') !== false || strpos($temp, '"') !== false || strpos($temp, 'CONTENT-TRANSFER-ENCODING') !== false) {
    ! r. w4 n8 V$ {8 }# i
  4. system_error('request_tainting');; G2 X% U+ T: v) y) [, a
  5. }( a$ c' n% T9 R+ i
  6. return true;4 M3 x/ _5 B) x0 W8 x  N1 S) x
  7. }
复制代码
! b2 W3 c$ v8 e' J/ ]

) R5 V0 U  Y8 J5 E, \5 e" |' C1 r: q' y/ [3 t4 ~* P' ?- i: D1 J9 I( n

$ V" W5 c' N2 a# ~4 C
" N) Y6 Z# V' I; b- S
微信图片_20230607014029.png
想说又不敢说,说了又怕被拒绝,拒绝了又怕尴尬,就是这样的。内心很痛苦的那种。
快速回复 返回顶部 返回列表