易陆发现互联网技术论坛

 找回密码
 开始注册
查看: 2|回复: 0
收起左侧

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

[复制链接]
发表于 2024-11-17 15:05:31 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?开始注册

x
Discuz!您当前的访问请求当中含有非法字符,已经被系统拒绝解决方案
2 L4 U4 e9 ]$ j) F5 j6 m( W
PHP Debug) A  u& W4 R$ s

7 g! R) B) w4 F+ gPHP Debug
1 {. b" E. ?! ~$ d& b( o) f1 b/ R8 R5 A2 o* _7 w
[Line: 0022]search.php(discuz_application->init)" T$ E+ D( y  Y0 C
[Line: 0072]source/class/discuz/discuz_application.php(discuz_application->_init_misc)1 l9 d* [: l' A4 N
[Line: 0596]source/class/discuz/discuz_application.php(discuz_application->_xss_check)
8 b+ _1 z$ E; Y) k[Line: 0372]source/class/discuz/discuz_application.php(system_error)
7 {* J$ \/ h5 z4 z9 q[Line: 0023]source/function/function_core.php(discuz_error::system_error)
8 r( J. E' a- k7 E[Line: 0024]source/class/discuz/discuz_error.php(discuz_error::debug_backtrace)
! J  @& D0 B4 g+ g/ r5 e6 f, ]/ Q

7 S7 `8 e6 b: G; W关于Discuz!中“您当前的访问请求当中含有非法字符,已经被系统拒绝”的问题,在添加或更新文章的时候经常出现,经测试发现出现这种情况更多的在使用工具(如火车头采集器)批量发布文章时出现,仔细分析发现,当发布的正文内容出现特殊符号(&,/,<,>等)时出现这样的错误提示。  Z5 q4 f/ {7 o5 s9 \# X0 ^
) q) D0 d* i$ K9 r, r! K: p0 ?
出现这样的错误主要是因为Discuz!系统的_xss_check()函数原本的意义是为了论坛安全,防止XSS攻击,一般网站使用是不会出现什么问题的,但是有些网站要接入第三方接口,当第三方接口向本站post数据的时候就会报”您当前的访问请求当中含有非法字符,已经被系统拒绝”,本文介绍一种简单的修改方法避免此错误。
1 a* T* h# U9 h/ N) D0 Z4 C. V8 N
+ j+ {* `2 \. L: R解决方案如下:  I; v* B. }* K: `! R" x0 J

7 w2 X. \  x7 |$ P4 P9 ^\source\class\discuz的discuz_application.php
* n# D, j$ r0 F5 x  ]! X6 M, L  \2 T) [8 R$ D
查找如下代码(在360行左右),并替换1 v* B+ ?/ t3 M& o: c" s

* q: i5 q; J$ l: y1 U& s
' m  Q  I3 ?/ O8 U  p : {; v) N1 {; s4 E# s4 ?! H' w' d
+ x  W9 ^7 f; S0 J& n5 s
PHP代码:3 Y$ A4 V4 ^) t& P5 [) E
( W" p& U, ~7 {
5 Y  n9 Q5 a' |: ]/ w2 @
private function _xss_check() {
5 M' W& Q0 d: v  ~* x- Wstatic $check = array('"', '>', '<', '\'', '(', ')', 'CONTENT-TRANSFER-ENCODING');
& g% w2 T6 B  w& kif(isset($_GET['formhash']) && $_GET['formhash'] !== formhash()) {5 R+ H2 t# Q, t- X2 g# N+ R
system_error('request_tainting');8 N6 p/ _- X' C3 E, f0 c
}
8 t5 l* l7 Z* `if($_SERVER['REQUEST_METHOD'] == 'GET' ) {
. U6 \1 P$ Z( \9 N+ |% D: X$temp = $_SERVER['REQUEST_URI'];6 \! \' z9 I. P; [8 s( R! i9 n
} elseif(empty ($_GET['formhash'])) {6 d% m4 m  d0 o3 [6 m2 ?
$temp = $_SERVER['REQUEST_URI'].file_get_contents('php://input');, H: i  {$ w' X+ M- Q
} else {
1 [" L* n. m+ B& P  E3 R$temp = '';
" C. \! b. H) k/ a5 J6 }}
% I. _- {' F; a8 I6 Gif(!empty($temp)) {) q1 @  }" t9 |* q" L  P/ B
$temp = strtoupper(urldecode(urldecode($temp)));
; V% u3 _" y2 H( l" j( }/ `, |foreach ($check as $str) {
' U( z9 L! q" L( ?2 w7 Vif(strpos($temp, $str) !== false) {
3 ]3 H0 X/ v& b8 I7 E8 X" Jsystem_error('request_tainting');9 B. D" Y1 R5 j% p8 ]
}' v7 a  ?3 Y1 c# u; e
}8 N1 u% z+ t  L7 D# |
}' k/ |# A- Q+ ?) J
return true;
% j% I  \. \2 o3 i6 ^}9 Z) V: ]9 @1 c

% l1 x+ \2 |: Y: a. H6 F; A1 S
4 D; c/ F3 [- h' D  m8 L' |替换为:5 N/ y- t+ x( \2 `

) Z- b6 t; B/ e* HPHP代码:$ Q) ?' Q& \/ Z0 @8 L# |' r) f
8 W/ L2 A. c1 L1 T, g- V" r2 }
8 U! C8 ~5 Q# [4 v
private function _xss_check() {
* b' W: d) H) P. c, E8 b$temp = strtoupper(urldecode(urldecode($_SERVER['REQUEST_URI'])));' M' ~) O+ H+ M5 @! `6 `2 S. f8 H
if(strpos($temp, '<') !== false || strpos($temp, '"') !== false || strpos($temp, 'CONTENT-TRANSFER-ENCODING') !== false) {
* X, B) e* I3 n/ Msystem_error('request_tainting');/ q* r& I% G9 G8 i/ \6 J- y
}
% Z- W0 O+ m& G) `return true;- y( V3 }, L9 \! z5 ]- @
}* `: [8 Z$ h2 ^' S+ D3 g: u- e

1 p# W5 v  b. R# T5 ^/ H
' W" g6 R, V6 }2 a
您需要登录后才可以回帖 登录 | 开始注册

本版积分规则

关闭

站长推荐上一条 /4 下一条

北京云银创陇科技有限公司以云计算运维,代码开发

QQ|返回首页|Archiver|小黑屋|易陆发现技术论坛 点击这里给我发消息

GMT+8, 2026-3-9 00:33 , Processed in 0.044921 second(s), 21 queries .

Powered by Discuz! X3.4 Licensed

© 2012-2025 Discuz! Team.

快速回复 返回顶部 返回列表