关于Discuz!中“您当前的访问请求当中含有非法字符,已经被系统拒绝”的问题,在添加或更新文章的时候经常出现,经测试发现出现这种情况更多的在使用工具(如火车头采集器)批量发布文章时出现,仔细分析发现,当发布的正文内容出现特殊符号(&,/,<,>等)时出现这样的错误提示。 出现这样的错误主要是因为Discuz!系统的_xss_check()函数原本的意义是为了论坛安全,防止XSS攻击,一般网站使用是不会出现什么问题的,但是有些网站要接入第三方接口,当第三方接口向本站post数据的时候就会报”您当前的访问请求当中含有非法字符,已经被系统拒绝”,本文介绍一种简单的修改方法避免此错误。
# H. V) a/ v# R8 v' D3 d解决方案如下: \source\class\discuz的discuz_application.php 查找如下代码(在360行左右),并替换
0 i4 H% a7 U- G e! d7 V4 U/ Z- Y" U; O8 G
! _4 z+ z5 I* w# l
PHP
) M7 H! v$ A- l9 D- private function _xss_check() {
& F* A8 Z* Z& }0 q' t1 j- F [- K - static $check = array('"', '>', '<', '\'', '(', ')', 'CONTENT-TRANSFER-ENCODING');; O, X. Z8 R9 l6 j& F; {5 v5 r
- if(isset($_GET['formhash']) && $_GET['formhash'] !== formhash()) {
5 G. n6 q7 Q# P ? - system_error('request_tainting');# ~* z, J- q# |- \( w
- }
$ U1 S E; Y2 u" K2 n/ ] - if($_SERVER['REQUEST_METHOD'] == 'GET' ) {6 E% ^2 O/ U* N: P
- $temp = $_SERVER['REQUEST_URI']; B& h2 q- Q ]7 A) H# x2 T
- } elseif(empty ($_GET['formhash'])) {& o8 _; U4 ~8 {) b0 J0 q- W) e
- $temp = $_SERVER['REQUEST_URI'].file_get_contents('php://input');! g+ _# s5 I2 q
- } else {( n; `! ?9 Y' E9 _6 h( j
- $temp = '';* o' W! C6 G |: Z& G% N# K
- }
/ d. Z) @5 E' O7 s2 S+ C - if(!empty($temp)) {
0 L- ^4 ]" C) n ` - $temp = strtoupper(urldecode(urldecode($temp)));8 T1 w( h/ g- G/ Q; O6 `8 w
- foreach ($check as $str) {
6 C+ p, S$ s8 c* `: c$ Q - if(strpos($temp, $str) !== false) {7 r, Z7 ~! N5 r8 y- E- F$ Q
- system_error('request_tainting');) }. f3 ^9 U1 l# \
- }
9 I8 U) L( V q) r - }
+ O) O, u4 i3 d: V6 ?9 W - }# x: r1 u, [6 C. R5 c! ~1 ~
- return true;
, K3 q+ y. |: A0 E6 G+ I* n - }
复制代码 替换为4 T/ ]7 v4 A- B4 g/ g
- private function _xss_check() {+ C7 j, S/ ^7 v- |! S; p
- $temp = strtoupper(urldecode(urldecode($_SERVER['REQUEST_URI'])));& r# _4 c$ x4 m& }' m/ t3 ^
- if(strpos($temp, '<') !== false || strpos($temp, '"') !== false || strpos($temp, 'CONTENT-TRANSFER-ENCODING') !== false) {' k$ o: M( q/ u
- system_error('request_tainting');; W, c! l& R" Q3 Y$ g0 _
- }: H0 `0 ]: [8 _* a8 h
- return true;* @" Z# F5 y# Y$ A2 h
- }
复制代码
& ]& S- _2 n5 `9 k" n# k# y, F7 m* f- W7 x# v5 q4 Q
$ C6 v& \: |3 t! h* a
2 k, D$ N& H6 Y
# P& H9 Q( N) e# ?8 h d0 c6 y( L
|