坏蛋网络

 找回密码
 立即注册

微信登录

只需一步,快速开始

手机动态码快速登录

手机号快速注册登录

搜索

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

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

$ O3 o) P; p) z8 ~" }+ x+ G) |5 D9 s' j' P

% v+ N/ w$ G  ^3 PPHP
" \, c' `% P% D: D: }# b
  1. private function _xss_check() {
    # l4 |# \9 K/ r0 s, t4 ?
  2. static $check = array('"', '>', '<', '\'', '(', ')', 'CONTENT-TRANSFER-ENCODING');% ~/ p0 u( W  B0 Y7 |7 Z
  3. if(isset($_GET['formhash']) && $_GET['formhash'] !== formhash()) {9 O7 K9 V" h! ?0 x9 n
  4. system_error('request_tainting');
    # l  m% L1 w5 S' K
  5. }
    / r8 y9 W) r  n5 L( G0 S4 V
  6. if($_SERVER['REQUEST_METHOD'] == 'GET' ) {& l, {$ \  v1 d0 B5 |1 a( u5 e- R
  7. $temp = $_SERVER['REQUEST_URI'];' R0 g! Z0 P1 {( e0 ~
  8. } elseif(empty ($_GET['formhash'])) {: l1 F+ a" i, W, @1 N2 U
  9. $temp = $_SERVER['REQUEST_URI'].file_get_contents('php://input');
    ( L# X+ j+ R5 ?( k4 ?
  10. } else {
    & B/ \2 e3 ~1 v! T( l
  11. $temp = '';
    * Y  B# v- i) |
  12. }+ s( @4 j5 n1 {
  13. if(!empty($temp)) {+ p7 ~2 P4 F' B2 c( I, o
  14. $temp = strtoupper(urldecode(urldecode($temp)));
    ( y/ a$ |' q: b, Y
  15. foreach ($check as $str) {
    2 d  e# Z, N) w6 c
  16. if(strpos($temp, $str) !== false) {
    . q9 D  E& N/ [3 X' z
  17. system_error('request_tainting');/ k5 z6 g2 W% y: ^6 B8 p8 C! _
  18. }6 V2 S7 [; I7 B" S. q/ C; F; S
  19. }. `, L/ E- h# `3 D$ P; q, F+ o
  20. }' K' [/ P8 S3 o, N4 U
  21. return true;4 o5 @$ q" M: J5 }  O$ C
  22. }
复制代码
替换为
2 l! I+ Y4 `1 p  @1 X3 x7 U
  1. private function _xss_check() {
    / W( S' V' B/ S3 C" \) u
  2. $temp = strtoupper(urldecode(urldecode($_SERVER['REQUEST_URI'])));; ^9 C( B3 o1 H2 \
  3. if(strpos($temp, '<') !== false || strpos($temp, '"') !== false || strpos($temp, 'CONTENT-TRANSFER-ENCODING') !== false) {
    * c3 S2 s" B8 i$ x/ ?$ i( L
  4. system_error('request_tainting');
    5 z% w2 P! K6 H( S( F) u! H
  5. }
    0 G6 ]3 d# z6 U" U$ m, O
  6. return true;
    & M) e! a, l" }1 v# e( q
  7. }
复制代码
* w% B5 R8 g9 R" G5 k" L
' E' i0 v3 G9 a, `

6 z3 v+ b0 B* \' n5 @$ t3 r  L
9 @% P/ |( T* ^. L# _
3 \5 U) j- V, k$ j
微信图片_20230607014029.png
想说又不敢说,说了又怕被拒绝,拒绝了又怕尴尬,就是这样的。内心很痛苦的那种。
快速回复 返回顶部 返回列表