易陆发现互联网技术论坛

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

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

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

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

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

x
Discuz!您当前的访问请求当中含有非法字符,已经被系统拒绝解决方案1 E/ d4 J( V; a7 c/ W2 @, |
PHP Debug; ]2 Q2 F1 `% O$ F

3 r4 Y6 i2 ~. K" y1 B$ Z9 }4 zPHP Debug( u0 P6 q" |  s: [: J

/ m3 ~& G: o3 I# E4 f) J( z[Line: 0022]search.php(discuz_application->init)
# m& s$ q3 \) \5 q; d[Line: 0072]source/class/discuz/discuz_application.php(discuz_application->_init_misc)+ f. U" f/ b( ^. c+ X1 r; U
[Line: 0596]source/class/discuz/discuz_application.php(discuz_application->_xss_check)
' d/ C7 N7 V9 A& e- x- z6 B: G[Line: 0372]source/class/discuz/discuz_application.php(system_error)
2 A  E% U- Y4 n, {9 y! J7 M( K[Line: 0023]source/function/function_core.php(discuz_error::system_error)
  ?% Q" q- s& c; W( b[Line: 0024]source/class/discuz/discuz_error.php(discuz_error::debug_backtrace)

$ z1 S8 V6 I" P# U0 ~+ t; q9 e( Q. L7 c# s, d& N) E
关于Discuz!中“您当前的访问请求当中含有非法字符,已经被系统拒绝”的问题,在添加或更新文章的时候经常出现,经测试发现出现这种情况更多的在使用工具(如火车头采集器)批量发布文章时出现,仔细分析发现,当发布的正文内容出现特殊符号(&,/,<,>等)时出现这样的错误提示。$ Q  E; F7 t! d; o: E7 J6 }/ Y

8 A7 y& F& K0 g$ G2 Q6 b9 |出现这样的错误主要是因为Discuz!系统的_xss_check()函数原本的意义是为了论坛安全,防止XSS攻击,一般网站使用是不会出现什么问题的,但是有些网站要接入第三方接口,当第三方接口向本站post数据的时候就会报”您当前的访问请求当中含有非法字符,已经被系统拒绝”,本文介绍一种简单的修改方法避免此错误。
8 ~- V" a- @: T# ~
# E! ~8 H$ ^1 F/ B解决方案如下:& R* E7 S. D( `, {: T

; F9 {4 S" s/ O) {\source\class\discuz的discuz_application.php
% @" m' ^5 O. l' ]$ M3 U, h; ~/ @. _2 _$ q! m1 r7 ~/ }. ^- W
查找如下代码(在360行左右),并替换$ t+ Z( w! M. A. |
0 _, K% M4 K6 X" l6 p  s

$ D2 W+ d% G$ y
- Z/ X8 a4 L8 `! ]5 | 4 c) ]7 O$ U$ B  r3 Y# S+ N# N
PHP代码:, [% t1 c; F3 k* R1 f$ ^
! z# Z& R, w* o3 l
: s6 k0 N3 l3 L0 i6 G& }
private function _xss_check() {
2 R# V7 {3 D' Z5 }7 g9 N- H  sstatic $check = array('"', '>', '<', '\'', '(', ')', 'CONTENT-TRANSFER-ENCODING');
# y5 }7 m* [3 z3 kif(isset($_GET['formhash']) && $_GET['formhash'] !== formhash()) {
& \1 H3 ]) x" ysystem_error('request_tainting');2 H* Z5 t& r8 M# f% r! [& f
}" P( c) ]3 H2 \# h+ M  C( ?
if($_SERVER['REQUEST_METHOD'] == 'GET' ) {/ h; W/ d# K: L4 o" e) s8 U
$temp = $_SERVER['REQUEST_URI'];
* c$ e( }$ H8 m8 q} elseif(empty ($_GET['formhash'])) {' e" r) U3 n6 q, {' U* t9 E8 T$ V
$temp = $_SERVER['REQUEST_URI'].file_get_contents('php://input');& ]% J: W. _9 `0 r/ R* \, _
} else {
; c( c: Y9 S' T: c( l  ?8 H$ _$temp = '';
! V4 {7 S' N. E, p; A}
7 X  N8 F, `0 W8 u+ ^5 ^2 Mif(!empty($temp)) {5 `8 O; w8 u, L3 C$ x) n! B( K
$temp = strtoupper(urldecode(urldecode($temp)));0 F' C( H+ j0 R2 R4 v0 a
foreach ($check as $str) {
3 v% A' _; v5 S4 G* R! B  nif(strpos($temp, $str) !== false) {
' ^9 r" L/ a$ n* P7 U% osystem_error('request_tainting');
, g$ R# G) R  U/ q}2 ?, N% m8 f: U# k9 X$ O0 Y9 L+ O1 \
}( [$ e, g# p# R
}# S8 Z: c8 c; H& \5 ^% \
return true;0 w& {% a: O) r) Z* h1 S! I
}
: Q  i% C3 h  O; h' {; [6 M. S5 }  L; _2 d* n6 K

6 z& h% x: R! o  X- e$ O5 f4 R5 H5 b7 J替换为:
% y1 V0 U- K7 a% C% F4 A7 G9 @7 j' D9 S
PHP代码:
# c* ?8 J+ X; N! H: w+ p ; [0 F+ V5 X% Z% G$ \7 }% ~

0 f+ z7 n" @0 s1 ]! E: ?private function _xss_check() {0 P0 Q/ ?9 t  D1 r1 c& m
$temp = strtoupper(urldecode(urldecode($_SERVER['REQUEST_URI'])));2 E+ c. W, O! T9 E$ N
if(strpos($temp, '<') !== false || strpos($temp, '"') !== false || strpos($temp, 'CONTENT-TRANSFER-ENCODING') !== false) {$ ]9 U& U. t! S3 J  [) I
system_error('request_tainting');
* H- `+ J0 {+ |% G- P8 {}. O8 i6 Y' j' `( M6 ?
return true;
% n4 d8 L- u; q}
/ E2 o0 }% n# N! R% @' g
% {% N% H2 Z( V0 d/ t! t
% t9 C0 |. }+ h# U( ?
您需要登录后才可以回帖 登录 | 开始注册

本版积分规则

关闭

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

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

QQ|返回首页|Archiver|小黑屋|易陆发现技术论坛 ( 蜀ICP备2026014127号-1 )点击这里给我发消息

GMT+8, 2026-4-8 21:19 , Processed in 0.055013 second(s), 22 queries .

Powered by Discuz! X3.4 Licensed

© 2012-2025 Discuz! Team.

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