坏蛋网络

 找回密码
 立即注册

微信登录

只需一步,快速开始

手机动态码快速登录

手机号快速注册登录

搜索

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

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

2 T1 G5 T8 m2 ~" }; A4 f2 V
231121c6zczgo68wflozm2.png
解决方案如下:
\source\class\discuz的discuz_application.php
查找如下代码(在360行左右),并替换
- `* F5 N. t  ]
3 e1 c1 {1 v3 ^! z2 `0 M

( a, C3 Q0 z6 X% r0 l0 oPHP
" k& D* [1 H8 ^3 T  J
  1. private function _xss_check() {
    7 g$ p% f5 C5 |+ w+ W3 _2 K' F4 C. n
  2. static $check = array('"', '>', '<', '\'', '(', ')', 'CONTENT-TRANSFER-ENCODING');
    ; R6 t# X& `2 H+ b
  3. if(isset($_GET['formhash']) && $_GET['formhash'] !== formhash()) {
    . `6 l# P# ~8 I6 r" p7 F( d' L" {
  4. system_error('request_tainting');
    ) T1 B/ w" r# F% h9 j; L
  5. }
    % a  G. z, b& ]& i3 _. Q
  6. if($_SERVER['REQUEST_METHOD'] == 'GET' ) {3 {7 @: |- |7 m/ O1 p5 {
  7. $temp = $_SERVER['REQUEST_URI'];. E+ j8 C+ q+ o0 G
  8. } elseif(empty ($_GET['formhash'])) {; {8 o& m$ B3 B4 V; w. T
  9. $temp = $_SERVER['REQUEST_URI'].file_get_contents('php://input');6 N2 F6 k! n0 w) `' x; b& g" x
  10. } else {8 [. J9 |( v- u/ y5 b0 E
  11. $temp = '';; @  ?$ {9 s7 D" Q- c
  12. }
    7 T: ?: b. ^& I6 f# G
  13. if(!empty($temp)) {
    " k; e$ q% e  n! }3 J9 O
  14. $temp = strtoupper(urldecode(urldecode($temp)));
      H$ {  E6 m! c- @
  15. foreach ($check as $str) {
    . U7 r6 {4 x2 R7 u4 G; o% X2 ~+ q
  16. if(strpos($temp, $str) !== false) {
    7 n2 }- z9 c* ^; r
  17. system_error('request_tainting');
    $ L) J0 X+ v# |# h
  18. }
    " w' C2 N8 u3 Q
  19. }
    + N0 X6 _8 q8 ~8 q( J: O& l
  20. }/ k. u* ^: h3 v1 f4 s
  21. return true;
    5 v# b3 E) K/ _/ y8 ^6 M7 u
  22. }
复制代码
替换为
. L+ T* h1 x) s+ R, y% E
  1. private function _xss_check() {
    9 c, P) M1 D3 Y0 n7 v, q
  2. $temp = strtoupper(urldecode(urldecode($_SERVER['REQUEST_URI'])));
      j- `$ U, W. ~0 r6 p
  3. if(strpos($temp, '<') !== false || strpos($temp, '"') !== false || strpos($temp, 'CONTENT-TRANSFER-ENCODING') !== false) {
    $ J% D3 x6 Y5 ?4 d( L4 ?/ m; |- _
  4. system_error('request_tainting');2 T. P% R/ [, T6 I: h
  5. }+ ]2 v0 h/ F0 _9 P8 V# ^
  6. return true;% l" \' G% o8 ^6 ]8 {4 x1 l. a0 k
  7. }
复制代码
- n$ N1 y+ l% D& Q1 O
# ?# u7 T/ K( b' n0 W* @4 q

' `1 p$ e5 U8 \+ j/ i: T
( @& O' I$ x8 g

  N, O1 ]# A( ~
微信图片_20230607014029.png
想说又不敢说,说了又怕被拒绝,拒绝了又怕尴尬,就是这样的。内心很痛苦的那种。
快速回复 返回顶部 返回列表