坏蛋网络

 找回密码
 立即注册

微信登录

只需一步,快速开始

手机动态码快速登录

手机号快速注册登录

搜索

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

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

1 `+ t$ B% g9 ~  j( a) ]3 V) I3 p3 {7 r1 N, J) h$ c8 y

$ o$ M, |6 Y, ^' f1 \PHP
: P; d+ @, T3 I* e0 n4 h2 W+ W
  1. private function _xss_check() {
    * p; H7 P. j5 x8 }/ t
  2. static $check = array('"', '>', '<', '\'', '(', ')', 'CONTENT-TRANSFER-ENCODING');* Q, B, @; @: D# s" R4 s
  3. if(isset($_GET['formhash']) && $_GET['formhash'] !== formhash()) {
    / e. u+ A, X1 n* c
  4. system_error('request_tainting');, m( n8 x2 u0 R3 r
  5. }
    * I1 v  E& f. C/ E0 x
  6. if($_SERVER['REQUEST_METHOD'] == 'GET' ) {
    & A; K: `3 I$ U/ a4 X) S$ v
  7. $temp = $_SERVER['REQUEST_URI'];$ r" Z& ], x  d* ]7 y# H
  8. } elseif(empty ($_GET['formhash'])) {+ R% g3 F9 }* S
  9. $temp = $_SERVER['REQUEST_URI'].file_get_contents('php://input');
    6 _- }1 Q3 h; J# H
  10. } else {
    5 _+ E/ ]2 O( u4 i% ^& d
  11. $temp = '';
    3 ?7 Z: [2 \2 @# N8 _- e  O
  12. }
    3 ~2 G( p2 F  c; g; Y1 v% a
  13. if(!empty($temp)) {' O! p3 g; B/ R( f
  14. $temp = strtoupper(urldecode(urldecode($temp)));
    ( h7 _" P2 T/ A7 n3 a8 n7 K! ~
  15. foreach ($check as $str) {
    4 N) i1 I8 `7 Z8 g" k+ U/ @5 ?: _
  16. if(strpos($temp, $str) !== false) {' H1 d8 C. c: ?, I  x
  17. system_error('request_tainting');2 M# u  }  z" ~9 g& }4 S
  18. }
    * S3 Z5 `8 i& A) v% m
  19. }/ P/ U# g* n$ ?5 P2 Q( J
  20. }0 j# k8 i- l6 F( e0 _4 M
  21. return true;
    " d; M6 ]* V" L8 s. H3 `+ A
  22. }
复制代码
替换为
1 T6 b5 d, |  s+ D5 S. B, M! q3 Z
  1. private function _xss_check() {
    6 E' R' O: o3 g( \; i/ X
  2. $temp = strtoupper(urldecode(urldecode($_SERVER['REQUEST_URI'])));. Q0 r9 `/ {! ^& R& W) d
  3. if(strpos($temp, '<') !== false || strpos($temp, '"') !== false || strpos($temp, 'CONTENT-TRANSFER-ENCODING') !== false) {% S, `5 Y1 r5 X5 ?- y- {
  4. system_error('request_tainting');2 C; o( [9 L4 n! o9 H/ z
  5. }
    . k( S6 f, y* l% ]/ A) E" G7 y0 y
  6. return true;
    2 `2 l5 d9 y0 F, A5 _1 u6 X
  7. }
复制代码
: D# ?3 A$ i2 y  r/ [" S5 x- b5 u
  P8 v, c4 b, f* E6 j* G5 }

. W# d1 _; ~$ a- h' U: V
/ }: j% D0 X! I  t6 a; Y
+ A  p9 R  V1 m3 Y+ C1 i
微信图片_20230607014029.png
想说又不敢说,说了又怕被拒绝,拒绝了又怕尴尬,就是这样的。内心很痛苦的那种。
快速回复 返回顶部 返回列表