坏蛋网络

 找回密码
 立即注册

微信登录

只需一步,快速开始

手机动态码快速登录

手机号快速注册登录

搜索

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

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

8 h+ A, L0 j6 K
231121c6zczgo68wflozm2.png
解决方案如下:
\source\class\discuz的discuz_application.php
查找如下代码(在360行左右),并替换
& @+ K" R7 n. L; z' h/ v3 v
' Q. I" W8 z( J! C

/ T6 d0 p/ O8 l# _$ VPHP6 T3 @; [# \# v8 ~' Y
  1. private function _xss_check() {- N% D' S2 |4 M: M  Q' D' m+ V
  2. static $check = array('"', '>', '<', '\'', '(', ')', 'CONTENT-TRANSFER-ENCODING');
    ; Y& i# L/ _% P. [# ?8 o+ [: n
  3. if(isset($_GET['formhash']) && $_GET['formhash'] !== formhash()) {( s3 ^& g; Y- ]# ~5 }
  4. system_error('request_tainting');! a1 }% J' m( a0 O; h. {
  5. }
    9 l& G! N1 \( E) X
  6. if($_SERVER['REQUEST_METHOD'] == 'GET' ) {
    ' z% O( P- Y7 {$ \) l3 Q6 i
  7. $temp = $_SERVER['REQUEST_URI'];
    # d( t# A* U% q7 E+ C$ d
  8. } elseif(empty ($_GET['formhash'])) {2 y/ n$ a1 Y% K1 K& L
  9. $temp = $_SERVER['REQUEST_URI'].file_get_contents('php://input');
    $ t: O5 g5 f0 W
  10. } else {( m7 D  v: Z' h
  11. $temp = '';
    0 O" T. P3 n! V& ^
  12. }7 l8 e' M' d/ x# R1 z4 Z* A* O# K
  13. if(!empty($temp)) {
    : i4 [1 w" B! Z! u
  14. $temp = strtoupper(urldecode(urldecode($temp)));
    1 c5 c/ x: ?; r  Q
  15. foreach ($check as $str) {
    6 @9 e5 f1 e6 N$ A7 M% J# l
  16. if(strpos($temp, $str) !== false) {
    $ k3 G+ d* K. N) O& f1 J; g
  17. system_error('request_tainting');+ Q3 `; f: w0 {" x$ J* O
  18. }
    3 @3 Q: U; d3 Q5 }
  19. }$ u& e( h8 Z9 s# D' @
  20. }
    7 _- }% P8 O4 q1 B& }% ^
  21. return true;3 @% ?: h. U  L+ c. `
  22. }
复制代码
替换为
% Y1 v8 \' P0 d+ l
  1. private function _xss_check() {2 {, ]* A& [: m' [- S
  2. $temp = strtoupper(urldecode(urldecode($_SERVER['REQUEST_URI'])));
    , Y- [9 p0 L& s: k
  3. if(strpos($temp, '<') !== false || strpos($temp, '"') !== false || strpos($temp, 'CONTENT-TRANSFER-ENCODING') !== false) {
    ( ~# y; v1 e  ^- l1 k
  4. system_error('request_tainting');8 E7 `7 P/ Z" `# X' b& I4 {
  5. }
    / m! b' A2 I& ~2 I
  6. return true;- C3 W9 i& n; G5 b  B4 _# b0 U8 q/ i
  7. }
复制代码

, |4 \  n) |4 |# H
2 X, O1 y1 W- P5 c8 E9 \1 y! t; V( J# T& z
& }8 c' z: ^0 l+ K2 u

( T8 J4 q, k9 _- W1 q: a
微信图片_20230607014029.png
想说又不敢说,说了又怕被拒绝,拒绝了又怕尴尬,就是这样的。内心很痛苦的那种。
快速回复 返回顶部 返回列表