关于Discuz!中“您当前的访问请求当中含有非法字符,已经被系统拒绝”的问题,在添加或更新文章的时候经常出现,经测试发现出现这种情况更多的在使用工具(如火车头采集器)批量发布文章时出现,仔细分析发现,当发布的正文内容出现特殊符号(&,/,<,>等)时出现这样的错误提示。 出现这样的错误主要是因为Discuz!系统的_xss_check()函数原本的意义是为了论坛安全,防止XSS攻击,一般网站使用是不会出现什么问题的,但是有些网站要接入第三方接口,当第三方接口向本站post数据的时候就会报”您当前的访问请求当中含有非法字符,已经被系统拒绝”,本文介绍一种简单的修改方法避免此错误。
9 R o( ]1 B& q. \解决方案如下: \source\class\discuz的discuz_application.php 查找如下代码(在360行左右),并替换 * ^3 }' {. _2 b i& z
w& ^2 u6 G) ?% C
+ n7 m: z$ c' a" u
PHP
: ~# ~& H9 n0 }% o% O- private function _xss_check() {
- _& R2 l! \# v, g5 D - static $check = array('"', '>', '<', '\'', '(', ')', 'CONTENT-TRANSFER-ENCODING');
, B3 h2 Q% \3 ?0 @ G* H& G/ j( [ - if(isset($_GET['formhash']) && $_GET['formhash'] !== formhash()) {3 \- X( n% Q2 I
- system_error('request_tainting');; i9 u1 G, ^! @" q
- } d0 k3 s a. n0 f) o. @
- if($_SERVER['REQUEST_METHOD'] == 'GET' ) {
' M/ \2 h; M. }( ] - $temp = $_SERVER['REQUEST_URI'];) @2 \5 I3 K% l' t) ^4 ~) [- C' L
- } elseif(empty ($_GET['formhash'])) {& \& Y: d4 q0 T! m; x; X
- $temp = $_SERVER['REQUEST_URI'].file_get_contents('php://input');
0 O- `! a- n4 w- W: e) ~ - } else {: Q0 s7 L' s3 @7 _' [8 J6 {0 `
- $temp = '';) x7 i4 w( B* }
- } t N' D3 _) c: h) C8 t% q
- if(!empty($temp)) {+ m! t; m* e) a7 o7 T
- $temp = strtoupper(urldecode(urldecode($temp)));) D0 S( w- P. C& n- k& u
- foreach ($check as $str) {7 {3 ~) H: C Y) a0 q
- if(strpos($temp, $str) !== false) {" Z/ P; Q0 E' R8 [5 o( s U
- system_error('request_tainting');
' y6 Y3 c5 o9 p0 ~& X - }
- c& }( Q7 |5 d) v' ` - }5 B9 s$ v1 d+ C) K" p3 l
- }
8 r5 E( g2 J/ L1 B& D& ] - return true;% D; w$ M0 O" E! `3 b1 {; G
- }
复制代码 替换为: u& {) w& C* J. y
- private function _xss_check() {5 b- t" U% A3 h4 C+ g; e- p" q
- $temp = strtoupper(urldecode(urldecode($_SERVER['REQUEST_URI'])));
0 m( {3 h. w# A' d1 { P5 U7 n - if(strpos($temp, '<') !== false || strpos($temp, '"') !== false || strpos($temp, 'CONTENT-TRANSFER-ENCODING') !== false) {
6 ^5 y) A _$ P2 s, Q, p9 _ - system_error('request_tainting');& t+ H. X" Y: V0 |
- }
. E. c& O" g$ C3 s - return true;) K2 g) {- r% u) }7 o
- }
复制代码
* j" v3 q+ { e( A5 ^ }$ `; U0 r- b9 P4 j/ h' ~% w F
3 C8 {' ? T& x# q9 |8 t
( O9 ^. i, d- b. v! B" p( Z: }* h& `9 I2 a: `. s" m1 E
|