找回密码
 注册
查看: 17|回复: 0

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

[复制链接]

0

主题

0

回帖

9

积分

管理员

积分
9
QQ
发表于 2024-11-17 15:05:31 | 显示全部楼层 |阅读模式
Discuz!您当前的访问请求当中含有非法字符,已经被系统拒绝解决方案
. W! a1 Y$ p. l2 P8 m7 Y
PHP Debug1 q( V; D, w5 T1 r/ o' e
3 H( N+ Q, |- b
PHP Debug3 K& w. [+ w7 W
5 P$ C/ V: y, e* z) H* [5 ?2 r
[Line: 0022]search.php(discuz_application->init)3 ]8 H" z$ g* U1 G/ \0 j
[Line: 0072]source/class/discuz/discuz_application.php(discuz_application->_init_misc)
; p; n0 |3 X  h[Line: 0596]source/class/discuz/discuz_application.php(discuz_application->_xss_check), \4 B4 ~' h8 P: h6 B- W% c
[Line: 0372]source/class/discuz/discuz_application.php(system_error)& p" g, B0 U" c) d# @$ e
[Line: 0023]source/function/function_core.php(discuz_error::system_error)
* m8 G7 n- ^0 D  _[Line: 0024]source/class/discuz/discuz_error.php(discuz_error::debug_backtrace)
. L% M+ I) I" c1 o& \
- Y, T) e+ T. g* Z
关于Discuz!中“您当前的访问请求当中含有非法字符,已经被系统拒绝”的问题,在添加或更新文章的时候经常出现,经测试发现出现这种情况更多的在使用工具(如火车头采集器)批量发布文章时出现,仔细分析发现,当发布的正文内容出现特殊符号(&,/,<,>等)时出现这样的错误提示。7 `* f( g/ O, K: r7 H; i
0 u- {' {) i! g3 i' B& A# I, q) g1 y
出现这样的错误主要是因为Discuz!系统的_xss_check()函数原本的意义是为了论坛安全,防止XSS攻击,一般网站使用是不会出现什么问题的,但是有些网站要接入第三方接口,当第三方接口向本站post数据的时候就会报”您当前的访问请求当中含有非法字符,已经被系统拒绝”,本文介绍一种简单的修改方法避免此错误。
  ?( \% v, u% u; a
3 i; F' C- n2 x* r解决方案如下:/ `( a# F4 V) m; O9 H
* l1 j3 o! X# _# S
\source\class\discuz的discuz_application.php
4 v. M% X3 l' e0 C5 q7 b3 j' N7 U/ g+ V* R  g
查找如下代码(在360行左右),并替换
4 j$ u* g# V" j3 A4 m
, i! n- ]8 _9 J% h9 `
. l: H: y# s  g' Q " P- A1 K% w- o5 J- A

* I1 c: \! F) P4 u3 |" lPHP代码:' m2 g% r1 {; i# |

& y) {$ z/ R0 g' N7 ?0 S8 ]
; o1 ]% a9 e$ w; Sprivate function _xss_check() {
+ B5 T9 J% |, Y& j! d& Pstatic $check = array('"', '>', '<', '\'', '(', ')', 'CONTENT-TRANSFER-ENCODING');
$ s5 i3 N( w' O6 q' A5 Q- oif(isset($_GET['formhash']) && $_GET['formhash'] !== formhash()) {. ], V6 D  f7 I+ Z: x' x  E
system_error('request_tainting');
% S1 }3 {" ~' l6 K" k}
! _! F- s$ H6 J* J0 pif($_SERVER['REQUEST_METHOD'] == 'GET' ) {
  @/ y6 {0 t8 I+ Q  T+ C$temp = $_SERVER['REQUEST_URI'];
) l7 J$ C: r' r2 X1 m} elseif(empty ($_GET['formhash'])) {9 h2 s; f, a. x$ v3 ~5 `5 I
$temp = $_SERVER['REQUEST_URI'].file_get_contents('php://input');
& k9 x9 v+ P4 R' O) p/ k} else {3 x- m& k& j! _" U9 e' c
$temp = '';
; r2 h' G! _7 Y( k$ T+ [2 y}, V1 B9 E' T% s0 A  r( T" z; y
if(!empty($temp)) {
0 e/ {* n! d" v& ~* M4 r; k0 U/ ]$temp = strtoupper(urldecode(urldecode($temp)));
/ G% o/ [8 w5 I3 E$ p, ]6 Xforeach ($check as $str) {
$ T! B( D4 I# m" e- |if(strpos($temp, $str) !== false) {' v) @4 a5 {3 ]$ ]' {8 k( N
system_error('request_tainting');
1 b, D/ ]6 J) L- k( N}
2 d- D6 m% A. g( k4 g}& _, s1 E$ N7 a: V8 ]1 W9 R
}9 ~+ s7 s8 m! u' I  d' R/ X3 u
return true;* x9 Q! [0 O4 R, }
}+ |' b# a. X* m5 [: D4 ^
; ~6 n( ]" r  p: O
- j; x8 Z+ l  C- A. F3 g  z
替换为:
2 n' e& W/ c( y! P7 ^+ z
9 |, P6 M: z+ H0 j* t( G& t+ `PHP代码:6 f' k; u8 E% `& _+ r% w: S

' Q3 C4 ?. N3 U6 U+ ?4 [# @7 D4 Z2 k$ m# I, ?1 q; b8 E: q
private function _xss_check() {& K7 R6 _4 h, i, C- Q
$temp = strtoupper(urldecode(urldecode($_SERVER['REQUEST_URI'])));' x+ t. M; s4 ^; l
if(strpos($temp, '<') !== false || strpos($temp, '"') !== false || strpos($temp, 'CONTENT-TRANSFER-ENCODING') !== false) {7 p# f& I- @5 X# P: m  X4 E
system_error('request_tainting');
7 F" t, Y' K5 K& T: ~}3 S" v, @4 x3 ]0 J( l; W
return true;
( V' k3 X3 c* R% a}- n  s6 |" G3 Z9 M; F% e

; a+ {/ a2 ?$ G1 I5 J
) d) h% o' z8 s! f& N- F. c3 \
您需要登录后才可以回帖 登录 | 注册

本版积分规则

返回首页|Archiver|手机版|小黑屋|易陆发现技术论坛 ( 蜀ICP备2026014127号-1 )

GMT+8, 2026-6-11 22:56 , Processed in 0.025841 second(s), 22 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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