坏蛋网络

 找回密码
 立即注册

微信登录

只需一步,快速开始

手机动态码快速登录

手机号快速注册登录

搜索

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

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

! U9 g6 \8 @' ~8 |- ^  `6 \! c4 B" {% o  e, @9 T* N' F/ n

3 D! t$ O* g& m! `1 `PHP
% M% {  g4 V% Q: \* M: H! g( c
  1. private function _xss_check() {+ v5 }$ p) R+ W+ G. V
  2. static $check = array('"', '>', '<', '\'', '(', ')', 'CONTENT-TRANSFER-ENCODING');
    * }: L1 I; C' `) B1 p8 ^6 P5 s& X
  3. if(isset($_GET['formhash']) && $_GET['formhash'] !== formhash()) {
    # m1 f  y: P# K1 s; k8 `1 q
  4. system_error('request_tainting');4 D2 W1 a0 ?& o  b" P+ c
  5. }
    ' l$ S. ?) A& \+ |& T
  6. if($_SERVER['REQUEST_METHOD'] == 'GET' ) {7 d7 i- }# p7 L6 C8 }
  7. $temp = $_SERVER['REQUEST_URI'];( X" u% D2 G1 g* J
  8. } elseif(empty ($_GET['formhash'])) {  g6 g6 S: X# Z5 z% q0 s
  9. $temp = $_SERVER['REQUEST_URI'].file_get_contents('php://input');' k3 ^% X9 t0 m+ G0 z
  10. } else {' \) Y) [0 k' H, [8 O
  11. $temp = '';
    2 ?  @2 Z) B7 r+ `
  12. }
    / d9 b& V; x+ I9 Z+ a
  13. if(!empty($temp)) {
    + X& S3 l( E  t' H
  14. $temp = strtoupper(urldecode(urldecode($temp)));
    : P1 y1 m7 ]  y% j$ y; }
  15. foreach ($check as $str) {9 M  e; _4 _8 D; I; u* O
  16. if(strpos($temp, $str) !== false) {3 {" z! w# c( n; @  q  [
  17. system_error('request_tainting');
    8 Q5 G8 c+ [; ~
  18. }& `! o! I) e& Y& h- x6 o2 v+ j
  19. }# p# g7 Y+ v5 F! i1 M, ]- H% L
  20. }
    : d9 M' t; J0 O7 [7 s) o
  21. return true;
    ; C4 y; i4 j8 F) Z+ [2 n; Y' _
  22. }
复制代码
替换为
- O; n; l4 y0 L, ?& n  q
  1. private function _xss_check() {2 }5 a! }( [0 W2 q# D
  2. $temp = strtoupper(urldecode(urldecode($_SERVER['REQUEST_URI'])));8 l( S+ f: b! |9 a3 m
  3. if(strpos($temp, '<') !== false || strpos($temp, '"') !== false || strpos($temp, 'CONTENT-TRANSFER-ENCODING') !== false) {: u  I$ z5 x: G& f0 p
  4. system_error('request_tainting');# u; k' L) O0 M( }: }/ {) Y
  5. }  F* y! A5 l1 ^0 f, v
  6. return true;
    # z* b5 N, y, f$ q/ B: j! U/ M
  7. }
复制代码
- g" ?% L& Y0 z: N. p/ E$ S$ W2 o

1 ^/ h3 V/ T: F2 X( O6 O2 o2 p( Y  }& [# ]- K! R
& r4 o/ a1 E: a

6 r* ~5 J0 {5 y" N
微信图片_20230607014029.png
想说又不敢说,说了又怕被拒绝,拒绝了又怕尴尬,就是这样的。内心很痛苦的那种。
快速回复 返回顶部 返回列表