关于Discuz!中“您当前的访问请求当中含有非法字符,已经被系统拒绝”的问题,在添加或更新文章的时候经常出现,经测试发现出现这种情况更多的在使用工具(如火车头采集器)批量发布文章时出现,仔细分析发现,当发布的正文内容出现特殊符号(&,/,<,>等)时出现这样的错误提示。 出现这样的错误主要是因为Discuz!系统的_xss_check()函数原本的意义是为了论坛安全,防止XSS攻击,一般网站使用是不会出现什么问题的,但是有些网站要接入第三方接口,当第三方接口向本站post数据的时候就会报”您当前的访问请求当中含有非法字符,已经被系统拒绝”,本文介绍一种简单的修改方法避免此错误。 * h. T' [6 X/ Z
解决方案如下: \source\class\discuz的discuz_application.php 查找如下代码(在360行左右),并替换
1 `+ t$ B% g9 ~ j( a) ]3 V) I3 p3 {7 r1 N, J) h$ c8 y
$ o$ M, |6 Y, ^' f1 \PHP
: P; d+ @, T3 I* e0 n4 h2 W+ W- private function _xss_check() {
* p; H7 P. j5 x8 }/ t - static $check = array('"', '>', '<', '\'', '(', ')', 'CONTENT-TRANSFER-ENCODING');* Q, B, @; @: D# s" R4 s
- if(isset($_GET['formhash']) && $_GET['formhash'] !== formhash()) {
/ e. u+ A, X1 n* c - system_error('request_tainting');, m( n8 x2 u0 R3 r
- }
* I1 v E& f. C/ E0 x - if($_SERVER['REQUEST_METHOD'] == 'GET' ) {
& A; K: `3 I$ U/ a4 X) S$ v - $temp = $_SERVER['REQUEST_URI'];$ r" Z& ], x d* ]7 y# H
- } elseif(empty ($_GET['formhash'])) {+ R% g3 F9 }* S
- $temp = $_SERVER['REQUEST_URI'].file_get_contents('php://input');
6 _- }1 Q3 h; J# H - } else {
5 _+ E/ ]2 O( u4 i% ^& d - $temp = '';
3 ?7 Z: [2 \2 @# N8 _- e O - }
3 ~2 G( p2 F c; g; Y1 v% a - if(!empty($temp)) {' O! p3 g; B/ R( f
- $temp = strtoupper(urldecode(urldecode($temp)));
( h7 _" P2 T/ A7 n3 a8 n7 K! ~ - foreach ($check as $str) {
4 N) i1 I8 `7 Z8 g" k+ U/ @5 ?: _ - if(strpos($temp, $str) !== false) {' H1 d8 C. c: ?, I x
- system_error('request_tainting');2 M# u } z" ~9 g& }4 S
- }
* S3 Z5 `8 i& A) v% m - }/ P/ U# g* n$ ?5 P2 Q( J
- }0 j# k8 i- l6 F( e0 _4 M
- return true;
" d; M6 ]* V" L8 s. H3 `+ A - }
复制代码 替换为
1 T6 b5 d, | s+ D5 S. B, M! q3 Z- private function _xss_check() {
6 E' R' O: o3 g( \; i/ X - $temp = strtoupper(urldecode(urldecode($_SERVER['REQUEST_URI'])));. Q0 r9 `/ {! ^& R& W) d
- if(strpos($temp, '<') !== false || strpos($temp, '"') !== false || strpos($temp, 'CONTENT-TRANSFER-ENCODING') !== false) {% S, `5 Y1 r5 X5 ?- y- {
- system_error('request_tainting');2 C; o( [9 L4 n! o9 H/ z
- }
. k( S6 f, y* l% ]/ A) E" G7 y0 y - return true;
2 `2 l5 d9 y0 F, A5 _1 u6 X - }
复制代码 : D# ?3 A$ i2 y r/ [" S5 x- b5 u
P8 v, c4 b, f* E6 j* G5 }
. W# d1 _; ~$ a- h' U: V/ }: j% D0 X! I t6 a; Y
+ A p9 R V1 m3 Y+ C1 i
|
|