关于Discuz!中“您当前的访问请求当中含有非法字符,已经被系统拒绝”的问题,在添加或更新文章的时候经常出现,经测试发现出现这种情况更多的在使用工具(如火车头采集器)批量发布文章时出现,仔细分析发现,当发布的正文内容出现特殊符号(&,/,<,>等)时出现这样的错误提示。 出现这样的错误主要是因为Discuz!系统的_xss_check()函数原本的意义是为了论坛安全,防止XSS攻击,一般网站使用是不会出现什么问题的,但是有些网站要接入第三方接口,当第三方接口向本站post数据的时候就会报”您当前的访问请求当中含有非法字符,已经被系统拒绝”,本文介绍一种简单的修改方法避免此错误。
( ?1 @3 V5 U( j# m0 n解决方案如下: \source\class\discuz的discuz_application.php 查找如下代码(在360行左右),并替换 9 c5 E0 n3 g4 l( U
! w2 J, V, P; c' n& y7 i' `
" r5 }" s" _0 l6 {7 a
PHP
5 u1 a7 z1 J( m( J8 B2 v! U- private function _xss_check() {
; w6 _1 Q6 X( x9 W6 l - static $check = array('"', '>', '<', '\'', '(', ')', 'CONTENT-TRANSFER-ENCODING');
6 F C- O6 F2 H( f6 J) f/ Q - if(isset($_GET['formhash']) && $_GET['formhash'] !== formhash()) {
" I" ]3 C# T) d* P" k7 O8 q3 k - system_error('request_tainting');
! ^, p U5 Q! P; H5 ?" T - }
$ T+ w+ x8 a `- k3 z - if($_SERVER['REQUEST_METHOD'] == 'GET' ) {5 m" o5 a; [" x: E
- $temp = $_SERVER['REQUEST_URI'];- U U4 ]" d! q z& j% y
- } elseif(empty ($_GET['formhash'])) {7 Y) ?, c3 K! }1 `& H$ }
- $temp = $_SERVER['REQUEST_URI'].file_get_contents('php://input');
, i1 k6 p+ T- H/ o) V1 k% c7 i - } else {, }1 q% D4 K$ z
- $temp = '';: V- t3 r2 j. {" z
- }% f R( ]. J9 M R' F
- if(!empty($temp)) {
6 j% M/ P0 H/ P - $temp = strtoupper(urldecode(urldecode($temp)));! Q0 v# n: U: K* V6 N. b K$ J% ^( m
- foreach ($check as $str) {
; _4 s6 z) ~2 z1 C - if(strpos($temp, $str) !== false) {
$ N$ w) V. U; q# M% n; { - system_error('request_tainting');1 r3 j: k- `: P& j% E6 O: p8 M
- }
9 N/ M6 @! E6 `7 m3 h4 x* x* D' J G - }. J9 z1 G. i9 B- X) y6 G0 T
- }( e. o9 t2 z; w0 q. _
- return true;
& @7 c+ O* ~2 Z U# X: t: P1 W& | - }
复制代码 替换为( M, @3 B4 S6 [: `% i
- private function _xss_check() {% ]5 ~! {, q& N5 H
- $temp = strtoupper(urldecode(urldecode($_SERVER['REQUEST_URI'])));1 \0 Q6 Q5 W3 e! c$ B( e# `
- if(strpos($temp, '<') !== false || strpos($temp, '"') !== false || strpos($temp, 'CONTENT-TRANSFER-ENCODING') !== false) {1 S6 |% v2 D3 n3 [5 i: E
- system_error('request_tainting');
9 ~* s% O1 ^& C% m5 Y7 d+ p - }/ b V6 l( T& G
- return true;' @( i$ j+ V4 z1 L
- }
复制代码
5 X# V7 ~2 m" Q1 K
$ u% G& I! d; z9 z9 D
# u1 f) M1 J8 h5 U- t4 N( j" f4 v' K4 n' l7 z/ ?# G" c
+ I! d" }3 G# @6 ^5 d! I0 P9 ]& s3 h
|