关于Discuz!中“您当前的访问请求当中含有非法字符,已经被系统拒绝”的问题,在添加或更新文章的时候经常出现,经测试发现出现这种情况更多的在使用工具(如火车头采集器)批量发布文章时出现,仔细分析发现,当发布的正文内容出现特殊符号(&,/,<,>等)时出现这样的错误提示。 出现这样的错误主要是因为Discuz!系统的_xss_check()函数原本的意义是为了论坛安全,防止XSS攻击,一般网站使用是不会出现什么问题的,但是有些网站要接入第三方接口,当第三方接口向本站post数据的时候就会报”您当前的访问请求当中含有非法字符,已经被系统拒绝”,本文介绍一种简单的修改方法避免此错误。
/ f* z4 }+ @* ?解决方案如下: \source\class\discuz的discuz_application.php 查找如下代码(在360行左右),并替换
+ q# N- _9 X! G4 V4 y6 H0 Z! a
( l6 L d* H. ]( p( s z- |/ o, ^- r& L5 y; p+ w
PHP
( N+ i" X: M, X' m- private function _xss_check() {* x/ o7 G8 I0 Y1 z4 @+ ~
- static $check = array('"', '>', '<', '\'', '(', ')', 'CONTENT-TRANSFER-ENCODING');
; G$ {; }2 I/ E9 w5 k - if(isset($_GET['formhash']) && $_GET['formhash'] !== formhash()) {
7 _ T% I/ t/ A3 H - system_error('request_tainting');
! L, Y C2 z2 f' U! V5 C* E - }
% \! \+ G$ a1 q; D$ u - if($_SERVER['REQUEST_METHOD'] == 'GET' ) {
, V$ Y* C: b+ N0 m | - $temp = $_SERVER['REQUEST_URI'];4 h$ @7 _. F' T5 u
- } elseif(empty ($_GET['formhash'])) {( S3 K1 T' e; w0 o, I$ O* }2 l2 ~3 l
- $temp = $_SERVER['REQUEST_URI'].file_get_contents('php://input');
2 ~" N! Q/ _: }# U/ }' R( P - } else {
8 i5 G0 o4 N J5 g- w - $temp = ''; K8 e* O+ a2 o1 M
- }
, q5 p- a+ G/ L& _7 a" \ - if(!empty($temp)) { o. x f8 \+ R3 Y/ v% S
- $temp = strtoupper(urldecode(urldecode($temp)));' y; i# U" u g- E; [% p! J5 |% L G
- foreach ($check as $str) {3 F7 ]5 W, m8 ^, R; M! w
- if(strpos($temp, $str) !== false) {3 k3 K, F7 A6 F3 C& i
- system_error('request_tainting');9 m, b# m% g' i
- }
# q4 L g8 y5 |7 K, g* d2 A - }4 n6 c, z7 ]5 Z' _, R: u) t
- }3 X0 o7 ?: n( }
- return true;
$ d; a% g1 q P7 Q- ?: j& f - }
复制代码 替换为
3 R* e3 i: w8 E% G- private function _xss_check() {/ }7 W3 ~$ ~ ?8 N' |2 o
- $temp = strtoupper(urldecode(urldecode($_SERVER['REQUEST_URI'])));
" O8 L- a, k/ P8 l) z0 f$ i: J - if(strpos($temp, '<') !== false || strpos($temp, '"') !== false || strpos($temp, 'CONTENT-TRANSFER-ENCODING') !== false) {
2 X" q% }6 T% y8 @% Z* y - system_error('request_tainting');& @5 r, E7 r+ E+ [* w' ?
- }' Y& t- q8 y8 P+ h
- return true;
/ ]$ t0 c1 r1 x3 m9 B1 J! ]- | - }
复制代码
k" G, r6 a1 X* F$ F! G/ t9 q4 l. s' z( c& ?1 m6 i! v
% B# R0 L4 e' ]- M2 f
0 ~, r q6 j: | L: |: U6 |3 C* Z* Q8 V
|
|