关于Discuz!中“您当前的访问请求当中含有非法字符,已经被系统拒绝”的问题,在添加或更新文章的时候经常出现,经测试发现出现这种情况更多的在使用工具(如火车头采集器)批量发布文章时出现,仔细分析发现,当发布的正文内容出现特殊符号(&,/,<,>等)时出现这样的错误提示。 出现这样的错误主要是因为Discuz!系统的_xss_check()函数原本的意义是为了论坛安全,防止XSS攻击,一般网站使用是不会出现什么问题的,但是有些网站要接入第三方接口,当第三方接口向本站post数据的时候就会报”您当前的访问请求当中含有非法字符,已经被系统拒绝”,本文介绍一种简单的修改方法避免此错误。
! D# i" p5 r: z7 A解决方案如下: \source\class\discuz的discuz_application.php 查找如下代码(在360行左右),并替换
! Y& ~9 O0 D; O1 j" N
5 S- \- P5 T; L; B6 J/ s1 e" y( j( |& J; ~9 {
PHP
) p' A5 l4 B3 y% l$ u4 U- private function _xss_check() {
0 e6 p6 I. Q. P& J7 ?! a" q - static $check = array('"', '>', '<', '\'', '(', ')', 'CONTENT-TRANSFER-ENCODING');0 G" T' K" S9 m4 |0 f
- if(isset($_GET['formhash']) && $_GET['formhash'] !== formhash()) {4 Z* ]& K: q$ y5 Y) v
- system_error('request_tainting');5 B! Z C% }6 J, J1 P
- }
( R9 s! Q4 | Z& O6 K( d* r" Q - if($_SERVER['REQUEST_METHOD'] == 'GET' ) {
' J/ i) {0 @& \/ c - $temp = $_SERVER['REQUEST_URI'];9 o* @; p; {/ L# u, a: t
- } elseif(empty ($_GET['formhash'])) { c, h$ Y8 c# k% b; D" H
- $temp = $_SERVER['REQUEST_URI'].file_get_contents('php://input');! O9 a' i8 I' s& [
- } else {: ^6 C& n& r/ c% w3 O8 {
- $temp = '';% T) ?9 E6 f3 W7 n* K0 Y+ D
- }3 u5 G* z+ I; Y8 S% O7 s) g
- if(!empty($temp)) {
$ _7 S* Q* g, o9 v - $temp = strtoupper(urldecode(urldecode($temp)));! X) r* }% A- J9 w6 u) P
- foreach ($check as $str) {& B! Z" l' o; c1 h
- if(strpos($temp, $str) !== false) {
; q& s* Y# A5 |2 z - system_error('request_tainting');
( Q4 O" G" w, i9 ?5 O; M - }
0 [: K. ?& A# D; g- x6 T- P6 h" X - }
! }% U' |! W4 C+ W4 \9 Q+ q - }' H: \8 h$ a+ K
- return true;
6 e& [3 x: _* X' W9 Z- ?+ _- e - }
复制代码 替换为
0 G& I- L# p% w- private function _xss_check() {
( e7 c% b% L4 D! e - $temp = strtoupper(urldecode(urldecode($_SERVER['REQUEST_URI'])));$ c( O7 J; I+ X: Z) i- j" }
- if(strpos($temp, '<') !== false || strpos($temp, '"') !== false || strpos($temp, 'CONTENT-TRANSFER-ENCODING') !== false) {
3 A U) n- s' J3 ]4 M8 i - system_error('request_tainting');, z# v/ o$ ?8 o) v4 V
- }" _. ^* O8 Y# ~9 x; Z. N8 K
- return true;
. w0 F) }" j( D6 v# m/ e - }
复制代码 1 e! O/ ]# ^9 X
! X+ Q0 K" J4 O/ m( Y) \( c0 p
# l5 R8 Q: m3 b5 F6 c/ Q, |
; O& a, t& S6 I: x
, B) ~1 [6 }: g |4 h: P3 P. ?0 x. Q
|