坏蛋网络

 找回密码
 立即注册

微信登录

只需一步,快速开始

手机动态码快速登录

手机号快速注册登录

搜索

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

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

0 P+ k1 J" V3 j* e- |8 R
231121c6zczgo68wflozm2.png
解决方案如下:
\source\class\discuz的discuz_application.php
查找如下代码(在360行左右),并替换
, U% m& ?( T* R; }/ U- @; O

+ R& x, e2 g8 j0 ?2 f
  I5 T) S: p0 E5 Q; sPHP
. t" T# u3 H- {2 b6 Y2 r
  1. private function _xss_check() {
    9 F/ ^2 b7 S7 I% G
  2. static $check = array('"', '>', '<', '\'', '(', ')', 'CONTENT-TRANSFER-ENCODING');
    " o5 l* @( D, z0 }  }" |! _- z
  3. if(isset($_GET['formhash']) && $_GET['formhash'] !== formhash()) {
    4 n* x- n( X! y0 ~# F  O7 J2 k
  4. system_error('request_tainting');
    $ [0 f, _& N. z- [& J+ H
  5. }, \5 b9 v* P6 f3 T4 S6 n6 ^# j+ b
  6. if($_SERVER['REQUEST_METHOD'] == 'GET' ) {" O0 c& V) C1 C4 `
  7. $temp = $_SERVER['REQUEST_URI'];/ ^& R7 h& n+ @6 i
  8. } elseif(empty ($_GET['formhash'])) {" K4 R0 F7 V  Z; |. ~
  9. $temp = $_SERVER['REQUEST_URI'].file_get_contents('php://input');4 H1 W% Q8 ]+ E( q# }
  10. } else {! `9 G1 \$ h* i
  11. $temp = '';
    * ^9 F9 \  [, r2 h! O% t6 R" f1 Y
  12. }
    ) A( _, [. h, n: [; G/ U: u, G
  13. if(!empty($temp)) {: M5 t9 Z# q) @2 p
  14. $temp = strtoupper(urldecode(urldecode($temp)));, ~% `! H6 E4 c1 }
  15. foreach ($check as $str) {
    ' p6 ]" i' G6 }4 ~/ ]
  16. if(strpos($temp, $str) !== false) {
    ( \. b! ]- N9 w1 W" I$ j
  17. system_error('request_tainting');4 p( ^5 a& R3 S) d+ Q1 B( r+ n
  18. }
    + X3 |, z" k$ U0 v3 _. {' S
  19. }4 @4 k6 |. j" G  b! u: C
  20. }
    2 t1 t% ]$ H6 ^( n' v
  21. return true;' o% F1 B' ~! c9 H
  22. }
复制代码
替换为
( V; D$ b; w) r5 p
  1. private function _xss_check() {, a6 I; g' C# P. E( n7 x: A
  2. $temp = strtoupper(urldecode(urldecode($_SERVER['REQUEST_URI'])));
    # F/ z" F/ c+ T, w, m2 W
  3. if(strpos($temp, '<') !== false || strpos($temp, '"') !== false || strpos($temp, 'CONTENT-TRANSFER-ENCODING') !== false) {5 f: |% _" {- w; U! M
  4. system_error('request_tainting');, U& A& ]0 q; q/ N2 ?1 P4 b
  5. }9 n) x- Z, J  p" O2 A1 ]- U: N1 [
  6. return true;, E8 U- J9 k9 U" N4 e$ a7 c
  7. }
复制代码

% r- s. ^: L- \' V
& y6 I* S& T" @7 j) n" x% Z. B8 }8 k) D) M' n6 N4 V% s
# l* E3 U. i7 _. v% L& u! K' U6 `) ?
1 n0 i% H" a/ X  k1 n
微信图片_20230607014029.png
想说又不敢说,说了又怕被拒绝,拒绝了又怕尴尬,就是这样的。内心很痛苦的那种。
快速回复 返回顶部 返回列表