坏蛋网络

 找回密码
 立即注册

微信登录

只需一步,快速开始

手机动态码快速登录

手机号快速注册登录

搜索

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

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

( ~4 r& |6 w/ A+ X2 o" v5 q, C5 f# l& a* ^3 e( N1 D9 g
. O$ K" Z- n7 u# T
PHP
1 K! r' T/ P. D; u% p
  1. private function _xss_check() {! n+ Y: m* L  u/ e: G7 g
  2. static $check = array('"', '>', '<', '\'', '(', ')', 'CONTENT-TRANSFER-ENCODING');
    ; N; ~: ]6 b0 J! K' a0 j
  3. if(isset($_GET['formhash']) && $_GET['formhash'] !== formhash()) {
    ( P& V% ]9 Q# y" K9 w  e7 I/ I
  4. system_error('request_tainting');
    * Q4 f! q6 s  _4 a# L5 ^
  5. }
    * V! J+ T  K1 Z5 ?$ ?) v  r4 Z8 l
  6. if($_SERVER['REQUEST_METHOD'] == 'GET' ) {
    ' `* i' w0 f1 f+ [1 y
  7. $temp = $_SERVER['REQUEST_URI'];* Q+ z% k: a: X5 J/ Z* M' _
  8. } elseif(empty ($_GET['formhash'])) {
    % A; M' D1 N4 X( ^$ d6 N
  9. $temp = $_SERVER['REQUEST_URI'].file_get_contents('php://input');; S/ B* r5 f4 k! n" W; l7 f& H8 X/ u
  10. } else {; S3 }, G/ f; V6 Y
  11. $temp = '';) B% l' C  |  S6 }, o- c+ q4 z9 z$ _
  12. }
    , @) J8 z0 e9 G/ v4 J' A
  13. if(!empty($temp)) {
    ! h( v7 f# d6 S: R* }" b. F4 J% G
  14. $temp = strtoupper(urldecode(urldecode($temp)));9 E) }! O- d1 g1 Q  F- U, }  _
  15. foreach ($check as $str) {. U# e5 x; b' c$ U6 E5 s, ~
  16. if(strpos($temp, $str) !== false) {( w" \/ g; `! x4 E. n
  17. system_error('request_tainting');6 B+ q: l1 y" \+ f. N" e/ \9 j( B
  18. }9 ]- L  A: ^  Y
  19. }: U2 K" {; \; g. Q+ p, k' L
  20. }
    ! z5 u) Y4 C+ l5 o- Q
  21. return true;& ]2 }, O& @; Y7 B# `
  22. }
复制代码
替换为
9 a5 S1 n+ V: l/ V2 U3 G3 _
  1. private function _xss_check() {& |1 c2 f* k: t
  2. $temp = strtoupper(urldecode(urldecode($_SERVER['REQUEST_URI'])));
    . M. Q$ K6 x; x6 a) E! X. u
  3. if(strpos($temp, '<') !== false || strpos($temp, '"') !== false || strpos($temp, 'CONTENT-TRANSFER-ENCODING') !== false) {
    ! o2 y& b: I% }) z
  4. system_error('request_tainting');- O/ u7 t& c- ]9 M& \8 [
  5. }
    6 `8 c' l; D/ ^& i. ]- K
  6. return true;: v2 t! z0 @! c4 O
  7. }
复制代码

% G( i% u& x& s" s% W' o0 s: E
0 ^: ]' P6 G/ E" j( b4 b, L2 X) x

% r+ Y6 _  W1 h! x7 c0 O) G" r# c4 X  R) G, R5 }! g# x5 u
微信图片_20230607014029.png
想说又不敢说,说了又怕被拒绝,拒绝了又怕尴尬,就是这样的。内心很痛苦的那种。
快速回复 返回顶部 返回列表