关于Discuz!中“您当前的访问请求当中含有非法字符,已经被系统拒绝”的问题,在添加或更新文章的时候经常出现,经测试发现出现这种情况更多的在使用工具(如火车头采集器)批量发布文章时出现,仔细分析发现,当发布的正文内容出现特殊符号(&,/,<,>等)时出现这样的错误提示。 出现这样的错误主要是因为Discuz!系统的_xss_check()函数原本的意义是为了论坛安全,防止XSS攻击,一般网站使用是不会出现什么问题的,但是有些网站要接入第三方接口,当第三方接口向本站post数据的时候就会报”您当前的访问请求当中含有非法字符,已经被系统拒绝”,本文介绍一种简单的修改方法避免此错误。 1 g; b- t$ I2 m0 S0 v
解决方案如下: \source\class\discuz的discuz_application.php 查找如下代码(在360行左右),并替换
4 }; o8 s4 t( C9 Y" i: c
, b' E$ j* e5 K" n7 |* U* z
3 b. Q3 i' c( X$ YPHP
$ H2 f2 w$ }/ K2 y8 U/ h- private function _xss_check() {: N( t# N8 |& W& @ s j0 g
- static $check = array('"', '>', '<', '\'', '(', ')', 'CONTENT-TRANSFER-ENCODING');% h1 u* v8 ~! v) a& f8 g/ C
- if(isset($_GET['formhash']) && $_GET['formhash'] !== formhash()) {
. l# u5 c# b m- v. H+ N( q8 X0 G5 r - system_error('request_tainting');
% A8 v# U3 p* e2 r* @! S: j - }
: q1 R; S# V1 z0 P* e: X. r - if($_SERVER['REQUEST_METHOD'] == 'GET' ) {
0 X z6 Z) F$ t( O: `5 |# T - $temp = $_SERVER['REQUEST_URI'];
) o/ W/ Y# w8 w" g5 W+ C0 @7 t - } elseif(empty ($_GET['formhash'])) {7 E- w* H* |& n
- $temp = $_SERVER['REQUEST_URI'].file_get_contents('php://input');# \" h; |5 a9 U- P
- } else {
1 @$ d, u- T2 b9 p - $temp = '';, T2 z$ b$ J6 l; x
- }
x, ?( `2 n1 K - if(!empty($temp)) {
' b2 n+ R9 j2 R - $temp = strtoupper(urldecode(urldecode($temp)));
+ ]8 ?- |! @2 {4 y( k' U6 @ - foreach ($check as $str) {
/ \1 p0 r6 X/ j# ]* ^1 w& K ~ - if(strpos($temp, $str) !== false) {
7 w. L4 K* M" y# P$ p E' r - system_error('request_tainting');
: Z5 \7 f8 |! |3 V' _: M2 ^4 b - }
% q- e& E0 S7 n5 F, b+ f9 T; { - }% p# _9 U, L a* a
- }
4 ~: {# _" s/ g9 ]7 R5 |5 {$ e2 B - return true;
) W1 `. e5 J, a$ l7 s% v" { - }
复制代码 替换为3 s+ F( ]& v: V1 D
- private function _xss_check() {
4 Z' `8 A2 k# j$ J0 D - $temp = strtoupper(urldecode(urldecode($_SERVER['REQUEST_URI'])));
9 X. b! T, r b2 b - if(strpos($temp, '<') !== false || strpos($temp, '"') !== false || strpos($temp, 'CONTENT-TRANSFER-ENCODING') !== false) {
" W% z) T# H/ q( @1 s - system_error('request_tainting');
+ [- z l# y! B3 t! x! J: @ - }
* `0 [( M: g4 m: D/ O - return true;: k8 C2 R1 }" f
- }
复制代码 ) Y' @. } p& X1 N l
& b- e. ~; W+ j( p5 l( _2 r$ ~! [4 u
7 w- v. r1 U \/ {5 G* u
$ Q* t0 f% u/ `; t8 S6 w: w5 v: l
! u1 X3 t' ~! N
|