关于Discuz!中“您当前的访问请求当中含有非法字符,已经被系统拒绝”的问题,在添加或更新文章的时候经常出现,经测试发现出现这种情况更多的在使用工具(如火车头采集器)批量发布文章时出现,仔细分析发现,当发布的正文内容出现特殊符号(&,/,<,>等)时出现这样的错误提示。 出现这样的错误主要是因为Discuz!系统的_xss_check()函数原本的意义是为了论坛安全,防止XSS攻击,一般网站使用是不会出现什么问题的,但是有些网站要接入第三方接口,当第三方接口向本站post数据的时候就会报”您当前的访问请求当中含有非法字符,已经被系统拒绝”,本文介绍一种简单的修改方法避免此错误。 7 O4 n% d, b4 N6 }6 X
解决方案如下: \source\class\discuz的discuz_application.php 查找如下代码(在360行左右),并替换
$ O3 o) P; p) z8 ~" }+ x+ G) |5 D9 s' j' P
% v+ N/ w$ G ^3 PPHP
" \, c' `% P% D: D: }# b- private function _xss_check() {
# l4 |# \9 K/ r0 s, t4 ? - static $check = array('"', '>', '<', '\'', '(', ')', 'CONTENT-TRANSFER-ENCODING');% ~/ p0 u( W B0 Y7 |7 Z
- if(isset($_GET['formhash']) && $_GET['formhash'] !== formhash()) {9 O7 K9 V" h! ?0 x9 n
- system_error('request_tainting');
# l m% L1 w5 S' K - }
/ r8 y9 W) r n5 L( G0 S4 V - if($_SERVER['REQUEST_METHOD'] == 'GET' ) {& l, {$ \ v1 d0 B5 |1 a( u5 e- R
- $temp = $_SERVER['REQUEST_URI'];' R0 g! Z0 P1 {( e0 ~
- } elseif(empty ($_GET['formhash'])) {: l1 F+ a" i, W, @1 N2 U
- $temp = $_SERVER['REQUEST_URI'].file_get_contents('php://input');
( L# X+ j+ R5 ?( k4 ? - } else {
& B/ \2 e3 ~1 v! T( l - $temp = '';
* Y B# v- i) | - }+ s( @4 j5 n1 {
- if(!empty($temp)) {+ p7 ~2 P4 F' B2 c( I, o
- $temp = strtoupper(urldecode(urldecode($temp)));
( y/ a$ |' q: b, Y - foreach ($check as $str) {
2 d e# Z, N) w6 c - if(strpos($temp, $str) !== false) {
. q9 D E& N/ [3 X' z - system_error('request_tainting');/ k5 z6 g2 W% y: ^6 B8 p8 C! _
- }6 V2 S7 [; I7 B" S. q/ C; F; S
- }. `, L/ E- h# `3 D$ P; q, F+ o
- }' K' [/ P8 S3 o, N4 U
- return true;4 o5 @$ q" M: J5 } O$ C
- }
复制代码 替换为
2 l! I+ Y4 `1 p @1 X3 x7 U- private function _xss_check() {
/ W( S' V' B/ S3 C" \) u - $temp = strtoupper(urldecode(urldecode($_SERVER['REQUEST_URI'])));; ^9 C( B3 o1 H2 \
- if(strpos($temp, '<') !== false || strpos($temp, '"') !== false || strpos($temp, 'CONTENT-TRANSFER-ENCODING') !== false) {
* c3 S2 s" B8 i$ x/ ?$ i( L - system_error('request_tainting');
5 z% w2 P! K6 H( S( F) u! H - }
0 G6 ]3 d# z6 U" U$ m, O - return true;
& M) e! a, l" }1 v# e( q - }
复制代码 * w% B5 R8 g9 R" G5 k" L
' E' i0 v3 G9 a, `
6 z3 v+ b0 B* \' n5 @$ t3 r L9 @% P/ |( T* ^. L# _
3 \5 U) j- V, k$ j
|
|