坏蛋网络

 找回密码
 立即注册

微信登录

只需一步,快速开始

手机动态码快速登录

手机号快速注册登录

搜索

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

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

3 b# B, C  X4 [+ B; d9 X2 a5 a' u0 E" z, [. J6 _* z5 K+ d) l

2 s, T/ s2 z) h4 _1 {4 {PHP
9 y% L; ]7 y% f; ^$ I' o* v
  1. private function _xss_check() {, x  g/ \* t$ X% M+ `7 a2 B
  2. static $check = array('"', '>', '<', '\'', '(', ')', 'CONTENT-TRANSFER-ENCODING');
    ) y5 N  G- e0 T& C  R, V' Y- O+ q/ B- @
  3. if(isset($_GET['formhash']) && $_GET['formhash'] !== formhash()) {
    0 {1 x3 N1 ]9 U6 V: f0 V
  4. system_error('request_tainting');
    3 H/ b0 e: L2 g$ q- x9 `2 @' a2 ]- C
  5. }
    7 L4 {3 e- K) ]. v3 s: W
  6. if($_SERVER['REQUEST_METHOD'] == 'GET' ) {6 c9 B0 j3 s9 Q
  7. $temp = $_SERVER['REQUEST_URI'];3 _/ A/ P6 X8 b8 |, o# F7 I
  8. } elseif(empty ($_GET['formhash'])) {' f% @/ x4 H, J5 @
  9. $temp = $_SERVER['REQUEST_URI'].file_get_contents('php://input');
    8 {( N* b( T: f. U
  10. } else {
    ) a9 @: U. k) `0 Q
  11. $temp = '';' @, I( L/ S& p0 \. q
  12. }
    2 W! a( b, t2 a& T
  13. if(!empty($temp)) {) H' v6 D% ]/ v  V- P1 p) T/ N
  14. $temp = strtoupper(urldecode(urldecode($temp)));
    : q2 {$ W! ?9 I3 z& L7 s8 A
  15. foreach ($check as $str) {
    4 {4 ]/ s6 E. p" t% i- W+ h" v
  16. if(strpos($temp, $str) !== false) {
    9 Z9 v& d" H: v+ j
  17. system_error('request_tainting');
    - R' F# u0 a) [) D" k
  18. }
    ) R" h4 a- b& m2 ~" T
  19. }# h4 N( j3 D* N9 v1 Q" x
  20. }8 [0 t6 ~/ G$ C% S$ n# R% s1 H) t
  21. return true;+ E; K7 D4 P# F1 D& `  V
  22. }
复制代码
替换为
$ G! V( T* t3 M! V: V* y% O
  1. private function _xss_check() {7 d1 C8 ]( s, k3 y
  2. $temp = strtoupper(urldecode(urldecode($_SERVER['REQUEST_URI'])));
    1 m& q( I6 z3 y
  3. if(strpos($temp, '<') !== false || strpos($temp, '"') !== false || strpos($temp, 'CONTENT-TRANSFER-ENCODING') !== false) {3 u% v3 ?; G8 \/ `) R4 t
  4. system_error('request_tainting');; r! f0 m! b9 @* e( {' Z" J* g9 v$ C* M
  5. }/ F" X% U1 l8 N) I7 N) Q# @
  6. return true;
    : m) Y' |7 L* b
  7. }
复制代码
1 Y7 h! E6 y. t4 {7 t- [

3 E& g/ V& r2 K/ a6 e
# l8 T9 B+ o1 M3 D: p0 J& c

9 W+ M1 T# k, Q. `
2 ~! y" N) l, {) a, R
微信图片_20230607014029.png
想说又不敢说,说了又怕被拒绝,拒绝了又怕尴尬,就是这样的。内心很痛苦的那种。
快速回复 返回顶部 返回列表