关于Discuz!中“您当前的访问请求当中含有非法字符,已经被系统拒绝”的问题,在添加或更新文章的时候经常出现,经测试发现出现这种情况更多的在使用工具(如火车头采集器)批量发布文章时出现,仔细分析发现,当发布的正文内容出现特殊符号(&,/,<,>等)时出现这样的错误提示。 出现这样的错误主要是因为Discuz!系统的_xss_check()函数原本的意义是为了论坛安全,防止XSS攻击,一般网站使用是不会出现什么问题的,但是有些网站要接入第三方接口,当第三方接口向本站post数据的时候就会报”您当前的访问请求当中含有非法字符,已经被系统拒绝”,本文介绍一种简单的修改方法避免此错误。 * v. a- z3 ?. V; I
解决方案如下: \source\class\discuz的discuz_application.php 查找如下代码(在360行左右),并替换
1 A) [7 G% m0 Z
8 j4 w# y# F& a9 k8 `7 U* A. V/ y, N3 s# w7 z/ U; P4 y
PHP) d4 c8 M% M) y0 @8 M% H0 W
- private function _xss_check() {1 U" c! s+ x/ N2 p7 ^
- static $check = array('"', '>', '<', '\'', '(', ')', 'CONTENT-TRANSFER-ENCODING');1 a, W* J/ V3 l$ {! o) }
- if(isset($_GET['formhash']) && $_GET['formhash'] !== formhash()) {! a( o+ @2 `/ s2 y( A! |
- system_error('request_tainting');) t F* t Y$ B1 O& c
- }
7 C" t# L, l5 Q- H - if($_SERVER['REQUEST_METHOD'] == 'GET' ) {
, R4 ?$ \2 a" O) ?1 {" q8 r3 l& j - $temp = $_SERVER['REQUEST_URI'];
! M2 z6 x5 \. f8 k, x* K - } elseif(empty ($_GET['formhash'])) {
6 A" u% Z) e3 U$ S2 p# o. |5 ~" x: Z - $temp = $_SERVER['REQUEST_URI'].file_get_contents('php://input');
# G3 w2 \' U4 }' J/ T - } else {
# Z7 V' c9 W) I; q6 A - $temp = '';% ?) [0 G! a. \4 u( X) G
- }
, ^- H3 H/ O4 u$ B; w7 ` - if(!empty($temp)) {4 N+ K4 }! i" r8 ~2 A
- $temp = strtoupper(urldecode(urldecode($temp)));6 q4 r9 H2 \7 ~7 `" e- k ]
- foreach ($check as $str) {
- V+ P' J b. W9 r; M. u) z' n - if(strpos($temp, $str) !== false) {" Y" m+ X5 b" A& U
- system_error('request_tainting');
( K4 I- ~$ m: S3 V - }- X- v2 O8 B9 B
- }: x% C ^4 C2 W6 o8 b! A, ^
- }
5 \( z/ N" {+ F/ Z! L5 _' Y - return true;; j i* a: H! u( c& R6 |4 u5 @
- }
复制代码 替换为
. ]9 ~& W4 n: x- private function _xss_check() {
3 t1 e; X2 K3 {0 p Y' m! E - $temp = strtoupper(urldecode(urldecode($_SERVER['REQUEST_URI'])));
# W7 \; H- h8 d' |# X - if(strpos($temp, '<') !== false || strpos($temp, '"') !== false || strpos($temp, 'CONTENT-TRANSFER-ENCODING') !== false) {( P. H+ D& t2 {/ L) ^
- system_error('request_tainting');
4 {, j& D3 ]: x; j; l - }
3 M/ {0 x9 F) W - return true;
) B C% f! X/ n$ V: ]' L v - }
复制代码 7 i8 E( I- \" S0 S0 ^0 A- j \# T
0 p$ [4 s9 u# A* w/ a2 p7 m5 f/ q: `
J5 Y- J! a; u( R
7 ^: N% L4 H+ i3 c
|