关于Discuz!中“您当前的访问请求当中含有非法字符,已经被系统拒绝”的问题,在添加或更新文章的时候经常出现,经测试发现出现这种情况更多的在使用工具(如火车头采集器)批量发布文章时出现,仔细分析发现,当发布的正文内容出现特殊符号(&,/,<,>等)时出现这样的错误提示。 出现这样的错误主要是因为Discuz!系统的_xss_check()函数原本的意义是为了论坛安全,防止XSS攻击,一般网站使用是不会出现什么问题的,但是有些网站要接入第三方接口,当第三方接口向本站post数据的时候就会报”您当前的访问请求当中含有非法字符,已经被系统拒绝”,本文介绍一种简单的修改方法避免此错误。
0 P+ k1 J" V3 j* e- |8 R解决方案如下: \source\class\discuz的discuz_application.php 查找如下代码(在360行左右),并替换 , U% m& ?( T* R; }/ U- @; O
+ R& x, e2 g8 j0 ?2 f
I5 T) S: p0 E5 Q; sPHP
. t" T# u3 H- {2 b6 Y2 r- private function _xss_check() {
9 F/ ^2 b7 S7 I% G - static $check = array('"', '>', '<', '\'', '(', ')', 'CONTENT-TRANSFER-ENCODING');
" o5 l* @( D, z0 } }" |! _- z - if(isset($_GET['formhash']) && $_GET['formhash'] !== formhash()) {
4 n* x- n( X! y0 ~# F O7 J2 k - system_error('request_tainting');
$ [0 f, _& N. z- [& J+ H - }, \5 b9 v* P6 f3 T4 S6 n6 ^# j+ b
- if($_SERVER['REQUEST_METHOD'] == 'GET' ) {" O0 c& V) C1 C4 `
- $temp = $_SERVER['REQUEST_URI'];/ ^& R7 h& n+ @6 i
- } elseif(empty ($_GET['formhash'])) {" K4 R0 F7 V Z; |. ~
- $temp = $_SERVER['REQUEST_URI'].file_get_contents('php://input');4 H1 W% Q8 ]+ E( q# }
- } else {! `9 G1 \$ h* i
- $temp = '';
* ^9 F9 \ [, r2 h! O% t6 R" f1 Y - }
) A( _, [. h, n: [; G/ U: u, G - if(!empty($temp)) {: M5 t9 Z# q) @2 p
- $temp = strtoupper(urldecode(urldecode($temp)));, ~% `! H6 E4 c1 }
- foreach ($check as $str) {
' p6 ]" i' G6 }4 ~/ ] - if(strpos($temp, $str) !== false) {
( \. b! ]- N9 w1 W" I$ j - system_error('request_tainting');4 p( ^5 a& R3 S) d+ Q1 B( r+ n
- }
+ X3 |, z" k$ U0 v3 _. {' S - }4 @4 k6 |. j" G b! u: C
- }
2 t1 t% ]$ H6 ^( n' v - return true;' o% F1 B' ~! c9 H
- }
复制代码 替换为
( V; D$ b; w) r5 p- private function _xss_check() {, a6 I; g' C# P. E( n7 x: A
- $temp = strtoupper(urldecode(urldecode($_SERVER['REQUEST_URI'])));
# F/ z" F/ c+ T, w, m2 W - if(strpos($temp, '<') !== false || strpos($temp, '"') !== false || strpos($temp, 'CONTENT-TRANSFER-ENCODING') !== false) {5 f: |% _" {- w; U! M
- system_error('request_tainting');, U& A& ]0 q; q/ N2 ?1 P4 b
- }9 n) x- Z, J p" O2 A1 ]- U: N1 [
- return true;, E8 U- J9 k9 U" N4 e$ a7 c
- }
复制代码
% r- s. ^: L- \' V
& y6 I* S& T" @7 j) n" x% Z. B8 }8 k) D) M' n6 N4 V% s
# l* E3 U. i7 _. v% L& u! K' U6 `) ?
1 n0 i% H" a/ X k1 n
|
|