关于Discuz!中“您当前的访问请求当中含有非法字符,已经被系统拒绝”的问题,在添加或更新文章的时候经常出现,经测试发现出现这种情况更多的在使用工具(如火车头采集器)批量发布文章时出现,仔细分析发现,当发布的正文内容出现特殊符号(&,/,<,>等)时出现这样的错误提示。 出现这样的错误主要是因为Discuz!系统的_xss_check()函数原本的意义是为了论坛安全,防止XSS攻击,一般网站使用是不会出现什么问题的,但是有些网站要接入第三方接口,当第三方接口向本站post数据的时候就会报”您当前的访问请求当中含有非法字符,已经被系统拒绝”,本文介绍一种简单的修改方法避免此错误。
y, J: F! m H7 P6 v解决方案如下: \source\class\discuz的discuz_application.php 查找如下代码(在360行左右),并替换
1 U- P* K3 _$ ^& | @) Q
& R" E/ m& p8 G( v; L. M# \! \& y- K1 q
PHP$ n# B# w% \5 E6 T' s( @1 Q7 e( x
- private function _xss_check() {
+ u, k4 J: }+ R. }7 {' P7 R - static $check = array('"', '>', '<', '\'', '(', ')', 'CONTENT-TRANSFER-ENCODING');
2 W( T; x( w1 E& U( z - if(isset($_GET['formhash']) && $_GET['formhash'] !== formhash()) {
8 S0 q1 l; u, q+ x. b( C' _) ^( S - system_error('request_tainting');& j5 ?2 o: n4 _$ C1 g
- }
8 }" h$ n- \) ~9 `+ @) ~ - if($_SERVER['REQUEST_METHOD'] == 'GET' ) {/ n- \* W% e( S4 l# y& J
- $temp = $_SERVER['REQUEST_URI']; l; L) I B! G, M m
- } elseif(empty ($_GET['formhash'])) {7 M5 C$ d3 W% |6 A+ d
- $temp = $_SERVER['REQUEST_URI'].file_get_contents('php://input');7 ]! u$ f2 F) K( [1 i5 \8 X: l
- } else {5 l- x: C0 B1 M. C
- $temp = '';
$ M5 E' }6 @, M3 v1 A8 u( p - }$ T! G* t8 { E1 N# R6 W9 M
- if(!empty($temp)) {5 a# Y. G4 _& H* C
- $temp = strtoupper(urldecode(urldecode($temp)));3 I; N( S$ M5 J: ~$ ~ D* k4 d
- foreach ($check as $str) {
* Y' @) s, U3 P - if(strpos($temp, $str) !== false) {
$ ^2 k, n' r0 ` o/ a) {! }1 X - system_error('request_tainting');
) _( F8 `! P- j& i/ ?8 w( l/ r" M - }5 |2 x+ @" @$ f7 }6 a
- }" B* O* C6 u/ ^$ h$ c% D" t
- }
+ n7 F9 h2 i7 [" X# } - return true;% n0 B6 B- J; e# h
- }
复制代码 替换为% F; V4 q% f3 [" ^ c! G' H
- private function _xss_check() {7 h. n4 O5 B p3 z
- $temp = strtoupper(urldecode(urldecode($_SERVER['REQUEST_URI'])));
' c7 o. }3 x, F+ R7 | - if(strpos($temp, '<') !== false || strpos($temp, '"') !== false || strpos($temp, 'CONTENT-TRANSFER-ENCODING') !== false) {* W4 Y: ^! W: J% J+ O# E t
- system_error('request_tainting');
8 e0 W5 `2 c9 U+ W) ~: J6 }4 j - }
8 x6 t) j3 f( }2 x9 P5 P( k - return true;
1 c' K& d8 u0 v3 Y7 Z - }
复制代码
: V9 b4 A: [3 o: T; A, i1 w# |, e( V9 l P4 j$ w2 O! v) `$ _" R3 O
- m' K3 L: z0 [& y3 p7 ^9 x
- `, L+ T2 A O( m$ C0 }
6 o! o/ U' K% D, U# B. Q
|