关于Discuz!中“您当前的访问请求当中含有非法字符,已经被系统拒绝”的问题,在添加或更新文章的时候经常出现,经测试发现出现这种情况更多的在使用工具(如火车头采集器)批量发布文章时出现,仔细分析发现,当发布的正文内容出现特殊符号(&,/,<,>等)时出现这样的错误提示。 出现这样的错误主要是因为Discuz!系统的_xss_check()函数原本的意义是为了论坛安全,防止XSS攻击,一般网站使用是不会出现什么问题的,但是有些网站要接入第三方接口,当第三方接口向本站post数据的时候就会报”您当前的访问请求当中含有非法字符,已经被系统拒绝”,本文介绍一种简单的修改方法避免此错误。
8 h+ A, L0 j6 K解决方案如下: \source\class\discuz的discuz_application.php 查找如下代码(在360行左右),并替换 & @+ K" R7 n. L; z' h/ v3 v
' Q. I" W8 z( J! C
/ T6 d0 p/ O8 l# _$ VPHP6 T3 @; [# \# v8 ~' Y
- private function _xss_check() {- N% D' S2 |4 M: M Q' D' m+ V
- static $check = array('"', '>', '<', '\'', '(', ')', 'CONTENT-TRANSFER-ENCODING');
; Y& i# L/ _% P. [# ?8 o+ [: n - if(isset($_GET['formhash']) && $_GET['formhash'] !== formhash()) {( s3 ^& g; Y- ]# ~5 }
- system_error('request_tainting');! a1 }% J' m( a0 O; h. {
- }
9 l& G! N1 \( E) X - if($_SERVER['REQUEST_METHOD'] == 'GET' ) {
' z% O( P- Y7 {$ \) l3 Q6 i - $temp = $_SERVER['REQUEST_URI'];
# d( t# A* U% q7 E+ C$ d - } elseif(empty ($_GET['formhash'])) {2 y/ n$ a1 Y% K1 K& L
- $temp = $_SERVER['REQUEST_URI'].file_get_contents('php://input');
$ t: O5 g5 f0 W - } else {( m7 D v: Z' h
- $temp = '';
0 O" T. P3 n! V& ^ - }7 l8 e' M' d/ x# R1 z4 Z* A* O# K
- if(!empty($temp)) {
: i4 [1 w" B! Z! u - $temp = strtoupper(urldecode(urldecode($temp)));
1 c5 c/ x: ?; r Q - foreach ($check as $str) {
6 @9 e5 f1 e6 N$ A7 M% J# l - if(strpos($temp, $str) !== false) {
$ k3 G+ d* K. N) O& f1 J; g - system_error('request_tainting');+ Q3 `; f: w0 {" x$ J* O
- }
3 @3 Q: U; d3 Q5 } - }$ u& e( h8 Z9 s# D' @
- }
7 _- }% P8 O4 q1 B& }% ^ - return true;3 @% ?: h. U L+ c. `
- }
复制代码 替换为
% Y1 v8 \' P0 d+ l- private function _xss_check() {2 {, ]* A& [: m' [- S
- $temp = strtoupper(urldecode(urldecode($_SERVER['REQUEST_URI'])));
, Y- [9 p0 L& s: k - if(strpos($temp, '<') !== false || strpos($temp, '"') !== false || strpos($temp, 'CONTENT-TRANSFER-ENCODING') !== false) {
( ~# y; v1 e ^- l1 k - system_error('request_tainting');8 E7 `7 P/ Z" `# X' b& I4 {
- }
/ m! b' A2 I& ~2 I - return true;- C3 W9 i& n; G5 b B4 _# b0 U8 q/ i
- }
复制代码
, |4 \ n) |4 |# H
2 X, O1 y1 W- P5 c8 E9 \1 y! t; V( J# T& z
& }8 c' z: ^0 l+ K2 u
( T8 J4 q, k9 _- W1 q: a
|