关于Discuz!中“您当前的访问请求当中含有非法字符,已经被系统拒绝”的问题,在添加或更新文章的时候经常出现,经测试发现出现这种情况更多的在使用工具(如火车头采集器)批量发布文章时出现,仔细分析发现,当发布的正文内容出现特殊符号(&,/,<,>等)时出现这样的错误提示。 出现这样的错误主要是因为Discuz!系统的_xss_check()函数原本的意义是为了论坛安全,防止XSS攻击,一般网站使用是不会出现什么问题的,但是有些网站要接入第三方接口,当第三方接口向本站post数据的时候就会报”您当前的访问请求当中含有非法字符,已经被系统拒绝”,本文介绍一种简单的修改方法避免此错误。
6 c3 J9 H* G* f8 m解决方案如下: \source\class\discuz的discuz_application.php 查找如下代码(在360行左右),并替换
; v0 [- k6 F, s7 n2 g5 n' M/ |8 C: J5 C+ J- p, O
% P5 Q8 l: z4 q7 C
PHP" K* e+ q2 [/ B5 q- B0 c/ v
- private function _xss_check() {# Q4 ]$ \+ ?2 D2 w, }0 E9 G
- static $check = array('"', '>', '<', '\'', '(', ')', 'CONTENT-TRANSFER-ENCODING');7 @$ G$ ^0 B- W& R. b: O
- if(isset($_GET['formhash']) && $_GET['formhash'] !== formhash()) {+ x% l! i! r) P, z
- system_error('request_tainting');
* W$ f3 m1 C/ v* m" H# I - }
5 F/ w9 G/ g& C3 v - if($_SERVER['REQUEST_METHOD'] == 'GET' ) {8 C9 V- @- Z$ }0 p: n
- $temp = $_SERVER['REQUEST_URI'];
3 n5 G/ l, m4 |1 Q& O! B o - } elseif(empty ($_GET['formhash'])) {" Y! Y1 s4 l% {5 N9 B
- $temp = $_SERVER['REQUEST_URI'].file_get_contents('php://input');# n, o B* }/ }; n
- } else {' e# k, ^! L) l# H9 [8 [
- $temp = '';5 U9 U& c3 B9 `" S/ q2 \, J! _
- }
~) d6 S) ~ e+ l - if(!empty($temp)) {
% \! D' q" U5 | - $temp = strtoupper(urldecode(urldecode($temp)));
, z" f( _: ^( `6 @ - foreach ($check as $str) {
" Z" q/ H+ {0 U' F - if(strpos($temp, $str) !== false) {
) V) T" B6 B1 P- Q3 D( H8 \ - system_error('request_tainting');1 S2 F5 g; `9 h$ t7 p. w
- }
% k0 O: `9 j; h( M3 a$ ^ i - }
6 r' M6 V( a6 v1 `5 W - }, e1 S. b0 B) e9 ~. U2 Q
- return true;( G0 n: Q f* i! f5 I; b
- }
复制代码 替换为) }. j0 ?5 t4 ?. i, `5 z% o( |( j( h2 [
- private function _xss_check() {
4 ~: U9 Q }+ y- z - $temp = strtoupper(urldecode(urldecode($_SERVER['REQUEST_URI'])));
% x# ~% b( ]4 N! \0 u$ O+ |" ^ d - if(strpos($temp, '<') !== false || strpos($temp, '"') !== false || strpos($temp, 'CONTENT-TRANSFER-ENCODING') !== false) {( D- {0 [- L$ y+ Y
- system_error('request_tainting');9 x% @8 n# v$ q: h! z
- }
$ v# d# m& K4 G; \0 _ - return true;& |4 Q4 \0 x5 z! \! w9 _8 O0 @
- }
复制代码 9 `' K( D+ M# `6 @) F! K4 }8 q: _
, q: R- d: [: g( ]
4 l* a$ P" l" t9 O! S7 P* s: r
b$ y8 g. M8 I1 c6 _2 X( q0 @0 @( T4 ]* l7 r' Z7 B
|