关于Discuz!中“您当前的访问请求当中含有非法字符,已经被系统拒绝”的问题,在添加或更新文章的时候经常出现,经测试发现出现这种情况更多的在使用工具(如火车头采集器)批量发布文章时出现,仔细分析发现,当发布的正文内容出现特殊符号(&,/,<,>等)时出现这样的错误提示。 出现这样的错误主要是因为Discuz!系统的_xss_check()函数原本的意义是为了论坛安全,防止XSS攻击,一般网站使用是不会出现什么问题的,但是有些网站要接入第三方接口,当第三方接口向本站post数据的时候就会报”您当前的访问请求当中含有非法字符,已经被系统拒绝”,本文介绍一种简单的修改方法避免此错误。
]7 M! ?. {4 _6 O y0 ~, s解决方案如下: \source\class\discuz的discuz_application.php 查找如下代码(在360行左右),并替换
+ i' S0 f* ~: v/ I' B. Z. e1 ]6 |' U. q3 F
$ o7 `, `& v C) t6 [. ?5 {
PHP' K2 l$ f& c0 N8 k, V( ~
- private function _xss_check() {0 ~9 }+ _! C* l7 V# h4 R
- static $check = array('"', '>', '<', '\'', '(', ')', 'CONTENT-TRANSFER-ENCODING');, T" r" a! H2 |4 a; g' _9 ]
- if(isset($_GET['formhash']) && $_GET['formhash'] !== formhash()) {1 ]. T6 v; R3 E. r
- system_error('request_tainting');8 H2 [+ g- J1 g- [: m& w" L' y6 h% ^
- }( N( q3 R- J4 c) R, `& o
- if($_SERVER['REQUEST_METHOD'] == 'GET' ) {
1 @* p' g+ h: Q9 s - $temp = $_SERVER['REQUEST_URI'];
% h5 l& j; v+ q - } elseif(empty ($_GET['formhash'])) {
; Y" Q* F3 [3 s4 ?# l - $temp = $_SERVER['REQUEST_URI'].file_get_contents('php://input');
- U, @, ]. F4 `8 _# l$ G( [3 f - } else {9 d# H3 z8 E) n, @0 E" c' T" Z, f2 w& j! {
- $temp = '';
' F0 E/ H! `" E$ B* r1 Y+ T. l - }
0 X! U' E' @; p9 K- A7 q, d* h - if(!empty($temp)) {5 y% Q2 R% @; P& w) _
- $temp = strtoupper(urldecode(urldecode($temp)));: y# f; I% v+ {5 S+ e$ Y8 D8 u
- foreach ($check as $str) {! w3 R7 ~) R c$ `0 a6 F* ~
- if(strpos($temp, $str) !== false) {
3 J" {7 @9 b! k) e3 _% }+ ` - system_error('request_tainting');7 `, F% n. j' H$ ^$ {( L! z
- }
3 J/ k8 a* F; ~* X - }
6 T& H c2 e3 ~. P4 ]/ z+ j/ F& R - }
. P$ }' k0 O, ]$ \; Y1 v - return true;- _; [ x1 k; h! ]- \, Y8 w+ b
- }
复制代码 替换为
2 m" ]) o, O+ i6 P7 f! ]+ b- private function _xss_check() {# R- _9 c2 E" y* H8 J
- $temp = strtoupper(urldecode(urldecode($_SERVER['REQUEST_URI'])));
6 p1 F. P9 ]$ ` - if(strpos($temp, '<') !== false || strpos($temp, '"') !== false || strpos($temp, 'CONTENT-TRANSFER-ENCODING') !== false) {
! r. w4 n8 V$ {8 }# i - system_error('request_tainting');; G2 X% U+ T: v) y) [, a
- }( a$ c' n% T9 R+ i
- return true;4 M3 x/ _5 B) x0 W8 x N1 S) x
- }
复制代码 ! b2 W3 c$ v8 e' J/ ]
) R5 V0 U Y8 J5 E, \5 e" |' C1 r: q' y/ [3 t4 ~* P' ?- i: D1 J9 I( n
$ V" W5 c' N2 a# ~4 C
" N) Y6 Z# V' I; b- S
|
|