坏蛋网络

 找回密码
 立即注册

微信登录

只需一步,快速开始

手机动态码快速登录

手机号快速注册登录

搜索

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

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

4 }; o8 s4 t( C9 Y" i: c
, b' E$ j* e5 K" n7 |* U* z
3 b. Q3 i' c( X$ YPHP
$ H2 f2 w$ }/ K2 y8 U/ h
  1. private function _xss_check() {: N( t# N8 |& W& @  s  j0 g
  2. static $check = array('"', '>', '<', '\'', '(', ')', 'CONTENT-TRANSFER-ENCODING');% h1 u* v8 ~! v) a& f8 g/ C
  3. if(isset($_GET['formhash']) && $_GET['formhash'] !== formhash()) {
    . l# u5 c# b  m- v. H+ N( q8 X0 G5 r
  4. system_error('request_tainting');
    % A8 v# U3 p* e2 r* @! S: j
  5. }
    : q1 R; S# V1 z0 P* e: X. r
  6. if($_SERVER['REQUEST_METHOD'] == 'GET' ) {
    0 X  z6 Z) F$ t( O: `5 |# T
  7. $temp = $_SERVER['REQUEST_URI'];
    ) o/ W/ Y# w8 w" g5 W+ C0 @7 t
  8. } elseif(empty ($_GET['formhash'])) {7 E- w* H* |& n
  9. $temp = $_SERVER['REQUEST_URI'].file_get_contents('php://input');# \" h; |5 a9 U- P
  10. } else {
    1 @$ d, u- T2 b9 p
  11. $temp = '';, T2 z$ b$ J6 l; x
  12. }
      x, ?( `2 n1 K
  13. if(!empty($temp)) {
    ' b2 n+ R9 j2 R
  14. $temp = strtoupper(urldecode(urldecode($temp)));
    + ]8 ?- |! @2 {4 y( k' U6 @
  15. foreach ($check as $str) {
    / \1 p0 r6 X/ j# ]* ^1 w& K  ~
  16. if(strpos($temp, $str) !== false) {
    7 w. L4 K* M" y# P$ p  E' r
  17. system_error('request_tainting');
    : Z5 \7 f8 |! |3 V' _: M2 ^4 b
  18. }
    % q- e& E0 S7 n5 F, b+ f9 T; {
  19. }% p# _9 U, L  a* a
  20. }
    4 ~: {# _" s/ g9 ]7 R5 |5 {$ e2 B
  21. return true;
    ) W1 `. e5 J, a$ l7 s% v" {
  22. }
复制代码
替换为3 s+ F( ]& v: V1 D
  1. private function _xss_check() {
    4 Z' `8 A2 k# j$ J0 D
  2. $temp = strtoupper(urldecode(urldecode($_SERVER['REQUEST_URI'])));
    9 X. b! T, r  b2 b
  3. if(strpos($temp, '<') !== false || strpos($temp, '"') !== false || strpos($temp, 'CONTENT-TRANSFER-ENCODING') !== false) {
    " W% z) T# H/ q( @1 s
  4. system_error('request_tainting');
    + [- z  l# y! B3 t! x! J: @
  5. }
    * `0 [( M: g4 m: D/ O
  6. return true;: k8 C2 R1 }" f
  7. }
复制代码
) Y' @. }  p& X1 N  l
& b- e. ~; W+ j( p5 l( _2 r$ ~! [4 u
7 w- v. r1 U  \/ {5 G* u
$ Q* t0 f% u/ `; t8 S6 w: w5 v: l
! u1 X3 t' ~! N
微信图片_20230607014029.png
想说又不敢说,说了又怕被拒绝,拒绝了又怕尴尬,就是这样的。内心很痛苦的那种。
快速回复 返回顶部 返回列表