关于Discuz!中“您当前的访问请求当中含有非法字符,已经被系统拒绝”的问题,在添加或更新文章的时候经常出现,经测试发现出现这种情况更多的在使用工具(如火车头采集器)批量发布文章时出现,仔细分析发现,当发布的正文内容出现特殊符号(&,/,<,>等)时出现这样的错误提示。 出现这样的错误主要是因为Discuz!系统的_xss_check()函数原本的意义是为了论坛安全,防止XSS攻击,一般网站使用是不会出现什么问题的,但是有些网站要接入第三方接口,当第三方接口向本站post数据的时候就会报”您当前的访问请求当中含有非法字符,已经被系统拒绝”,本文介绍一种简单的修改方法避免此错误。 / o2 I9 e* c7 x0 J
解决方案如下: \source\class\discuz的discuz_application.php 查找如下代码(在360行左右),并替换 * e7 V! z* I2 }" ~* z
2 b* _* P1 z0 J7 P4 h; Q1 {! [
3 H; l" h$ i( H! L: ^0 e
PHP- o4 N/ w* H# G. f1 G3 S" Y
- private function _xss_check() {( K' S. f* [3 _- x! Y
- static $check = array('"', '>', '<', '\'', '(', ')', 'CONTENT-TRANSFER-ENCODING');
- `- F' G* K* X - if(isset($_GET['formhash']) && $_GET['formhash'] !== formhash()) {
- V; G; r9 t' e4 L4 V; J/ c - system_error('request_tainting');: O+ c) x2 @2 F3 L* o& P1 o
- }0 V9 E: k5 r5 P3 C$ L& `
- if($_SERVER['REQUEST_METHOD'] == 'GET' ) {
1 a5 A( _1 {+ d - $temp = $_SERVER['REQUEST_URI'];, y9 H. u, X7 I0 {: N4 v+ Q+ Z. b8 ~
- } elseif(empty ($_GET['formhash'])) {
- c; M. N2 R0 ~0 B& Y! }0 Y - $temp = $_SERVER['REQUEST_URI'].file_get_contents('php://input');
/ T" q6 e4 Y9 r' W& o- p5 f+ R0 ~! c - } else {
) S; _7 v/ M, z - $temp = '';+ S6 ^9 p1 a! x& e" R4 F
- }1 k- I3 ], s' [, P0 B2 W
- if(!empty($temp)) {* D6 z3 D# G% e2 h# x# [, H, {1 `
- $temp = strtoupper(urldecode(urldecode($temp)));
/ g6 L# R9 w/ `6 h# K - foreach ($check as $str) {5 t. l) {4 j; C$ o$ f$ P7 X" x
- if(strpos($temp, $str) !== false) {) r7 v$ B7 a; x/ L+ v- G+ h {
- system_error('request_tainting');' t; t* Y; U2 ~: n- d2 q" q
- }" ~ j: _" v$ u3 j7 C
- }/ @8 L) p. W; t5 u/ N3 O. @" {5 o+ Z
- }
6 g4 A- T" I9 Z) S8 U) K - return true;
4 q% w" e4 ~4 W - }
复制代码 替换为# z1 S# y# b3 N( H+ X1 R, S& ~
- private function _xss_check() {
0 X. m* M' i! X3 w: z8 f - $temp = strtoupper(urldecode(urldecode($_SERVER['REQUEST_URI'])));6 e% G K% {! m2 o2 o
- if(strpos($temp, '<') !== false || strpos($temp, '"') !== false || strpos($temp, 'CONTENT-TRANSFER-ENCODING') !== false) {! y6 N2 n4 G1 ~5 U; ~' {7 g
- system_error('request_tainting');
, K4 B L- z- B& o! t - }, Q0 i2 e6 v; X' I
- return true;; Y5 b+ R5 W6 B
- }
复制代码 1 ]6 l0 Y6 b5 A# n
' J+ f* }' h$ H, \! \: ^1 }- ^
" l) b' k3 [4 J5 U* Z
' E/ u, R ?' T3 }% ~8 Y% e# C
" o( n j; W1 n
|