关于Discuz!中“您当前的访问请求当中含有非法字符,已经被系统拒绝”的问题,在添加或更新文章的时候经常出现,经测试发现出现这种情况更多的在使用工具(如火车头采集器)批量发布文章时出现,仔细分析发现,当发布的正文内容出现特殊符号(&,/,<,>等)时出现这样的错误提示。 出现这样的错误主要是因为Discuz!系统的_xss_check()函数原本的意义是为了论坛安全,防止XSS攻击,一般网站使用是不会出现什么问题的,但是有些网站要接入第三方接口,当第三方接口向本站post数据的时候就会报”您当前的访问请求当中含有非法字符,已经被系统拒绝”,本文介绍一种简单的修改方法避免此错误。 % S/ A; `% s ^+ d" w! \# M, N
解决方案如下: \source\class\discuz的discuz_application.php 查找如下代码(在360行左右),并替换 1 z9 ~1 u) j% M( J+ G$ c# E
1 G8 i" w3 S( J# \) V$ l
" r D0 o- D8 ~. t& pPHP+ b; j0 B! d* E
- private function _xss_check() {6 b) K1 o3 R5 d1 D+ x3 X, j y9 k
- static $check = array('"', '>', '<', '\'', '(', ')', 'CONTENT-TRANSFER-ENCODING');% B! h% a8 w% A" c/ k) b6 f
- if(isset($_GET['formhash']) && $_GET['formhash'] !== formhash()) {
4 d: O+ G7 h" J5 P3 ? - system_error('request_tainting');
; _) a u/ g: e% h# N2 i - }
0 T2 s) S! l, A5 F8 Q& w2 m - if($_SERVER['REQUEST_METHOD'] == 'GET' ) {
3 B7 g6 `9 \2 R8 o& X% L7 q! V0 k - $temp = $_SERVER['REQUEST_URI'];4 j1 h1 g$ o- V" f( U
- } elseif(empty ($_GET['formhash'])) {
) G) U& C P/ n9 r" ] - $temp = $_SERVER['REQUEST_URI'].file_get_contents('php://input'); e& Q3 B. F' S% x
- } else {" r; A/ G) z/ p- p# A9 r
- $temp = '';% ^ j, |- ^* `& C9 |7 Q3 K9 q
- }2 r* Y3 i- K, M: }8 p' F2 t
- if(!empty($temp)) {
6 L+ e s1 @! K0 ]. Z1 M" h - $temp = strtoupper(urldecode(urldecode($temp)));
" @+ R6 F7 i5 L$ _9 J: K; _ - foreach ($check as $str) {
- T) N3 b, `7 P' h7 c3 q: A5 V - if(strpos($temp, $str) !== false) {
4 b* Y3 w- Z% S& D0 I - system_error('request_tainting'); I b7 R# K. F. T8 a$ D8 q
- }! C, G2 o9 A6 @. c w( C5 d" y6 N
- }
, O. ~+ _; k& J9 |1 J# m - }
3 F# T ^7 C1 j" e! W# Q$ S - return true;
1 a7 j9 T1 g Z5 z3 s - }
复制代码 替换为- ?# U: X0 A8 i0 G* u0 T
- private function _xss_check() {
; X# p3 B9 i+ a8 J) K! t - $temp = strtoupper(urldecode(urldecode($_SERVER['REQUEST_URI'])));, l3 q' W0 i4 M7 C0 A& c' j! B
- if(strpos($temp, '<') !== false || strpos($temp, '"') !== false || strpos($temp, 'CONTENT-TRANSFER-ENCODING') !== false) {! w, n3 n4 e4 q9 o
- system_error('request_tainting');% [ z9 Y( g5 ~* K
- }
. f9 @4 M. u u$ T$ j% p% ? - return true;. z( G0 M) p6 G: F' t3 P- A; i4 a$ d
- }
复制代码 / S. r1 \( H9 v8 l/ T+ V
: z& O% M# ?% A6 S2 T$ d. u3 z
/ H$ g' t+ I6 F6 A. m' j
1 E% o4 d( e1 b7 ^$ V4 P+ R
7 S% h4 S3 E" W# i2 d+ C
|