坏蛋网络

 找回密码
 立即注册

微信登录

只需一步,快速开始

手机动态码快速登录

手机号快速注册登录

搜索

[DZ教程] Discuz!您当前的访问请求当中含有非法字符,已经被系统拒绝解决方案

[复制链接]
坏蛋网络官方 发表于 2023-6-7 01:40:56 | 显示全部楼层 |阅读模式
关于Discuz!中“您当前的访问请求当中含有非法字符,已经被系统拒绝”的问题,在添加或更新文章的时候经常出现,经测试发现出现这种情况更多的在使用工具(如火车头采集器)批量发布文章时出现,仔细分析发现,当发布的正文内容出现特殊符号(&,/,<,>等)时出现这样的错误提示。
出现这样的错误主要是因为Discuz!系统的_xss_check()函数原本的意义是为了论坛安全,防止XSS攻击,一般网站使用是不会出现什么问题的,但是有些网站要接入第三方接口,当第三方接口向本站post数据的时候就会报”您当前的访问请求当中含有非法字符,已经被系统拒绝”,本文介绍一种简单的修改方法避免此错误。

  y, J: F! m  H7 P6 v
231121c6zczgo68wflozm2.png
解决方案如下:
\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
  1. private function _xss_check() {
    + u, k4 J: }+ R. }7 {' P7 R
  2. static $check = array('"', '>', '<', '\'', '(', ')', 'CONTENT-TRANSFER-ENCODING');
    2 W( T; x( w1 E& U( z
  3. if(isset($_GET['formhash']) && $_GET['formhash'] !== formhash()) {
    8 S0 q1 l; u, q+ x. b( C' _) ^( S
  4. system_error('request_tainting');& j5 ?2 o: n4 _$ C1 g
  5. }
    8 }" h$ n- \) ~9 `+ @) ~
  6. if($_SERVER['REQUEST_METHOD'] == 'GET' ) {/ n- \* W% e( S4 l# y& J
  7. $temp = $_SERVER['REQUEST_URI'];  l; L) I  B! G, M  m
  8. } elseif(empty ($_GET['formhash'])) {7 M5 C$ d3 W% |6 A+ d
  9. $temp = $_SERVER['REQUEST_URI'].file_get_contents('php://input');7 ]! u$ f2 F) K( [1 i5 \8 X: l
  10. } else {5 l- x: C0 B1 M. C
  11. $temp = '';
    $ M5 E' }6 @, M3 v1 A8 u( p
  12. }$ T! G* t8 {  E1 N# R6 W9 M
  13. if(!empty($temp)) {5 a# Y. G4 _& H* C
  14. $temp = strtoupper(urldecode(urldecode($temp)));3 I; N( S$ M5 J: ~$ ~  D* k4 d
  15. foreach ($check as $str) {
    * Y' @) s, U3 P
  16. if(strpos($temp, $str) !== false) {
    $ ^2 k, n' r0 `  o/ a) {! }1 X
  17. system_error('request_tainting');
    ) _( F8 `! P- j& i/ ?8 w( l/ r" M
  18. }5 |2 x+ @" @$ f7 }6 a
  19. }" B* O* C6 u/ ^$ h$ c% D" t
  20. }
    + n7 F9 h2 i7 [" X# }
  21. return true;% n0 B6 B- J; e# h
  22. }
复制代码
替换为% F; V4 q% f3 [" ^  c! G' H
  1. private function _xss_check() {7 h. n4 O5 B  p3 z
  2. $temp = strtoupper(urldecode(urldecode($_SERVER['REQUEST_URI'])));
    ' c7 o. }3 x, F+ R7 |
  3. if(strpos($temp, '<') !== false || strpos($temp, '"') !== false || strpos($temp, 'CONTENT-TRANSFER-ENCODING') !== false) {* W4 Y: ^! W: J% J+ O# E  t
  4. system_error('request_tainting');
    8 e0 W5 `2 c9 U+ W) ~: J6 }4 j
  5. }
    8 x6 t) j3 f( }2 x9 P5 P( k
  6. return true;
    1 c' K& d8 u0 v3 Y7 Z
  7. }
复制代码

: 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
微信图片_20230607014029.png
想说又不敢说,说了又怕被拒绝,拒绝了又怕尴尬,就是这样的。内心很痛苦的那种。
快速回复 返回顶部 返回列表