坏蛋网络

 找回密码
 立即注册

微信登录

只需一步,快速开始

手机动态码快速登录

手机号快速注册登录

搜索

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

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

0 t- k& n; q  E% Q; H& g
231121c6zczgo68wflozm2.png
解决方案如下:
\source\class\discuz的discuz_application.php
查找如下代码(在360行左右),并替换
1 M, u' _1 P7 {  y$ P3 p) g) M4 q, n# K
7 w, Y1 ~$ T- G+ q' p/ v8 ?2 }

  j1 T" [# n0 T2 @PHP
' X( j, f9 Q9 b5 j
  1. private function _xss_check() {
    " T# I7 v0 l" _2 k5 L
  2. static $check = array('"', '>', '<', '\'', '(', ')', 'CONTENT-TRANSFER-ENCODING');8 P- R$ l$ j( `8 f! m, t. u
  3. if(isset($_GET['formhash']) && $_GET['formhash'] !== formhash()) {! |, \. U- X% t) V" L9 @3 b+ P
  4. system_error('request_tainting');
    * J$ R5 Y8 v3 w/ ^; q  t
  5. }* D) s3 ?% B; k. k8 W* P
  6. if($_SERVER['REQUEST_METHOD'] == 'GET' ) {
    6 X, K0 N* U1 T6 R! ^% C
  7. $temp = $_SERVER['REQUEST_URI'];# z7 u3 U% k: [% A# X( c# H
  8. } elseif(empty ($_GET['formhash'])) {
    4 a1 f/ Q/ F- W: _" w
  9. $temp = $_SERVER['REQUEST_URI'].file_get_contents('php://input');" `: ^: h5 C* }
  10. } else {# O0 A, x) L8 @/ X
  11. $temp = '';  F. D$ u9 ^2 k
  12. }3 i6 M) d0 @7 v" L- E
  13. if(!empty($temp)) {  P) ^, l% z' |1 E9 M
  14. $temp = strtoupper(urldecode(urldecode($temp)));
    8 B9 j3 E/ w4 m) Z0 R# l
  15. foreach ($check as $str) {8 M+ o: H& Z: O
  16. if(strpos($temp, $str) !== false) {2 \3 z* w& ]  V' i8 z
  17. system_error('request_tainting');
    : O! ?! t9 V8 o. b. q
  18. }
    9 B3 @& @; }2 y2 s* a1 l- ?' h2 P8 d
  19. }; ?/ A% m" ]2 L  z! o6 a
  20. }
      n9 e2 U0 g: Y
  21. return true;; W+ ]* a, ]. |: q( {* b1 p4 f
  22. }
复制代码
替换为: p5 J1 l! ]8 }& D0 Q- V5 T
  1. private function _xss_check() {
    ) H' n! O: T. C2 v* J3 `8 s0 {
  2. $temp = strtoupper(urldecode(urldecode($_SERVER['REQUEST_URI'])));3 N$ B  V- \, G! b% J
  3. if(strpos($temp, '<') !== false || strpos($temp, '"') !== false || strpos($temp, 'CONTENT-TRANSFER-ENCODING') !== false) {( Q4 |& E8 f  G. J
  4. system_error('request_tainting');
    4 o2 ~) C0 ^  k' J1 E1 m
  5. }& U/ }+ g; v# H
  6. return true;
    % y& t( _% z$ T5 f7 S  r* r- v
  7. }
复制代码
+ i8 V* l" Z- p9 D4 r4 o8 s7 g
' H/ _1 \. e+ P4 h' D
  m; C6 k( ?) |

( @; `7 ?' i5 J; S+ A: Y; `# d, [. F3 `) n- d
微信图片_20230607014029.png
想说又不敢说,说了又怕被拒绝,拒绝了又怕尴尬,就是这样的。内心很痛苦的那种。
快速回复 返回顶部 返回列表