关于Discuz!中“您当前的访问请求当中含有非法字符,已经被系统拒绝”的问题,在添加或更新文章的时候经常出现,经测试发现出现这种情况更多的在使用工具(如火车头采集器)批量发布文章时出现,仔细分析发现,当发布的正文内容出现特殊符号(&,/,<,>等)时出现这样的错误提示。 出现这样的错误主要是因为Discuz!系统的_xss_check()函数原本的意义是为了论坛安全,防止XSS攻击,一般网站使用是不会出现什么问题的,但是有些网站要接入第三方接口,当第三方接口向本站post数据的时候就会报”您当前的访问请求当中含有非法字符,已经被系统拒绝”,本文介绍一种简单的修改方法避免此错误。 + V& x3 i/ V5 ?! I
解决方案如下: \source\class\discuz的discuz_application.php 查找如下代码(在360行左右),并替换
: }; b" u$ p2 {8 @& ~1 ~% a
) u5 {. x, y, k4 i5 u1 D3 |, ?- B, V
2 o; x; \$ B. zPHP+ \; a, X r/ B9 l: z j
- private function _xss_check() {
, G0 X2 ]; B3 |' b4 K% R - static $check = array('"', '>', '<', '\'', '(', ')', 'CONTENT-TRANSFER-ENCODING');6 n9 \8 x* w7 i& H" W" M/ N
- if(isset($_GET['formhash']) && $_GET['formhash'] !== formhash()) {! u7 U% m$ s$ O( x' v; k7 e+ ?
- system_error('request_tainting'); y+ d) l* ^, i" f' V1 u( _9 y
- }
; T* X( Q1 P& t2 l! S; b8 I2 A/ I& V - if($_SERVER['REQUEST_METHOD'] == 'GET' ) {
0 O' K' x9 P D/ @1 }, {" P - $temp = $_SERVER['REQUEST_URI'];' \/ F. w4 j9 ?9 b9 [( G/ e. O
- } elseif(empty ($_GET['formhash'])) {
( v9 q, C v* h( \! I* _ - $temp = $_SERVER['REQUEST_URI'].file_get_contents('php://input');
! [) O, o+ Y2 J% E& Y( ^; k - } else {7 z1 [+ Z2 m$ i. q3 `, y
- $temp = '';
5 ~* a2 b' Q- S# [% T( M: Y4 o! m - }
) k8 J A" ]4 i% ] - if(!empty($temp)) {
& r" e& y: Z: E& w- k$ C - $temp = strtoupper(urldecode(urldecode($temp)));
! }7 p3 \! Z* X+ T4 j7 | - foreach ($check as $str) {
5 m6 x/ a2 X; s" h# L. g6 | - if(strpos($temp, $str) !== false) {
) F3 n, T$ L* ~1 q7 m U - system_error('request_tainting');
B" K2 K$ c% w& e - }, y% r5 @- l1 b6 Z1 }/ ?
- }
; f9 h( j1 K% G8 |' e9 ]2 j - }+ x6 R# Z6 g" b+ \; g
- return true;# L% ]1 ~+ y' g
- }
复制代码 替换为! B* U& l# q* V7 F8 S: M( ^
- private function _xss_check() {
) v( Z: `0 ^- P! y0 [$ K% q( V - $temp = strtoupper(urldecode(urldecode($_SERVER['REQUEST_URI'])));* S7 ]: n, L5 _( e$ {
- if(strpos($temp, '<') !== false || strpos($temp, '"') !== false || strpos($temp, 'CONTENT-TRANSFER-ENCODING') !== false) {
* I/ |7 `, _7 i% m! z% t - system_error('request_tainting');
" [8 J4 S, G3 V( A - }
4 f2 ^. [" r. R2 ]7 d* ~0 S. Z - return true;1 ^0 s/ { `# h" k* `; q4 |; X2 F' W
- }
复制代码 * l! S2 e0 [5 K! `% @9 j. M% V8 }
5 C: R: f7 \3 v) D+ S& Q
; I" Z1 z; I3 j
, N9 ?# j% A- ?/ h" M- |5 a* J, {: U) B! J1 }' |5 c- e; r
|
|